commit e8e5f3a1a787e2ff940c42d7e804798b619e5c96 Author: Naruse <71993948+DevilProMT@users.noreply.github.com> Date: Thu Nov 7 23:25:15 2024 +0800 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aea7ffd --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ + +/.vscode +*.pyc +/resources +/game_server/packet/test +/lib/proto diff --git a/Config.json b/Config.json new file mode 100644 index 0000000..b271183 --- /dev/null +++ b/Config.json @@ -0,0 +1,15 @@ +{ + "LogLevel": "INFO", + "MaxSessions": 10, + "GameServer": { + "Ip": "127.0.0.1", + "Port": 16100 + }, + "SdkServer": { + "Ip": "127.0.0.1", + "Port": 80 + }, + "VerboseLevel":1, + "RegionName":"MikuBH3", + "UseLocalCache":false +} \ No newline at end of file diff --git a/Endless.json b/Endless.json new file mode 100644 index 0000000..9fc919f --- /dev/null +++ b/Endless.json @@ -0,0 +1,3 @@ +{ + "area1":781009 +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9de66f7 --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ + +# MikuBH3 + +A Server emulator for version 7.9 of a certain adventure anime game +![screenshot](https://github.com/MikuLeaks/MikuBH3-PS/blob/master/screenshot.png) + + +## Requirements +- Python 3.12++ +- [MongoDB](https://www.mongodb.com/try/download/community) + +## Features + +- Basic features: inventory,warship,dress,custom team +- Working battle with grandkey & elf/astral +- Superstring Dimension (Abyss) +- Universial Mirage +- Story Chapter 1 - 42 + + +## Installation + +For your first launch, run these: + +```python +pip install -r requirements.txt +``` + +Download resources & proto from [MikuBH3-Res](https://github.com/MikuLeaks/MikuBH3-RES) and place them into your resources & lib folder. +``` +├───resources +│ └───ExcelOutputAsset +├───lib +│ └───proto +│ └───__init__.py +``` + +also build patch from [MikuBH3-Patch](https://github.com/MikuLeaks/MikuBH3-PATCH) and place them into your game directory `Honkai Impact 3rd Game` + +## To-Do List + +- Commands + +- Memorial Arena + +- Elysian Realm + +- Open World + +- Part 2 Story & Open world + +- Character Tutorial + + +### Connecting with the client (Fiddler method) +- Log in with the client to an official server at least once to download game data. +- Install and have [Fiddler Classic](https://www.telerik.com/fiddler) running. +- Copy and paste the following code into the Fiddlerscript tab of Fiddler Classic. Remember to save the fiddler script after you copy and paste it: + +``` +import System; +import System.Windows.Forms; +import Fiddler; +import System.Text.RegularExpressions; +class Handlers +{ + static function OnBeforeRequest(oS: Session) { + if( (oS.host.EndsWith("global1.bh3.com")) || oS.host == "47.74.175.126" || oS.host.EndsWith(".yuanshen.com") || oS.host.EndsWith(".hoyoverse.com") || oS.host.EndsWith(".starrails.com") || oS.host.EndsWith(".bhsr.com") || oS.host.EndsWith(".kurogame.com") || oS.host.EndsWith(".zenlesszonezero.com") || oS.host.EndsWith(".g3.proletariat.com") || oS.host.EndsWith("west.honkaiimpact3.com") || oS.host.EndsWith("westglobal01.honkaiimpact3.com") || oS.host.EndsWith(".os.honkaiimpact3.com") || oS.host.EndsWith("overseas01-appsflyer-report.honkaiimpact3.com") || oS.host.EndsWith(".mihoyo.com") || (oS.host.EndsWith("global2.bh3.com") && !oS.host.Contains("bundle"))) { + oS.host = "127.0.0.1"; + } + } +} +``` + + +## Usage/Examples +To run the project use cmd or vscode and run +```python +py hi3 +``` + +after game running wait for 20-30 seconds till patch loaded and press Try Again +![Patch](https://github.com/MikuLeaks/MikuBH3-PS/blob/master/patch.png) +till it look like this + +## Change Stage Superstring Dimension (Abyss) + +edit `Endless.json` and set area1 to desire `SiteID` from `UltraEndlessSite.json` + +## Use Local Patch +edit `Config.json` and set UseLocalCache to True, after that put data cache folder from AppData `Honkai Impact 3rd Game` into `resources/statics` + +# Support +Join [Discord](discord.gg/MdHC4AJvec) for support + +# Credits +- am25 diff --git a/database/__init__.py b/database/__init__.py new file mode 100644 index 0000000..3ffaead --- /dev/null +++ b/database/__init__.py @@ -0,0 +1,93 @@ +from __future__ import annotations +import pymongo +from database.create_db import MongoDBCreate +from database.save_data import SaveData +from game_server.resource import ResourceManager + + +class MongoDBConnection: + def __init__(self, host="localhost", port=27017, db_name="mikubh3"): + self.host = host + self.port = port + self.db_name = db_name + self.client = None + self.db = None + + def connect(self): + try: + ResourceManager.instance().load_resources() + self.client = pymongo.MongoClient(f"mongodb://{self.host}:{self.port}/") + if self.db_name: + self.db = self.client[self.db_name] + databases = self.client.list_database_names() + if self.db_name not in databases: + print("Database not found. Will create one") + MongoDBCreate(self) + print("Connected to MongoDB successfully!") + else: + print("No database selected.") + except pymongo.errors.ConnectionFailure as e: + print("Could not connect to MongoDB: %s" % e) + + def close(self): + if self.client: + self.client.close() + print("Connection to MongoDB closed.") + + def get_collection(self, collection_name): + if self.db is not None: + return self.db[collection_name] + else: + print("No database selected. Connect to a database first.") + return None + + def insert_document(self, collection_name, document): + collection = self.get_collection(collection_name) + if collection is not None: + try: + result = collection.insert_one(document) + print(f"Document inserted successfully with id:{result.inserted_id}") + except Exception as e: + print(f"Error inserting document:{e}") + + def find_documents(self, collection_name, query={}): + collection = self.get_collection(collection_name) + if collection is not None: + return collection.find(query) + else: + print("Collection not found.") + return None + + def find_documents_by_key_values(self, collection_name, key_values): + collection = self.get_collection(collection_name) + if collection is not None: + query = {key: value for key, value in key_values.items()} + return collection.find(query) + else: + print("Collection not found.") + return None + + def update_document(self, collection_name, filter_query, update_query): + collection = self.get_collection(collection_name) + if collection is not None: + try: + result = collection.update_one(filter_query, update_query) + print(f"Document updated successfully:{result.modified_count}") + except Exception as e: + print(f"Error updating document:{e}") + + def delete_document(self, collection_name, filter_query): + collection = self.get_collection(collection_name) + if collection is not None: + try: + result = collection.delete_one(filter_query) + print(f"Document deleted successfully:{result.deleted_count} document(s) deleted.") + except Exception as e: + print(f"Error deleting document:{e}") + + def save(self,session,data_type,ids=[0]): + save_data = SaveData(self,session,data_type,ids) + save_data.save() + +mongo = MongoDBConnection() +mongo.connect() \ No newline at end of file diff --git a/database/create_db.py b/database/create_db.py new file mode 100644 index 0000000..08f4f35 --- /dev/null +++ b/database/create_db.py @@ -0,0 +1,169 @@ +import time +import json +import random +from game_server.resource import ResourceManager +from game_server.resource.configdb.avatar_data import AvatarData +from game_server.resource.configdb.weapon_data import WeaponData +from game_server.resource.configdb.stigmata_data import StigmataData +from game_server.resource.configdb.material_data import MaterialData +from game_server.resource.configdb.elf_astra_mate_data import ElfAstraMateData +from game_server.resource.configdb.dress_data import DressData +from game_server.game.enum.item_type import MainType + +class MongoDBCreate: + def __init__(self, mongo): + self.mongo = mongo + self.manager = ResourceManager.instance() + self.create_db() + self.avatars() + self.items() + self.elfs() + + def create_db(self): + player_data = { + "UID": 1337, + "Name": "Miku", + "Level": 88, + "Exp": 0, + "HCoin": 1337, + "Stamina": 80, + "Sign": "MikuPS", + "HeadPhoto": 161090, + "HeadFrame": 200001, + "WarshipId": 400004, + "AssistantAvatarId": 101, + "WarshipAvatar": { + "WarshipFirstAvatarId": 101, + "WarshipSecondAvatarId": 0 + }, + "BirthDate": 0, + "CustomAvatarTeamList":{ + f"{i}":{ + "TeamId":i, + "Name": f"Team {i}", + "astraMateId":0, + "isUsingAstraMate":False, + "elfIdList":[], + "AvatarIdLists":[] + } + for i in range(1,11) + } + } + self.mongo.insert_document("players",player_data) + + def avatars(self): + data = [] + for avatar in self.manager.instance().values(AvatarData): + valk = { + "AvatarID":avatar.avatarID, + "Star":avatar.unlockStar, + "Level":80, + "Exp":0, + "Fragment":0, + "TouchGoodFeel":0, + "TodayHasAddGoodFeel":0, + "DressID":avatar.DefaultDressId, + "DressLists":[ + dress.dressID + for dress in self.manager.instance().values(DressData) + if avatar.avatarID in dress.avatarIDList + ], + "AvatarArtifact":None, + "SubStar":0, + "SkillLists": { + f"{skillId}": { + "SkillId": skillId, + "SubSkillLists": {} + } + for skillId in avatar.skillList + }, + "CreateTime":int(time.time()) + } + data.append(valk) + self.mongo.get_collection("avatars").insert_many(data) + + def items(self): + last_item = self.mongo.get_collection("items").find_one(sort=[("UniqueID", -1)]) + unique_id = last_item["UniqueID"] + 1 if last_item else 1 + + items_data = [] + + for weapon in self.manager.instance().values(WeaponData): + if weapon.rarity == weapon.maxRarity: + weapon_data = { + "UniqueID":unique_id, + "ItemID":weapon.ID, + "Level":weapon.maxLv, + "Exp":0, + "IsLocked":False, + "IsExtracted":False, + "QuantumBranchLists":None, + "MainType":MainType.WEAPON.value, + "EquipAvatarID":0 + } + items_data.append(weapon_data) + unique_id += 1 + + for stigmata in self.manager.instance().values(StigmataData): + if stigmata.rarity == stigmata.maxRarity: + stigmata_data = { + "UniqueID":unique_id, + "ItemID":stigmata.ID, + "Level":stigmata.maxLv, + "Exp":0, + "SlotNum":0, + "RefineValue":0, + "PromoteTimes":0, + "IsLocked":False, + "RuneLists":[], + "WaitSelectRuneLists":[], + "WaitSelectRuneGroupLists":[], + "MainType":MainType.STIGMATA.value, + "EquipAvatarID":0 + } + items_data.append(stigmata_data) + unique_id += 1 + + for material in self.manager.instance().values(MaterialData): + material = { + "ItemID":material.ID, + "ItemNum":99999999 if material.ID == 100 else (999 if material.quantityLimit > 999 else material.quantityLimit), + "MainType":MainType.MATERIAL.value, + } + items_data.append(material) + + for avatar in self.manager.instance().values(AvatarData): + avatar_data = { + "UniqueID":unique_id, + "ItemID":avatar.initialWeapon, + "Level":15, + "Exp":0, + "IsLocked":False, + "IsExtracted":False, + "QuantumBranchLists":None, + "MainType":MainType.WEAPON.value, + "EquipAvatarID":avatar.avatarID + } + items_data.append(avatar_data) + unique_id += 1 + + self.mongo.get_collection("items").insert_many(items_data) + + def elfs(self): + elfs_data = [] + for elf in self.manager.instance().values(ElfAstraMateData): + elf_data = { + "ElfId":elf.ElfID, + "Level":elf.MaxLevel, + "Star":elf.MaxRarity, + "Exp":0, + "SkillLists":{ + f"{skill.ElfSkillID}":{ + "SkillId":skill.ElfSkillID, + "Level":skill.MaxLv + } + for skill in elf.skill_lists + } + } + elfs_data.append(elf_data) + self.mongo.get_collection("elfs").insert_many(elfs_data) diff --git a/database/save_data.py b/database/save_data.py new file mode 100644 index 0000000..c8b359f --- /dev/null +++ b/database/save_data.py @@ -0,0 +1,130 @@ +from game_server.game.enum.data_type import DataType + +class SaveData: + def __init__(self, mongo, session, data_type:DataType, ids: list): + self.mongo = mongo + self.session = session + self.data_type = data_type + self.ids = ids + + def save(self): + data_type_handlers = { + DataType.MATERIAL: self._save_material, + DataType.WEAPON: self._save_weapon, + DataType.STIGMATA: self._save_stigmata, + DataType.AVATAR: self._save_avatar, + DataType.PLAYER: self._save_player + } + handler = data_type_handlers.get(self.data_type) + if handler: + handler() + else: + raise ValueError(f"Unsupported data type: {self.data_type}") + + def _save_material(self): + for id in self.ids: + get_item = self.session.player.inventory.material_items.get(id) + if get_item: + filter = {"ItemID": get_item.item_id} + update = {"$set": {"Num": get_item.num}} + self.mongo.update_document("items",filter,update) + + def _save_weapon(self): + for unique_id in self.ids: + if id == 0: + continue + get_item = self.session.player.inventory.weapon_items.get(unique_id) + if get_item: + filter = {"UniqueID": unique_id} + update = { + "$set": + { + "Level": get_item.level, + "Exp": get_item.exp, + "IsLocked" : get_item.is_locked, + "IsExtracted" : get_item.is_extracted, + "EquipAvatarID" : get_item.equip_avatar_id + } + } + self.mongo.update_document("items",filter,update) + def _save_stigmata(self): + for unique_id in self.ids: + if id == 0: + continue + get_item = self.session.player.inventory.stigmata_items.get(unique_id) + if get_item: + filter = {"UniqueID": unique_id} + update = { + "$set": + { + "Level": get_item.level, + "Exp": get_item.exp, + "SlotNum": get_item.slot_num, + "IsLocked" : get_item.is_locked, + "EquipAvatarID" : get_item.equip_avatar_id + } + } + self.mongo.update_document("items",filter,update) + + + def _save_avatar(self): + for id in self.ids: + avatar = self.session.player.avatars.get(id) + if avatar: + filter = {"AvatarID": id} + update = { + "$set": + { + "Star": avatar.star, + "Fragment": avatar.fragment, + "TouchGoodFeel" : avatar.touch_good_feel, + "TodayHasAddGoodFeel" : avatar.today_has_add_good_feel, + "DressID" : avatar.dress_id, + "SkillLists" : { + f"{skill_id}":{ + "SkillId":skill.skill_id, + "SubSkillLists":{ + f"{sub_skill.sub_skill_id}":{ + "subSkillId":sub_skill.sub_skill_id, + "level":sub_skill.level + } + for sub_id, sub_skill in skill.sub_skill_lists.items() + } + } + for skill_id,skill in avatar.skill_lists.items() + }, + } + } + self.mongo.update_document("avatars",filter,update) + + def _save_player(self): + filter = {"UID": self.session.player.uid} + update = { + "$set": + { + "Name": self.session.player.name, + "HCoin": self.session.player.hcoin, + "Sign": self.session.player.signature, + "HeadPhoto": self.session.player.head_photo, + "HeadFrame": self.session.player.head_frame, + "WarshipId": self.session.player.warship_id, + "AssistantAvatarId": self.session.player.assistant_avatar_id, + "WarshipAvatar":{ + "WarshipFirstAvatarId": self.session.player.warship_avatar.warship_first_avatar_id, + "WarshipSecondAvatarId": self.session.player.warship_avatar.warship_second_avatar_id + }, + "BirthDate":self.session.player.birth_date, + "CustomAvatarTeamList":{ + f"{team_id}":{ + "TeamId":team_id, + "Name": team.name, + "astraMateId":team.astral_mate_id, + "isUsingAstraMate":team.is_using_astra_mate, + "elfIdList":team.elf_id_list, + "AvatarIdLists":team.avatar_id_list + } + for team_id,team in self.session.player.custom_avatar_team_list.items() + } + } + } + self.mongo.update_document("players",filter,update) \ No newline at end of file diff --git a/game_server/__init__.py b/game_server/__init__.py new file mode 100644 index 0000000..7d99013 --- /dev/null +++ b/game_server/__init__.py @@ -0,0 +1,5 @@ +from game_server.net.gateway import Gateway + +class GameServer: + def main(self, ServerIp, GameServerPort): + Gateway(ServerIp, GameServerPort) diff --git a/game_server/config/__init__.py b/game_server/config/__init__.py new file mode 100644 index 0000000..9254121 --- /dev/null +++ b/game_server/config/__init__.py @@ -0,0 +1,57 @@ +# 头文件, 负责统一引用外部库 +# 本文件夹下的文件禁止引用此文件 +import os +import sys +import json +import time +import zlib +import base64 +import socket +import struct +import logging +import requests +import threading +from dynaconf import Dynaconf +from flask import Flask, request, jsonify, send_from_directory, Blueprint +from pathlib import Path +from enum import Enum +from .config import * +from .log import * # TODO: After config to tempfix config.json not found error +from lib import proto as protos +from pprint import pprint +import importlib +import re + + +__all__ = [ + "os", + "sys", + "json", + "time", + "zlib", + "base64", + "socket", + "struct", + "logging", + "threading", + "Dynaconf", + "Flask", + "request", + "requests", + "jsonify", + "send_from_directory", + "Blueprint", + "Path", + "Enum", + "Log", + "Error", + "Warn", + "Info", + "Debug", + "Config", + "Root", + "protos", + "pprint", + "importlib", + "re" +] diff --git a/game_server/config/config.py b/game_server/config/config.py new file mode 100644 index 0000000..c23022d --- /dev/null +++ b/game_server/config/config.py @@ -0,0 +1,42 @@ +import os +import json +from dynaconf import Dynaconf + +# 此处设置默认值 +Root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ConfigData = { + "LogLevel": "INFO", + "MaxSessions": 10, + "GameServer": { + "Ip": "127.0.0.1", + "Port": 16100 + }, + "SdkServer": { + "Ip": "127.0.0.1", + "Port": 80 + }, + "VerboseLevel":1, + "RegionName":"MikuBH3", + "UseLocalCache":False +} + +class ConfigInit: + def __init__(self): + self.ConfigPath = f"{Root}/../Config.json" + self.ConfigData = self.Load() + + if not os.path.exists(self.ConfigPath): + with open(self.ConfigPath, 'w') as f: + json.dump(ConfigData, f, indent=4) + + def Load(self): + Settings = Dynaconf( + settings_files = [self.ConfigPath], + default_settings = ConfigData + ) + return Settings + + def Get(self): + return self.ConfigData + +Config = ConfigInit().Load() \ No newline at end of file diff --git a/game_server/config/log.py b/game_server/config/log.py new file mode 100644 index 0000000..0a84b53 --- /dev/null +++ b/game_server/config/log.py @@ -0,0 +1,37 @@ +import json +import sys +from loguru import logger + +# Configuration for the logger +logger.remove() +with open("Config.json", "r", encoding="utf-8") as f: + LogLevel = json.load(f)["LogLevel"] +LevelList = ["ERROR", "WARNING", "INFO", "DEBUG"] +CodeColorDict = { + "ERROR": "red", + "WARNING": "yellow", + "INFO": "green", + "DEBUG": "blue" +} + +def custom_format(record): + color = CodeColorDict[record["level"].name] + return f"<{color}>{record['level'].name} : {record['message']}\n" + +logger.add(sys.stdout, format=custom_format, colorize=True, level=LogLevel) + +def Log(msg, types): + if types in CodeColorDict and LevelList.index(types) <= LevelList.index(LogLevel): + getattr(logger, types.lower())(msg) + +def Error(msg): + Log(msg, "ERROR") + +def Warn(msg): + Log(msg, "WARNING") + +def Info(msg): + Log(msg, "INFO") + +def Debug(msg): + Log(msg, "DEBUG") diff --git a/game_server/game/avatar/avatar_manager.py b/game_server/game/avatar/avatar_manager.py new file mode 100644 index 0000000..1e87104 --- /dev/null +++ b/game_server/game/avatar/avatar_manager.py @@ -0,0 +1,33 @@ +import dataclasses +from typing import List +from lib.proto import AvatarSubSkill + +@dataclasses.dataclass +class Skill: + skill_id : int + sub_skill_lists : dict[int, AvatarSubSkill] = dataclasses.field(default_factory=dict) + +@dataclasses.dataclass +class AvatarManager: + avatar_id: int + star: int + level: int + exp: int + fragment: List + touch_good_feel: List + today_has_add_good_feel: int + dress_id: int + dress_lists: List + sub_star: int + skill_lists: dict[int, Skill] + weapon_id: int = 0 + stigmata_ids: dict = dataclasses.field(default_factory=dict) + +@dataclasses.dataclass +class AvatarTeamManager: + team_id: int + name: str + astral_mate_id: int + is_using_astra_mate: bool + elf_id_list: List + avatar_id_list: List diff --git a/game_server/game/elf/elf_manager.py b/game_server/game/elf/elf_manager.py new file mode 100644 index 0000000..0386647 --- /dev/null +++ b/game_server/game/elf/elf_manager.py @@ -0,0 +1,16 @@ +import dataclasses +from typing import List + +@dataclasses.dataclass +class ElfSkill: + skill_id: int + level: int + +@dataclasses.dataclass +class ElfManager: + elf_id: int + level: int + star: int + exp: 0 + skill_list: dict[int,ElfSkill] = dataclasses.field(default_factory=dict) + diff --git a/game_server/game/enum/data_type.py b/game_server/game/enum/data_type.py new file mode 100644 index 0000000..fe532c2 --- /dev/null +++ b/game_server/game/enum/data_type.py @@ -0,0 +1,8 @@ +from enum import Enum + +class DataType(Enum): + MATERIAL = 1 + WEAPON = 2 + STIGMATA = 3 + AVATAR = 4 + PLAYER = 5 \ No newline at end of file diff --git a/game_server/game/enum/item_type.py b/game_server/game/enum/item_type.py new file mode 100644 index 0000000..74a72b2 --- /dev/null +++ b/game_server/game/enum/item_type.py @@ -0,0 +1,6 @@ +from enum import Enum + +class MainType(Enum): + MATERIAL = 1 + WEAPON = 2 + STIGMATA = 3 \ No newline at end of file diff --git a/game_server/game/inventory/inventory_manager.py b/game_server/game/inventory/inventory_manager.py new file mode 100644 index 0000000..4b943f6 --- /dev/null +++ b/game_server/game/inventory/inventory_manager.py @@ -0,0 +1,32 @@ +import dataclasses + +@dataclasses.dataclass +class Material: + item_id : int + num : int + +@dataclasses.dataclass +class Weapon: + item_id : int + level : int + exp : int + is_locked : bool + is_extracted : bool + equip_avatar_id: int + +@dataclasses.dataclass +class Stigmata: + item_id : int + level : int + exp : int + slot_num : int + refine_value : int + promote_times : int + is_locked : bool + equip_avatar_id : int + +@dataclasses.dataclass +class InventoryManager: + material_items : dict[int,Material] = dataclasses.field(default_factory=dict) + weapon_items : dict[int,Weapon] = dataclasses.field(default_factory=dict) + stigmata_items : dict[int,Stigmata] = dataclasses.field(default_factory=dict) \ No newline at end of file diff --git a/game_server/game/player/__init__.py b/game_server/game/player/__init__.py new file mode 100644 index 0000000..30e8268 --- /dev/null +++ b/game_server/game/player/__init__.py @@ -0,0 +1,131 @@ +import dataclasses +from database import mongo +from game_server.game.avatar.avatar_manager import AvatarManager,Skill,AvatarSubSkill,AvatarTeamManager +from game_server.game.inventory.inventory_manager import InventoryManager,Material,Weapon,Stigmata +from game_server.game.elf.elf_manager import ElfManager,ElfSkill +from game_server.game.enum.item_type import MainType + +@dataclasses.dataclass +class WarshipAvatar: + warship_first_avatar_id: int + warship_second_avatar_id: int + +@dataclasses.dataclass +class Player: + uid: int + name: str + level: int + exp: int + hcoin: int + stamina: int + signature: str + head_photo: int + head_frame: int + warship_id: int + assistant_avatar_id: int + birth_date: int + warship_avatar: WarshipAvatar + + # Player managers + avatars: dict[int, AvatarManager] = dataclasses.field(default_factory=dict) + inventory: InventoryManager = dataclasses.field(default_factory=InventoryManager) + elfs: dict[int,ElfManager] = dataclasses.field(default_factory=dict) + custom_avatar_team_list: dict[int,AvatarTeamManager] = dataclasses.field(default_factory=dict) + + + def init_default(self): + self.add_all_avatar() + self.add_all_items() + self.add_all_elfs() + + def add_all_avatar(self): + avatars = mongo.find_documents("avatars") + for avatar in avatars: + data = AvatarManager( + avatar_id=avatar['AvatarID'], + star=avatar['Star'], + level=avatar['Level'], + exp=avatar['Exp'], + fragment=avatar['Fragment'], + touch_good_feel=avatar['TouchGoodFeel'], + today_has_add_good_feel=avatar['TodayHasAddGoodFeel'], + dress_id=avatar['DressID'], + dress_lists=avatar['DressLists'], + sub_star=avatar['SubStar'], + skill_lists={ + skill['SkillId']: + Skill( + skill_id=skill['SkillId'], + sub_skill_lists={ + sub_skill['subSkillId']: + AvatarSubSkill( + sub_skill_id=sub_skill['subSkillId'], + level=sub_skill['level'] + ) + for sub_id,sub_skill in skill['SubSkillLists'].items() + } + ) + for id,skill in avatar['SkillLists'].items() + } + ) + weapon = list(mongo.find_documents_by_key_values("items", {"EquipAvatarID": avatar['AvatarID'], "MainType":MainType.WEAPON.value})) + stigmata = list(mongo.find_documents_by_key_values("items", {"EquipAvatarID": avatar['AvatarID'], "MainType":MainType.STIGMATA.value})) + if any(weapon): + data.weapon_id = weapon[0]['UniqueID'] + if any(stigmata): + for stigma in stigmata: + data.stigmata_ids[stigma['SlotNum']] = stigma['UniqueID'] + self.avatars[avatar['AvatarID']] = data + + def add_all_items(self): + get_items = mongo.find_documents("items") + for item in get_items: + if item['MainType'] == MainType.MATERIAL.value: + normal_item = Material( + item_id=item['ItemID'], + num=item['ItemNum'] + ) + self.inventory.material_items[item['ItemID']] = normal_item + + if item['MainType'] == MainType.WEAPON.value: + weapon = Weapon( + item_id=item['ItemID'], + level=item['Level'], + exp=item['Exp'], + is_locked=item['IsLocked'], + is_extracted=item['IsExtracted'], + equip_avatar_id=item['EquipAvatarID'] + ) + self.inventory.weapon_items[item['UniqueID']] = weapon + + if item['MainType'] == MainType.STIGMATA.value: + stigmata = Stigmata( + item_id=item['ItemID'], + level=item['Level'], + exp=item['Exp'], + slot_num=item['SlotNum'], + refine_value=item['RefineValue'], + promote_times=item['PromoteTimes'], + is_locked=item['IsLocked'], + equip_avatar_id=item['EquipAvatarID'] + ) + self.inventory.stigmata_items[item['UniqueID']] = stigmata + + def add_all_elfs(self): + get_elfs = mongo.find_documents("elfs") + for elf in get_elfs: + data = ElfManager( + elf_id=elf['ElfId'], + level=elf['Level'], + star=elf['Star'], + exp=elf['Exp'], + skill_list={ + skill['SkillId']: + ElfSkill( + skill_id=skill['SkillId'], + level=skill['Level'] + ) + for id,skill in elf['SkillLists'].items() + } + ) + self.elfs[elf['ElfId']] = data \ No newline at end of file diff --git a/game_server/net/gateway.py b/game_server/net/gateway.py new file mode 100644 index 0000000..1472cff --- /dev/null +++ b/game_server/net/gateway.py @@ -0,0 +1,25 @@ +from game_server.config.log import Info +from game_server.net.session import Session +import asyncio + +class Gateway: + def __init__(self, server_ip, game_server_port) -> None: + self.server_ip = server_ip + self.game_server_port = game_server_port + self.loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.loop) + try: + self.loop.run_until_complete(self.start_server()) + finally: + self.loop.run_until_complete(self.loop.shutdown_asyncgens()) + self.loop.close() + + async def start_server(self): + session = Session() + server = await asyncio.start_server(session.handle_connection, self.server_ip, self.game_server_port) + Info("Gateway listening...") + async with server: + await server.serve_forever() + + + diff --git a/game_server/net/packet.py b/game_server/net/packet.py new file mode 100644 index 0000000..d402b5c --- /dev/null +++ b/game_server/net/packet.py @@ -0,0 +1,41 @@ +import struct +from game_server.protocol.cmd_id import CmdID + +class Packet: + def __init__(self, buf: bytes): + self.raw = buf + self.head_magic = buf[:4] + self.user_id = struct.unpack('>I', buf[12:16])[0] + self.cmd_id = struct.unpack('>I', buf[24:28])[0] + + + self.header_len = struct.unpack('>H', buf[28:30])[0] + self.body_len = struct.unpack('>I', buf[30:34])[0] + self.body = buf[34 + self.header_len:34 + self.header_len + self.body_len] + self.tail_magic = buf[-4:] + + + @staticmethod + def send_packet(body): + cmdid = CmdID[body.__class__.__name__] + data = body.SerializeToString() + + buf = bytearray(38 + len(data)) + + struct.pack_into('>I', buf, 0, 0x01234567) + struct.pack_into('>H', buf, 4, 1) + struct.pack_into('>H', buf, 6, 0) + struct.pack_into('>I', buf, 8, 0) + struct.pack_into('>I', buf, 12, 0) + struct.pack_into('>I', buf, 16, 0) + struct.pack_into('>I', buf, 20, 0) + struct.pack_into('>I', buf, 24, cmdid) + struct.pack_into('>H', buf, 28, 0) + struct.pack_into('>I', buf, 30, len(data)) + + buf[34:34 + len(data)] = data + + struct.pack_into('>I', buf, 34 + len(data), 0x89ABCDEF) + + + return Packet(bytes(buf)) \ No newline at end of file diff --git a/game_server/net/session.py b/game_server/net/session.py new file mode 100644 index 0000000..82e1349 --- /dev/null +++ b/game_server/net/session.py @@ -0,0 +1,153 @@ +from game_server.config.log import Error, Info +from game_server.protocol.cmd_id import CmdID +from game_server.net.packet import Packet +from lib import proto as protos +import traceback +import betterproto +import importlib +import threading +import asyncio +from game_server.game.player import Player + + +class Session: + player : Player + def __init__(self) -> None: + self.writer = None + self.pending_notifies = [] + asyncio.create_task(self.keep_alive_loop()) + + async def keep_alive_loop(self): + while self.writer is None: + await asyncio.sleep(1) + while True: + if self.writer.is_closing(): + break + try: + await self.send(Packet.send_packet(protos.KeepAliveNotify())) + except Exception as ex: + Error(f"Error in KeepAliveLoop: {ex}") + break + + await asyncio.sleep(3) + + async def handle_connection(self, reader, writer): + self.writer = writer + addr = writer.get_extra_info('peername') + Info(f"Accepted connection from {addr}") + + prefix = bytes([0x01, 0x23, 0x45, 0x67]) + suffix = bytes([0x89, 0xAB, 0xCD, 0xEF]) + + try: + while True: + data = await reader.read(1 << 16) + if not data: + break + + packets = [] + message = memoryview(data) + + offset = 0 + while offset < len(message): + segment = message[offset:].tobytes() + start = segment.find(prefix) + + if start == -1: + break + + end = segment.find(suffix, start) + if end == -1: + break + + end += len(suffix) + packets.append(segment[start:end]) + offset += end + + for packet in packets: + if self.is_valid_packet(packet): + processed_packet = Packet(packet) + await self.process_packet(processed_packet) + else: + Error(f"Invalid packet received: {packet.hex().upper()}") + + except Exception as e: + Error(f"Exception in processing TCP: {e}") + + finally: + writer.close() + await writer.wait_closed() + Info("Disconnected from protocol") + + def create_packet(self, proto_message: betterproto.Message) -> Packet: + return Packet.send_packet(proto_message) + + def is_valid_packet(self,data: bytes) -> bool: + hex_string = data.hex().upper() + return hex_string.startswith("01234567") and hex_string.endswith("89ABCDEF") + + def pending_notify(self, proto_message: betterproto.Message): + packet = Packet.send_packet(proto_message) + self.pending_notifies.append(packet) + + def send_pending_notifies_in_thread(self): + thread = threading.Thread(target=self._run_send_pending_notifies) + thread.start() + + def _run_send_pending_notifies(self): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(self._send_pending_notifies()) + loop.close() + + async def _send_pending_notifies(self): + for packet in self.pending_notifies: + await self.send(packet) + self.pending_notifies.clear() + + async def process_packet(self, packet : Packet): + if packet.cmd_id not in CmdID._value2member_map_: + Error(f"CmdId {packet.cmd_id} not recognized!") + return + request_name = CmdID(packet.cmd_id).name + if request_name == "KeepAliveNotify": return #await self.send(packet.send_packet(protos.KeepAliveNotify())) + try: + try: + req: betterproto.Message = getattr(protos, request_name)() + req.parse(packet.body) + except Exception: + req = betterproto.Message() + + try: + Info(f"RECV packet: {request_name} ({packet.cmd_id})") + handle_module = importlib.import_module(f"game_server.packet.handlers.{request_name}") + handle_function = handle_module.handle + handle_result = await handle_function(self, req) + if not handle_result: + return + await self.send(packet.send_packet(handle_result)) + self.send_pending_notifies_in_thread() + except ModuleNotFoundError: + Error(f"Unhandled request {request_name}") + return + except Exception as e: + Error(f"Handler {request_name} returned error: {e}") + traceback.print_exc() + return + except Exception: + Error("Packet processing failed. Traceback: ") + traceback.print_exc() + return + + async def send(self, packet: Packet): + if packet.cmd_id not in CmdID._value2member_map_: + Error(f"CmdId {packet.cmd_id} not recognized!") + return + packet_name = CmdID(packet.cmd_id).name + try: + self.writer.write(packet.raw) + await self.writer.drain() + Info(f"Sent packet: {packet_name} ({packet.cmd_id})") + except Exception as ex: + Error(f"Failed to send {packet_name}: {ex}") + traceback.print_exc() \ No newline at end of file diff --git a/game_server/packet/handlers/AddCustomAvatarTeamReq.py b/game_server/packet/handlers/AddCustomAvatarTeamReq.py new file mode 100644 index 0000000..d8d5251 --- /dev/null +++ b/game_server/packet/handlers/AddCustomAvatarTeamReq.py @@ -0,0 +1,10 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import ( + AddCustomAvatarTeamReq, + AddCustomAvatarTeamRsp +) + +async def handle(session: Session, msg: AddCustomAvatarTeamReq) -> betterproto.Message: + return AddCustomAvatarTeamRsp(retcode=0) diff --git a/game_server/packet/handlers/AddGoodfeelReq.py b/game_server/packet/handlers/AddGoodfeelReq.py new file mode 100644 index 0000000..39f6374 --- /dev/null +++ b/game_server/packet/handlers/AddGoodfeelReq.py @@ -0,0 +1,7 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import AddGoodfeelReq,AddGoodfeelRsp + +async def handle(session: Session, msg: AddGoodfeelReq) -> betterproto.Message: + return AddGoodfeelRsp(retcode=0) diff --git a/game_server/packet/handlers/ArkPlusActivityGetDataReq.py b/game_server/packet/handlers/ArkPlusActivityGetDataReq.py new file mode 100644 index 0000000..4dd9831 --- /dev/null +++ b/game_server/packet/handlers/ArkPlusActivityGetDataReq.py @@ -0,0 +1,7 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import ArkPlusActivityGetDataReq,ArkPlusActivityGetDataRsp + +async def handle(session: Session, msg: ArkPlusActivityGetDataReq) -> betterproto.Message: + return ArkPlusActivityGetDataRsp(retcode=0) diff --git a/game_server/packet/handlers/AvatarSubSkillLevelUpReq.py b/game_server/packet/handlers/AvatarSubSkillLevelUpReq.py new file mode 100644 index 0000000..df190b9 --- /dev/null +++ b/game_server/packet/handlers/AvatarSubSkillLevelUpReq.py @@ -0,0 +1,60 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.enum.data_type import DataType +from game_server.resource import ResourceManager +from game_server.resource.configdb.avatar_sub_skill_data import AvatarSubSkillData +from database import mongo +from lib.proto import ( + AvatarSubSkillLevelUpReq, + AvatarSubSkillLevelUpRsp, + AvatarSubSkill, + GetAvatarDataReq, + GetEquipmentDataRsp, + Material +) + +async def handle(session: Session, msg: AvatarSubSkillLevelUpReq) -> betterproto.Message: + avatar_data = session.player.avatars.get(msg.avatar_id) + if not avatar_data: + return AvatarSubSkillLevelUpRsp(retcode=2) + + skill_data = avatar_data.skill_lists.get(msg.skill_id) + if not skill_data: + return AvatarSubSkillLevelUpRsp(retcode=3) + + sub_skill_data = ResourceManager.instance().find_by_index(AvatarSubSkillData, msg.sub_skill_id) + if not sub_skill_data: + return AvatarSubSkillLevelUpRsp(retcode=4) + + sub_skill = skill_data.sub_skill_lists.get(msg.sub_skill_id) + if not sub_skill: + skill_data.sub_skill_lists[msg.sub_skill_id] = AvatarSubSkill( + sub_skill_id=msg.sub_skill_id, + level=0 + ) + + current_level = skill_data.sub_skill_lists[msg.sub_skill_id].level + new_level = sub_skill_data.maxLv if msg.is_level_up_all else current_level + 1 + + if new_level > sub_skill_data.maxLv: + return AvatarSubSkillLevelUpRsp(retcode=10) + + skill_data.sub_skill_lists[msg.sub_skill_id] = AvatarSubSkill( + sub_skill_id=msg.sub_skill_id, + level=new_level + ) + avatar_data.skill_lists[msg.skill_id] = skill_data + + await session.process_packet(session.create_packet(GetAvatarDataReq(avatar_id_list=[msg.avatar_id]))) + + coin = session.player.inventory.material_items.get(100) + if coin: + session.pending_notify( + GetEquipmentDataRsp( + material_list=[Material(id=coin.item_id, num=coin.num)] + ) + ) + + mongo.save(session, DataType.AVATAR, [msg.avatar_id]) + + return AvatarSubSkillLevelUpRsp(retcode=0) diff --git a/game_server/packet/handlers/BuffAssistGetActivityReq.py b/game_server/packet/handlers/BuffAssistGetActivityReq.py new file mode 100644 index 0000000..a5a1e34 --- /dev/null +++ b/game_server/packet/handlers/BuffAssistGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import BuffAssistGetActivityReq,BuffAssistGetActivityRsp + +async def handle(session: Session, msg: BuffAssistGetActivityReq) -> betterproto.Message: + return BuffAssistGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/BwWorldCampActivityGetDataReq.py b/game_server/packet/handlers/BwWorldCampActivityGetDataReq.py new file mode 100644 index 0000000..804b7ec --- /dev/null +++ b/game_server/packet/handlers/BwWorldCampActivityGetDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import BwWorldCampActivityGetDataReq, BwWorldCampActivityGetDataRsp + +async def handle(session: Session, msg: BwWorldCampActivityGetDataReq) -> betterproto.Message: + return BwWorldCampActivityGetDataRsp(retcode=0) diff --git a/game_server/packet/handlers/ChapterArkGetDataReq.py b/game_server/packet/handlers/ChapterArkGetDataReq.py new file mode 100644 index 0000000..e555a7c --- /dev/null +++ b/game_server/packet/handlers/ChapterArkGetDataReq.py @@ -0,0 +1,37 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + ChapterArkGetDataReq, + ChapterArkGetDataRsp, + ChapterArk, + ChapterArkRoleInfo, + ChapterArkSkillInfo, + ChapterArkSupSkillInfo + +) + +async def handle(session: Session, msg: ChapterArkGetDataReq) -> betterproto.Message: + avatar_lists = [1,2,3,4,5] + return ChapterArkGetDataRsp( + retcode=0, + chapter_ark=ChapterArk( + chapter_id=msg.chapter_id, + avatar_list=avatar_lists, + is_finish_opening=True, + role_list=[ + ChapterArkRoleInfo( + id=id, + level=30 + ) + for id in avatar_lists + ], + skill_list=[ + ChapterArkSkillInfo( + id=i * 100 + j, + level=3 if j > 3 else 1 + ) + for i in range(1, 6) + for j in range(1, 13) + ] + ) + ) diff --git a/game_server/packet/handlers/ChapterBwWorldGetDataReq.py b/game_server/packet/handlers/ChapterBwWorldGetDataReq.py new file mode 100644 index 0000000..30dab58 --- /dev/null +++ b/game_server/packet/handlers/ChapterBwWorldGetDataReq.py @@ -0,0 +1,17 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + ChapterBwWorldGetDataReq, + ChapterBwWorldGetDataRsp, + ChapterBwWorld, + ChapterBwWorldRune, + ChapterBwWorldTowerStage +) + +async def handle(session: Session, msg: ChapterBwWorldGetDataReq) -> betterproto.Message: + return ChapterBwWorldGetDataRsp( + retcode=0, + chapter_bw_world=ChapterBwWorld( + chapter_id=msg.chapter_id + ) + ) diff --git a/game_server/packet/handlers/ChapterGroupGetDataReq.py b/game_server/packet/handlers/ChapterGroupGetDataReq.py new file mode 100644 index 0000000..944d044 --- /dev/null +++ b/game_server/packet/handlers/ChapterGroupGetDataReq.py @@ -0,0 +1,314 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + ChapterGroupGetDataReq, + ChapterGroupGetDataRsp, + ChapterGroup, + ChapterGroupSite, + ChapterGroupSiteStatus +) + +async def handle(session: Session, msg: ChapterGroupGetDataReq) -> betterproto.Message: + rsp = ChapterGroupGetDataRsp( + retcode=0, + is_all=True, + chapter_group_list=[ + ChapterGroup( + id=1, + site_list=[ + ChapterGroupSite( + chapter_id=1, + site_id=1, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=2, + site_id=2, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=2, + site_list=[ + ChapterGroupSite( + chapter_id=3, + site_id=3, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=4, + site_id=4, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=5, + site_id=5, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=6, + site_id=6, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=3, + site_list=[ + ChapterGroupSite( + chapter_id=7, + site_id=7, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=8, + site_id=8, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=9, + site_id=9, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=10, + site_id=10, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=11, + site_id=11, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=4, + site_list=[ + ChapterGroupSite( + chapter_id=12, + site_id=12, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=13, + site_id=13, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=14, + site_id=14, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=15, + site_id=15, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=5, + site_list=[ + ChapterGroupSite( + chapter_id=16, + site_id=16, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=17, + site_id=17, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=6, + site_list=[ + ChapterGroupSite( + chapter_id=18, + site_id=18, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=19, + site_id=19, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=20, + site_id=20, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=7, + site_list=[ + ChapterGroupSite( + chapter_id=21, + site_id=21, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=22, + site_id=22, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=8, + site_list=[ + ChapterGroupSite( + chapter_id=23, + site_id=23, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=24, + site_id=24, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=25, + site_id=25, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=9, + site_list=[ + ChapterGroupSite( + chapter_id=26, + site_id=26, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=27, + site_id=27, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=28, + site_id=28, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=10, + site_list=[ + ChapterGroupSite( + chapter_id=29, + site_id=29, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=30, + site_id=30, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=11, + site_list=[ + ChapterGroupSite( + chapter_id=31, + site_id=31, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=12, + site_list=[ + ChapterGroupSite( + chapter_id=32, + site_id=32, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=33, + site_id=33, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=34, + site_id=34, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_LOCKED.value + ) + ] + ), + ChapterGroup( + id=13, + site_list=[ + ChapterGroupSite( + chapter_id=36, + site_id=36, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ), + ChapterGroupSite( + chapter_id=37, + site_id=37, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=14, + site_list=[ + ChapterGroupSite( + chapter_id=40, + site_id=40, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=15, + site_list=[ + ChapterGroupSite( + chapter_id=43, + site_id=43, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=16, + site_list=[ + ChapterGroupSite( + chapter_id=100, + site_id=100, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=17, + site_list=[ + ChapterGroupSite( + chapter_id=150, + site_id=150, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ), + ChapterGroup( + id=18, + site_list=[ + ChapterGroupSite( + chapter_id=200, + site_id=200, + status=ChapterGroupSiteStatus.CHAPTER_GROUP_SITE_STATUS_FINISHED.value + ) + ] + ) + ] + ) + + return rsp diff --git a/game_server/packet/handlers/ChapterKnightRichManGetDataReq.py b/game_server/packet/handlers/ChapterKnightRichManGetDataReq.py new file mode 100644 index 0000000..8d98e38 --- /dev/null +++ b/game_server/packet/handlers/ChapterKnightRichManGetDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ChapterKnightRichManGetDataReq, ChapterKnightRichManGetDataRsp + +async def handle(session: Session, msg: ChapterKnightRichManGetDataReq) -> betterproto.Message: + return ChapterKnightRichManGetDataRsp(retcode=0,rich_man_id=101) diff --git a/game_server/packet/handlers/ChatworldBeastGetActivityReq.py b/game_server/packet/handlers/ChatworldBeastGetActivityReq.py new file mode 100644 index 0000000..ea56a8d --- /dev/null +++ b/game_server/packet/handlers/ChatworldBeastGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ChatworldBeastGetActivityReq, ChatworldBeastGetActivityRsp + +async def handle(session: Session, msg: ChatworldBeastGetActivityReq) -> betterproto.Message: + return ChatworldBeastGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/ChatworldGetActivityScheduleReq.py b/game_server/packet/handlers/ChatworldGetActivityScheduleReq.py new file mode 100644 index 0000000..1dca265 --- /dev/null +++ b/game_server/packet/handlers/ChatworldGetActivityScheduleReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ChatworldGetActivityScheduleReq, ChatworldGetActivityScheduleRsp + +async def handle(session: Session, msg: ChatworldGetActivityScheduleReq) -> betterproto.Message: + return ChatworldGetActivityScheduleRsp( + retcode=0, + scene_id=111 + ) diff --git a/game_server/packet/handlers/ChatworldGetPrayInfoReq.py b/game_server/packet/handlers/ChatworldGetPrayInfoReq.py new file mode 100644 index 0000000..7ca4bcc --- /dev/null +++ b/game_server/packet/handlers/ChatworldGetPrayInfoReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ChatworldGetPrayInfoReq, ChatworldGetPrayInfoRsp + +async def handle(session: Session, msg: ChatworldGetPrayInfoReq) -> betterproto.Message: + return ChatworldGetPrayInfoRsp(retcode=0) diff --git a/game_server/packet/handlers/ClientReportReq.py b/game_server/packet/handlers/ClientReportReq.py new file mode 100644 index 0000000..36af6bb --- /dev/null +++ b/game_server/packet/handlers/ClientReportReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ClientReportReq,ClientReportRsp + +async def handle(session: Session, msg: ClientReportReq) -> betterproto.Message: + return ClientReportRsp(retcode=0) diff --git a/game_server/packet/handlers/DelCustomAvatarTeamReq.py b/game_server/packet/handlers/DelCustomAvatarTeamReq.py new file mode 100644 index 0000000..b6ea1d1 --- /dev/null +++ b/game_server/packet/handlers/DelCustomAvatarTeamReq.py @@ -0,0 +1,42 @@ + +import betterproto +from game_server.net.session import Session +from game_server.game.avatar.avatar_manager import AvatarTeamManager +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import ( + DelCustomAvatarTeamReq, + DelCustomAvatarTeamRsp, + GetAvatarTeamDataRsp, + CustomAvatarTeam +) + +async def handle(session: Session, msg: DelCustomAvatarTeamReq) -> betterproto.Message: + + session.player.custom_avatar_team_list[msg.team_id] = AvatarTeamManager( + team_id=msg.team_id, + name=f"Team {msg.team_id}", + avatar_id_list=[], + elf_id_list=[], + astral_mate_id=0, + is_using_astra_mate=False + ) + + await session.send(session.create_packet(GetAvatarTeamDataRsp( + retcode=0, + custom_avatar_team_list=[ + CustomAvatarTeam( + team_id=team.team_id, + name=team.name, + avatar_id_list=team.avatar_id_list, + elf_id_list=team.elf_id_list, + astra_mate_id=team.astral_mate_id, + is_using_astra_mate=team.is_using_astra_mate + ) + for team_id,team in session.player.custom_avatar_team_list.items() + ] + ))) + + mongo.save(session,DataType.PLAYER) + + return DelCustomAvatarTeamRsp(retcode=0) diff --git a/game_server/packet/handlers/DressEquipmentReq.py b/game_server/packet/handlers/DressEquipmentReq.py new file mode 100644 index 0000000..2f02af0 --- /dev/null +++ b/game_server/packet/handlers/DressEquipmentReq.py @@ -0,0 +1,52 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import ( + DressEquipmentReq, + DressEquipmentRsp, + EquipmentSlot, + GetAvatarDataReq +) + +async def handle(session: Session, msg: DressEquipmentReq) -> betterproto.Message: + avatar_data = session.player.avatars.get(msg.avatar_id) + if avatar_data: + replace_id = 0 + match msg.slot: + case EquipmentSlot.EQUIPMENT_SLOT_WEAPON_1.value: + if avatar_data.weapon_id > 0: + replace_id = avatar_data.weapon_id + replace_weapon = session.player.inventory.weapon_items.get(avatar_data.weapon_id) + replace_weapon.equip_avatar_id = 0 + + avatar_data.weapon_id = msg.unique_id + + weapon = session.player.inventory.weapon_items.get(msg.unique_id) + weapon.equip_avatar_id = msg.avatar_id + + mongo.save(session,DataType.WEAPON,[msg.unique_id,replace_id]) + case EquipmentSlot.EQUIPMENT_SLOT_STIGMATA_1.value | \ + EquipmentSlot.EQUIPMENT_SLOT_STIGMATA_2.value | \ + EquipmentSlot.EQUIPMENT_SLOT_STIGMATA_3.value: + slot_num = msg.slot-1 + replace_id = avatar_data.stigmata_ids.get(slot_num,0) + if replace_id > 0: + replace_stigmata = session.player.inventory.stigmata_items.get(replace_id) + replace_stigmata.equip_avatar_id = 0 + + + avatar_data.stigmata_ids[slot_num] = msg.unique_id + + stigmata = session.player.inventory.stigmata_items.get(msg.unique_id) + stigmata.equip_avatar_id = msg.avatar_id + stigmata.slot_num = slot_num + + mongo.save(session,DataType.STIGMATA,[msg.unique_id,replace_id]) + + await session.process_packet(session.create_packet(GetAvatarDataReq(avatar_id_list=[msg.avatar_id]))) + return DressEquipmentRsp( + retcode=0, + unique_id=msg.unique_id, + slot=msg.slot + ) diff --git a/game_server/packet/handlers/EnterWorldChatroomReq.py b/game_server/packet/handlers/EnterWorldChatroomReq.py new file mode 100644 index 0000000..594cb94 --- /dev/null +++ b/game_server/packet/handlers/EnterWorldChatroomReq.py @@ -0,0 +1,10 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import EnterWorldChatroomReq, EnterWorldChatroomRsp + +async def handle(session: Session, msg: EnterWorldChatroomReq) -> betterproto.Message: + return EnterWorldChatroomRsp( + retcode=0, + chatroom_id=1, + player_num=69 + ) diff --git a/game_server/packet/handlers/FinishGuideReportReq.py b/game_server/packet/handlers/FinishGuideReportReq.py new file mode 100644 index 0000000..aaecefd --- /dev/null +++ b/game_server/packet/handlers/FinishGuideReportReq.py @@ -0,0 +1,13 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import FinishGuideReportReq,FinishGuideReportRsp + +async def handle(session: Session, msg: FinishGuideReportReq) -> betterproto.Message: + print(msg.guide_id_list) + return FinishGuideReportRsp( + retcode=0, + guide_id_list=msg.guide_id_list, + is_finish=True + ) + + diff --git a/game_server/packet/handlers/GeneralActivityGetMainInfoReq.py b/game_server/packet/handlers/GeneralActivityGetMainInfoReq.py new file mode 100644 index 0000000..c840246 --- /dev/null +++ b/game_server/packet/handlers/GeneralActivityGetMainInfoReq.py @@ -0,0 +1,22 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GeneralActivityGetMainInfoReq, + GeneralActivityGetMainInfoRsp, + GeneralActivity, + GeneralActivityBasicInfo +) + +async def handle(session: Session, msg: GeneralActivityGetMainInfoReq) -> betterproto.Message: + return GeneralActivityGetMainInfoRsp( + retcode=0, + activity_list=[ + GeneralActivity( + general_basic_info=GeneralActivityBasicInfo( + activity_id=50000001, + schedule_id=412, + series_activity_id=[50000001] + ) + ) + ] + ) diff --git a/game_server/packet/handlers/GeneralActivityGetScheduleReq.py b/game_server/packet/handlers/GeneralActivityGetScheduleReq.py new file mode 100644 index 0000000..3775895 --- /dev/null +++ b/game_server/packet/handlers/GeneralActivityGetScheduleReq.py @@ -0,0 +1,40 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.avatar_tutorial import AvatarTutorialData +from game_server.resource.configdb.activity_tower import ActivityTowerData +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GeneralActivityGetScheduleReq, + GeneralActivityGetScheduleRsp, + GeneralActivityScheduleInfo +) + +async def handle(session: Session, msg: GeneralActivityGetScheduleReq) -> betterproto.Message: + + schedule_list = [] + + for tutorial in ResourceManager.instance().values(AvatarTutorialData): + schedule_list.append( + GeneralActivityScheduleInfo( + activity_id=tutorial.ActivityID, + settle_time=int(get_unix_in_seconds()+3600*24*7), + end_time=int(get_unix_in_seconds()+3600*24*7), + end_day_time=int(get_unix_in_seconds()+3600*24*7) + ) + ) + + for tower in ResourceManager.instance().values(ActivityTowerData): + schedule_list.append( + GeneralActivityScheduleInfo( + activity_id=tower.ActivityID, + settle_time=int(get_unix_in_seconds()+3600*24*7), + end_time=int(get_unix_in_seconds()+3600*24*7), + end_day_time=int(get_unix_in_seconds()+3600*24*7) + ) + ) + + return GeneralActivityGetScheduleRsp( + retcode=0, + schedule_list=schedule_list + ) diff --git a/game_server/packet/handlers/GetActivityMainDataReq.py b/game_server/packet/handlers/GetActivityMainDataReq.py new file mode 100644 index 0000000..6781cef --- /dev/null +++ b/game_server/packet/handlers/GetActivityMainDataReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetActivityMainDataReq,GetActivityMainDataRsp + +async def handle(session: Session, msg: GetActivityMainDataReq) -> betterproto.Message: + return GetActivityMainDataRsp( + retcode=0, + activity_module_type_list=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 72] + ) diff --git a/game_server/packet/handlers/GetActivityRewardStatisticDataReq.py b/game_server/packet/handlers/GetActivityRewardStatisticDataReq.py new file mode 100644 index 0000000..07ba653 --- /dev/null +++ b/game_server/packet/handlers/GetActivityRewardStatisticDataReq.py @@ -0,0 +1,23 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetActivityRewardStatisticDataReq, + GetActivityRewardStatisticDataRsp, + ActivityRewardStatisticData, + ActivityRewardStatisticItemData +) + +async def handle(session: Session, msg: GetActivityRewardStatisticDataReq) -> betterproto.Message: + return GetActivityRewardStatisticDataRsp( + retcode=0, + activity_reward_data=ActivityRewardStatisticData( + id=117, + item_data_list=[ + ActivityRewardStatisticItemData( + show_id=i + ) + for i in range (506,509) + ] + ), + id=117 + ) diff --git a/game_server/packet/handlers/GetAdventureGroupReq.py b/game_server/packet/handlers/GetAdventureGroupReq.py new file mode 100644 index 0000000..da9eb58 --- /dev/null +++ b/game_server/packet/handlers/GetAdventureGroupReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetAdventureGroupReq, GetAdventureGroupRsp + +async def handle(session: Session, msg: GetAdventureGroupReq) -> betterproto.Message: + return GetAdventureGroupRsp(retcode=0) diff --git a/game_server/packet/handlers/GetAdventureStorySweepInfoReq.py b/game_server/packet/handlers/GetAdventureStorySweepInfoReq.py new file mode 100644 index 0000000..2cd0dcc --- /dev/null +++ b/game_server/packet/handlers/GetAdventureStorySweepInfoReq.py @@ -0,0 +1,44 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetAdventureStorySweepInfoReq, + GetAdventureStorySweepInfoRsp, + IslandStorySweepData +) + +async def handle(session: Session, msg: GetAdventureStorySweepInfoReq) -> betterproto.Message: + return GetAdventureStorySweepInfoRsp( + retcode=0, + story_sweep_list=[ + IslandStorySweepData( + avatar_id_list=[ + 20401, + 20301, + 20201 + ], + is_finished=True, + over_time=1719938652, + sweep_id=282 + ), + IslandStorySweepData( + avatar_id_list=[ + 3701, + 3601, + 3501 + ], + is_finished=True, + over_time=1719938654, + sweep_id=282 + ), + IslandStorySweepData( + avatar_id_list=[ + 3301, + 3201, + 3101 + ], + is_finished=True, + over_time=1719938655, + sweep_id=282 + ), + ] + ) diff --git a/game_server/packet/handlers/GetArmadaActivityListReq.py b/game_server/packet/handlers/GetArmadaActivityListReq.py new file mode 100644 index 0000000..41e45b9 --- /dev/null +++ b/game_server/packet/handlers/GetArmadaActivityListReq.py @@ -0,0 +1,20 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetArmadaActivityListReq, + GetArmadaActivityListRsp, + ArmadaActivity, + ArmadaActivityType +) + +async def handle(session: Session, msg: GetArmadaActivityListReq) -> betterproto.Message: + return GetArmadaActivityListRsp( + retcode=0, + activity_list=[ + ArmadaActivity( + begin_time=0, + end_time=1880308800, + type=ArmadaActivityType.ARMADA_ACTIVITY_ARMADA_STAGE_SCORE_ACTIVITY.value + ) + ] + ) diff --git a/game_server/packet/handlers/GetArmadaDataReq.py b/game_server/packet/handlers/GetArmadaDataReq.py new file mode 100644 index 0000000..503b51f --- /dev/null +++ b/game_server/packet/handlers/GetArmadaDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetArmadaDataReq, GetArmadaDataRsp + +async def handle(session: Session, msg: GetArmadaDataReq) -> betterproto.Message: + return GetArmadaDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetArmadaStageScoreActivityReq.py b/game_server/packet/handlers/GetArmadaStageScoreActivityReq.py new file mode 100644 index 0000000..b265aec --- /dev/null +++ b/game_server/packet/handlers/GetArmadaStageScoreActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetArmadaStageScoreActivityReq, GetArmadaStageScoreActivityRsp + +async def handle(session: Session, msg: GetArmadaStageScoreActivityReq) -> betterproto.Message: + return GetArmadaStageScoreActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetAskAddFriendListReq.py b/game_server/packet/handlers/GetAskAddFriendListReq.py new file mode 100644 index 0000000..7abd2c2 --- /dev/null +++ b/game_server/packet/handlers/GetAskAddFriendListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetAskAddFriendListReq, GetAskAddFriendListRsp + +async def handle(session: Session, msg: GetAskAddFriendListReq) -> betterproto.Message: + return GetAskAddFriendListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetAssistantFrozenListReq.py b/game_server/packet/handlers/GetAssistantFrozenListReq.py new file mode 100644 index 0000000..7dfac74 --- /dev/null +++ b/game_server/packet/handlers/GetAssistantFrozenListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetAssistantFrozenListReq, GetAssistantFrozenListRsp + +async def handle(session: Session, msg: GetAssistantFrozenListReq) -> betterproto.Message: + return GetAssistantFrozenListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetAuthkeyReq.py b/game_server/packet/handlers/GetAuthkeyReq.py new file mode 100644 index 0000000..6bd4210 --- /dev/null +++ b/game_server/packet/handlers/GetAuthkeyReq.py @@ -0,0 +1,12 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetAuthkeyReq,GetAuthkeyRsp + +async def handle(session: Session, msg: GetAuthkeyReq) -> betterproto.Message: + return GetAuthkeyRsp( + retcode=0, + auth_appid=msg.auth_appid, + authkey="0", + sign_type=2, + authkey_ver=1 + ) diff --git a/game_server/packet/handlers/GetAvatarDataReq.py b/game_server/packet/handlers/GetAvatarDataReq.py new file mode 100644 index 0000000..525e356 --- /dev/null +++ b/game_server/packet/handlers/GetAvatarDataReq.py @@ -0,0 +1,84 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetAvatarDataReq, + GetAvatarDataRsp, + Avatar, + AvatarSkill, + AvatarSubSkill +) + +async def handle(session: Session, msg: GetAvatarDataReq) -> betterproto.Message: + rsp = GetAvatarDataRsp(retcode=0) + if len(msg.avatar_id_list) == 1 and int(msg.avatar_id_list[0]) == 0 : + rsp.is_all = True + rsp.avatar_list=[ + Avatar( + avatar_id=avatar.avatar_id, + star=avatar.star, + level=avatar.level, + exp=avatar.exp, + fragment=avatar.fragment, + weapon_unique_id=avatar.weapon_id, + stigmata_unique_id_1=avatar.stigmata_ids.get(1,0), + stigmata_unique_id_2=avatar.stigmata_ids.get(2,0), + stigmata_unique_id_3=avatar.stigmata_ids.get(3,0), + skill_list=[ + AvatarSkill( + skill_id=skill_id, + sub_skill_list=[ + AvatarSubSkill( + sub_skill_id=sub_skill.sub_skill_id, + level=sub_skill.level + ) + for sub_id, sub_skill in skill.sub_skill_lists.items() + ] + ) + for skill_id,skill in avatar.skill_lists.items() + ], + touch_goodfeel=avatar.touch_good_feel, + today_has_add_goodfeel=avatar.today_has_add_good_feel, + dress_list=avatar.dress_lists, + dress_id=avatar.dress_id, + sub_star=avatar.sub_star + ) + for id, avatar in session.player.avatars.items() + ] + else: + avatar_list = [] + for id in msg.avatar_id_list: + avatar = session.player.avatars.get(id) + avatar_list.append( + Avatar( + avatar_id=avatar.avatar_id, + star=avatar.star, + level=avatar.level, + exp=avatar.exp, + fragment=avatar.fragment, + weapon_unique_id=avatar.weapon_id, + stigmata_unique_id_1=avatar.stigmata_ids.get(1,0), + stigmata_unique_id_2=avatar.stigmata_ids.get(2,0), + stigmata_unique_id_3=avatar.stigmata_ids.get(3,0), + skill_list=[ + AvatarSkill( + skill_id=skill_id, + sub_skill_list=[ + AvatarSubSkill( + sub_skill_id=sub_skill.sub_skill_id, + level=sub_skill.level + ) + for sub_id, sub_skill in skill.sub_skill_lists.items() + ] + ) + for skill_id,skill in avatar.skill_lists.items() + ], + touch_goodfeel=avatar.touch_good_feel, + today_has_add_goodfeel=avatar.today_has_add_good_feel, + dress_list=avatar.dress_lists, + dress_id=avatar.dress_id, + sub_star=avatar.sub_star + ) + ) + rsp.is_all = False + rsp.avatar_list=avatar_list + return rsp \ No newline at end of file diff --git a/game_server/packet/handlers/GetAvatarMissionActivityReq.py b/game_server/packet/handlers/GetAvatarMissionActivityReq.py new file mode 100644 index 0000000..92363bf --- /dev/null +++ b/game_server/packet/handlers/GetAvatarMissionActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetAvatarMissionActivityReq,GetAvatarMissionActivityRsp + +async def handle(session: Session, msg: GetAvatarMissionActivityReq) -> betterproto.Message: + return GetAvatarMissionActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetAvatarRollDataReq.py b/game_server/packet/handlers/GetAvatarRollDataReq.py new file mode 100644 index 0000000..ddf6d34 --- /dev/null +++ b/game_server/packet/handlers/GetAvatarRollDataReq.py @@ -0,0 +1,399 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetAvatarRollDataReq, + GetAvatarRollDataRsp, + AvatarRoll +) + +async def handle(session: Session, msg: GetAvatarRollDataReq) -> betterproto.Message: + return GetAvatarRollDataRsp( + retcode=0, + is_all=True, + roll_list=[ + AvatarRoll( + avatar_id=101, + is_unlock=True + ), + AvatarRoll( + avatar_id=102, + is_unlock=True + ), + AvatarRoll( + avatar_id=103, + is_unlock=True + ), + AvatarRoll( + avatar_id=104, + is_unlock=True + ), + AvatarRoll( + avatar_id=105, + is_unlock=True + ), + AvatarRoll( + avatar_id=106, + is_unlock=True + ), + AvatarRoll( + avatar_id=111, + is_unlock=True + ), + AvatarRoll( + avatar_id=112, + is_unlock=True + ), + AvatarRoll( + avatar_id=113, + is_unlock=True + ), + AvatarRoll( + avatar_id=114, + is_unlock=True + ), + AvatarRoll( + avatar_id=201, + is_unlock=True + ), + AvatarRoll( + avatar_id=202, + is_unlock=True + ), + AvatarRoll( + avatar_id=203, + is_unlock=True + ), + AvatarRoll( + avatar_id=204, + is_unlock=True + ), + AvatarRoll( + avatar_id=205, + is_unlock=True + ), + AvatarRoll( + avatar_id=206, + is_unlock=True + ), + AvatarRoll( + avatar_id=211, + is_unlock=True + ), + AvatarRoll( + avatar_id=212, + is_unlock=True + ), + AvatarRoll( + avatar_id=213, + is_unlock=True + ), + AvatarRoll( + avatar_id=214, + is_unlock=True + ), + AvatarRoll( + avatar_id=301, + is_unlock=True + ), + AvatarRoll( + avatar_id=302, + is_unlock=True + ), + AvatarRoll( + avatar_id=303, + is_unlock=True + ), + AvatarRoll( + avatar_id=311, + is_unlock=True + ), + AvatarRoll( + avatar_id=312, + is_unlock=True + ), + AvatarRoll( + avatar_id=313, + is_unlock=True + ), + AvatarRoll( + avatar_id=314, + is_unlock=True + ), + AvatarRoll( + avatar_id=317, + is_unlock=True + ), + AvatarRoll( + avatar_id=401, + is_unlock=True + ), + AvatarRoll( + avatar_id=402, + is_unlock=True + ), + AvatarRoll( + avatar_id=403, + is_unlock=True + ), + AvatarRoll( + avatar_id=404, + is_unlock=True + ), + AvatarRoll( + avatar_id=411, + is_unlock=True + ), + AvatarRoll( + avatar_id=412, + is_unlock=True + ), + AvatarRoll( + avatar_id=421, + is_unlock=True + ), + AvatarRoll( + avatar_id=422, + is_unlock=True + ), + AvatarRoll( + avatar_id=501, + is_unlock=True + ), + AvatarRoll( + avatar_id=502, + is_unlock=True + ), + AvatarRoll( + avatar_id=503, + is_unlock=True + ), + AvatarRoll( + avatar_id=504, + is_unlock=True + ), + AvatarRoll( + avatar_id=506, + is_unlock=True + ), + AvatarRoll( + avatar_id=507, + is_unlock=True + ), + AvatarRoll( + avatar_id=511, + is_unlock=True + ), + AvatarRoll( + avatar_id=601, + is_unlock=True + ), + AvatarRoll( + avatar_id=602, + is_unlock=True + ), + AvatarRoll( + avatar_id=603, + is_unlock=True + ), + AvatarRoll( + avatar_id=604, + is_unlock=True + ), + AvatarRoll( + avatar_id=611, + is_unlock=True + ), + AvatarRoll( + avatar_id=612, + is_unlock=True + ), + AvatarRoll( + avatar_id=702, + is_unlock=True + ), + AvatarRoll( + avatar_id=703, + is_unlock=True + ), + AvatarRoll( + avatar_id=705, + is_unlock=True + ), + AvatarRoll( + avatar_id=706, + is_unlock=True + ), + AvatarRoll( + avatar_id=711, + is_unlock=True + ), + AvatarRoll( + avatar_id=712, + is_unlock=True + ), + AvatarRoll( + avatar_id=713, + is_unlock=True + ), + AvatarRoll( + avatar_id=714, + is_unlock=True + ), + AvatarRoll( + avatar_id=801, + is_unlock=True + ), + AvatarRoll( + avatar_id=802, + is_unlock=True + ), + AvatarRoll( + avatar_id=803, + is_unlock=True + ), + AvatarRoll( + avatar_id=2201, + is_unlock=True + ), + AvatarRoll( + avatar_id=2202, + is_unlock=True + ), + AvatarRoll( + avatar_id=2401, + is_unlock=True + ), + AvatarRoll( + avatar_id=2501, + is_unlock=True + ), + AvatarRoll( + avatar_id=2601, + is_unlock=True + ), + AvatarRoll( + avatar_id=2801, + is_unlock=True + ), + AvatarRoll( + avatar_id=2901, + is_unlock=True + ), + AvatarRoll( + avatar_id=2902, + is_unlock=True + ), + AvatarRoll( + avatar_id=3101, + is_unlock=True + ), + AvatarRoll( + avatar_id=3201, + is_unlock=True + ), + AvatarRoll( + avatar_id=3301, + is_unlock=True + ), + AvatarRoll( + avatar_id=3501, + is_unlock=True + ), + AvatarRoll( + avatar_id=3601, + is_unlock=True + ), + AvatarRoll( + avatar_id=3701, + is_unlock=True + ), + AvatarRoll( + avatar_id=20201, + is_unlock=True + ), + AvatarRoll( + avatar_id=20301, + is_unlock=True + ), + AvatarRoll( + avatar_id=20401, + is_unlock=True + ), + AvatarRoll( + avatar_id=70005, + progress=18 + ), + AvatarRoll( + avatar_id=70006, + progress=18 + ), + AvatarRoll( + avatar_id=70010, + progress=18 + ), + AvatarRoll( + avatar_id=70011, + has_take_group_list=[ + 111 + ], + progress=33 + ), + AvatarRoll( + avatar_id=70019, + has_take_group_list=[ + 191, + 192 + ], + progress=87 + ), + AvatarRoll( + avatar_id=70022, + has_take_group_list=[ + 221, + 222 + ], + is_unlock=True, + progress=68 + ), + AvatarRoll( + avatar_id=70025, + has_take_group_list=[ + 251, + 252 + ], + progress=87 + ), + AvatarRoll( + avatar_id=70030, + has_take_group_list=[ + 301, + 302 + ], + progress=87 + ), + AvatarRoll( + avatar_id=70032, + has_take_group_list=[ + 321 + ], + progress=33 + ), + AvatarRoll( + avatar_id=70038, + progress=21 + ), + AvatarRoll( + avatar_id=70065, + progress=33 + ), + AvatarRoll( + avatar_id=70080, + has_take_group_list=[ + 801, + 802 + ], + is_unlock=True, + progress=63 + ) + ] + ) diff --git a/game_server/packet/handlers/GetAvatarTeamDataReq.py b/game_server/packet/handlers/GetAvatarTeamDataReq.py new file mode 100644 index 0000000..2ddf453 --- /dev/null +++ b/game_server/packet/handlers/GetAvatarTeamDataReq.py @@ -0,0 +1,23 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetAvatarTeamDataReq, + GetAvatarTeamDataRsp, + CustomAvatarTeam +) + +async def handle(session: Session, msg: GetAvatarTeamDataReq) -> betterproto.Message: + return GetAvatarTeamDataRsp( + retcode=0, + custom_avatar_team_list=[ + CustomAvatarTeam( + team_id=team.team_id, + name=team.name, + avatar_id_list=team.avatar_id_list, + elf_id_list=team.elf_id_list, + astra_mate_id=team.astral_mate_id, + is_using_astra_mate=team.is_using_astra_mate + ) + for team_id,team in session.player.custom_avatar_team_list.items() + ] + ) diff --git a/game_server/packet/handlers/GetBattlePassMissionPanelReq.py b/game_server/packet/handlers/GetBattlePassMissionPanelReq.py new file mode 100644 index 0000000..a4d8959 --- /dev/null +++ b/game_server/packet/handlers/GetBattlePassMissionPanelReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetBattlePassMissionPanelReq,GetBattlePassMissionPanelRsp + +async def handle(session: Session, msg: GetBattlePassMissionPanelReq) -> betterproto.Message: + return GetBattlePassMissionPanelRsp(retcode=0) diff --git a/game_server/packet/handlers/GetBlackListReq.py b/game_server/packet/handlers/GetBlackListReq.py new file mode 100644 index 0000000..3ccd578 --- /dev/null +++ b/game_server/packet/handlers/GetBlackListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetBlackListReq, GetBlackListRsp + +async def handle(session: Session, msg: GetBlackListReq) -> betterproto.Message: + return GetBlackListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetBuffEffectReq.py b/game_server/packet/handlers/GetBuffEffectReq.py new file mode 100644 index 0000000..1f292f0 --- /dev/null +++ b/game_server/packet/handlers/GetBuffEffectReq.py @@ -0,0 +1,22 @@ + +import betterproto +from game_server.net.session import Session +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetBuffEffectReq, + GetBuffEffectRsp, + BuffEffect +) + +async def handle(session: Session, msg: GetBuffEffectReq) -> betterproto.Message: + return GetBuffEffectRsp( + retcode=0, + effect_list=[ + BuffEffect( + effect_id=i, + end_time=int(get_unix_in_seconds()+3600*24*7) + ) + for i in msg.effect_id_list + ], + aura_effect_list=msg.effect_id_list[:] + ) diff --git a/game_server/packet/handlers/GetBulletinActivityMissionReq.py b/game_server/packet/handlers/GetBulletinActivityMissionReq.py new file mode 100644 index 0000000..467f254 --- /dev/null +++ b/game_server/packet/handlers/GetBulletinActivityMissionReq.py @@ -0,0 +1,304 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetBulletinActivityMissionReq, + GetBulletinActivityMissionRsp, + BulletinMissionGroup, + PanelMissionData, + PanelMissionDataPanelMissionCycleData +) + +async def handle(session: Session, msg: GetBulletinActivityMissionReq) -> betterproto.Message: + return GetBulletinActivityMissionRsp( + retcode=0, + mission_group_list=[ + BulletinMissionGroup( + activity_id=5931 + ), + BulletinMissionGroup( + activity_id=5938, + mission_list=[ + PanelMissionData( + mission_id=115679, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729828800, + cycle_id=20006997, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5941, + mission_list=[ + PanelMissionData( + mission_id=687511, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729828800, + cycle_id=20007074, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5943, + mission_list=[ + PanelMissionData( + mission_id=687521, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729828800, + cycle_id=20007081, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5944, + mission_list=[ + PanelMissionData( + mission_id=687530, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007089, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5949, + mission_list=[ + PanelMissionData( + mission_id=687546, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007106, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687549, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007109, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687566, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007126, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687563, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007123, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687564, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007124, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687565, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007125, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687562, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007122, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687554, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007114, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687555, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007115, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687567, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007127, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687550, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007110, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687551, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007111, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687552, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007112, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687553, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007113, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687560, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007120, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687561, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007121, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687545, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007105, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5952 + ), + BulletinMissionGroup( + activity_id=5953, + mission_list=[ + PanelMissionData( + mission_id=687608, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007187, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687620, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007141, + end_time=1880308800 + ) + ] + ), + PanelMissionData( + mission_id=687716, + cycle_list=[ + PanelMissionDataPanelMissionCycleData( + begin_time=1729108800, + cycle_id=20007143, + end_time=1880308800 + ) + ] + ) + ] + ), + BulletinMissionGroup( + activity_id=5959 + ), + BulletinMissionGroup( + activity_id=5962 + ), + BulletinMissionGroup( + activity_id=5963 + ), + BulletinMissionGroup( + activity_id=5964 + ) + ] + ) diff --git a/game_server/packet/handlers/GetBulletinReq.py b/game_server/packet/handlers/GetBulletinReq.py new file mode 100644 index 0000000..806cc1c --- /dev/null +++ b/game_server/packet/handlers/GetBulletinReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetBulletinReq,GetBulletinRsp + +async def handle(session: Session, msg: GetBulletinReq) -> betterproto.Message: + return GetBulletinRsp( + retcode=0, + is_all=True + ) diff --git a/game_server/packet/handlers/GetCardProductInfoReq.py b/game_server/packet/handlers/GetCardProductInfoReq.py new file mode 100644 index 0000000..3d3917c --- /dev/null +++ b/game_server/packet/handlers/GetCardProductInfoReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetCardProductInfoReq,GetCardProductInfoRsp + +async def handle(session: Session, msg: GetCardProductInfoReq) -> betterproto.Message: + return GetCardProductInfoRsp(retcode=0) diff --git a/game_server/packet/handlers/GetChallengeStepCompensationInfoReq.py b/game_server/packet/handlers/GetChallengeStepCompensationInfoReq.py new file mode 100644 index 0000000..ca6caa6 --- /dev/null +++ b/game_server/packet/handlers/GetChallengeStepCompensationInfoReq.py @@ -0,0 +1,37 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.step_mission_compensation import StepMissionCompensationData +from lib.proto import ( + GetChallengeStepCompensationInfoReq, + GetChallengeStepCompensationInfoRsp, + ChallengeStepCompensation, + StepCompensation +) + +async def handle(session: Session, msg: GetChallengeStepCompensationInfoReq) -> betterproto.Message: + return GetChallengeStepCompensationInfoRsp( + retcode=0, + compensation_list=[ + ChallengeStepCompensation( + compensation_id=challenge.CompensationID, + is_take_compensation=True, + new_challenge_step_compensation_list=[ + StepCompensation( + step_id=id + ) for id in challenge.NewChallengeStepIDList + ], + old_challenge_step_compensation_list=[ + StepCompensation( + step_id=id + ) for id in challenge.OldChallengeStepIDList + ], + mainline_step_compensation_list=[ + StepCompensation( + step_id=id + ) for id in challenge.MainLineStepIDList + ] + ) + for challenge in ResourceManager.instance().values(StepMissionCompensationData) + ] + ) diff --git a/game_server/packet/handlers/GetChapterActivityDataReq.py b/game_server/packet/handlers/GetChapterActivityDataReq.py new file mode 100644 index 0000000..63cb36a --- /dev/null +++ b/game_server/packet/handlers/GetChapterActivityDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetChapterActivityDataReq,GetChapterActivityDataRsp + +async def handle(session: Session, msg: GetChapterActivityDataReq) -> betterproto.Message: + return GetChapterActivityDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetChapterCompensationInfoReq.py b/game_server/packet/handlers/GetChapterCompensationInfoReq.py new file mode 100644 index 0000000..810a962 --- /dev/null +++ b/game_server/packet/handlers/GetChapterCompensationInfoReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetChapterCompensationInfoReq,GetChapterCompensationInfoRsp + +async def handle(session: Session, msg: GetChapterCompensationInfoReq) -> betterproto.Message: + return GetChapterCompensationInfoRsp(retcode=0) diff --git a/game_server/packet/handlers/GetChatgroupListReq.py b/game_server/packet/handlers/GetChatgroupListReq.py new file mode 100644 index 0000000..b5042bd --- /dev/null +++ b/game_server/packet/handlers/GetChatgroupListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetChatgroupListReq, GetChatgroupListRsp + +async def handle(session: Session, msg: GetChatgroupListReq) -> betterproto.Message: + return GetChatgroupListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetClientDataReq.py b/game_server/packet/handlers/GetClientDataReq.py new file mode 100644 index 0000000..b074bbd --- /dev/null +++ b/game_server/packet/handlers/GetClientDataReq.py @@ -0,0 +1,23 @@ +import betterproto +from game_server.net.session import Session +from database import mongo +from lib.proto import GetClientDataReq,GetClientDataRsp,ClientData + +async def handle(session: Session, msg: GetClientDataReq) -> betterproto.Message: + data = [] + client_data = list(mongo.find_documents_by_key_values("clientdata", {"ID": msg.id, "Type":msg.type})) + if client_data: + for client in client_data: + data.append( + ClientData( + id=client['ID'], + type=client['Type'], + data=client['Data'][0] + ) + ) + return GetClientDataRsp( + retcode=0, + type=msg.type, + id=msg.id, + client_data_list=data + ) diff --git a/game_server/packet/handlers/GetClientMailDataReq.py b/game_server/packet/handlers/GetClientMailDataReq.py new file mode 100644 index 0000000..94fd04e --- /dev/null +++ b/game_server/packet/handlers/GetClientMailDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetClientMailDataReq, GetClientMailDataRsp + +async def handle(session: Session, msg: GetClientMailDataReq) -> betterproto.Message: + return GetClientMailDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetClientSettingReq.py b/game_server/packet/handlers/GetClientSettingReq.py new file mode 100644 index 0000000..a7f1f53 --- /dev/null +++ b/game_server/packet/handlers/GetClientSettingReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetClientSettingReq,GetClientSettingRsp + +async def handle(session: Session, msg: GetClientSettingReq) -> betterproto.Message: + return GetClientSettingRsp( + retcode=0, + client_setting_type=msg.client_setting_type, + is_weekly_guide_switch_on=True, + avatar_artifact_switch_list=[] + ) diff --git a/game_server/packet/handlers/GetCollectionListReq.py b/game_server/packet/handlers/GetCollectionListReq.py new file mode 100644 index 0000000..4027a95 --- /dev/null +++ b/game_server/packet/handlers/GetCollectionListReq.py @@ -0,0 +1,16 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.collection import CollectionData +from lib.proto import GetCollectionListReq, GetCollectionListRsp + +async def handle(session: Session, msg: GetCollectionListReq) -> betterproto.Message: + collection = [ + collection.ID + for collection in ResourceManager.instance().values(CollectionData) + ] + return GetCollectionListRsp( + retcode=0, + collection_id_list=collection, + active_collection_id_list=collection + ) diff --git a/game_server/packet/handlers/GetConfigReq.py b/game_server/packet/handlers/GetConfigReq.py new file mode 100644 index 0000000..ae54397 --- /dev/null +++ b/game_server/packet/handlers/GetConfigReq.py @@ -0,0 +1,55 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetConfigReq,GetConfigRsp,GetConfigRspAntiCheatStageCheckConfig +from game_server.utils import get_unix_in_seconds +from pprint import pprint + +async def handle(session: Session, msg: GetConfigReq) -> betterproto.Message: + # rsp = GetConfigRsp( + # retcode=0, + # stamina_recover_config_time=360, + # same_type_power_up_rate=60, + # day_time_offset=120, + # server_cur_time=get_unix_in_seconds(), + # power_up_scoin_cost_rate=1684572830, + # max_friend_num=50, + # avatar_max_add_goodfeel=148, + # gacha_ticket_list=[1000], + # region_name="overseas01", + # discount_schedule_config_list=[25], + # stigmata_refine_value_back_percent=[8,16,100,1061660], + # scoin_convert_per_exp=[111,118,101,114,115,101,97,115,48,49], + # mp_reset_skill_hcoin_cost=26, + # mp_member_exhausted_drop_ratio=[8,4,16,600,24,1684353600,32,1686888000], + # friend_bond_level_config_list=[120], + # friend_assistant_add_bond=1599184800, + # armada_manage_mail_length=1599444000, + # armada_contact_length=2, + # armada_bulletin_length=999999999, + # openworld_judge_para_type1=500000000, + # openworld_judge_para_type4=7034, + # trial_avatar_player_min_level=5, + # disjoin_equipment_max_batch_num=86400, + # anti_cheat_stage_check_config=GetConfigRspAntiCheatStageCheckConfig( + # check_stage_id_list=[16295], + # check_stage_type_list=[4], + # ), + # is_can_gal_touch=[True,True,True,True], + # is_resistance_open=True, + # next_day_begin_time=get_unix_in_seconds() + (604800 // 7) + # ) + byte_array = bytes.fromhex("080010e802203c287830c070389e95a2a306403248940160e8077819fa0105089407100afa010608ce08109802fa010608cf08109802fa010608d008109802fa010508d208103cfa010608d408109802fa010608d508109601fa010608d60810c801fa010608d70810c801fa010508d8081078fa010608db08109802fa010508a7391064fa0105089e3a100afa010508a83d100afa010708fdfa0610c801fa0106089cfb061008fa010608a6fc06100afa01060888fd06100afa01060898fd061008fa010608e7ff06100afa010608ebff061008fa010608818007100afa010608a48307100afa010608a98307100afa010608ba8307100afa010608df83071008fa010608e283071008fa010608ef83071008fa0106089c8b07100afa0106089a9007100afa010608c4a2071008fa010608c9b107100afa010608d1b107100afa010608d2b107100afa010608ceb307100afa010608d2b307100afa01060892d207100afa010608dbde07100afa010608dcde07100afa0106089ce640106482020a6f76657273656173303188021a9a02160802105018c0e494a30620c0bcafa40628c91a28ad1b9a0211080410d80418c0e494a30620c0bcafa406a00278a802a0bfc6fa05b002a0a8d6fa05b80202c802ff93ebdc03d00280cab5ee01e802fa36f00205f80280a3059203bb02089a2210021884e1f8ee052084dddadf0728003818420130480f50636212444c435f426f7867616368615f5469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f70476163686172416576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f62616e6e65725f74727565636f6c6f727a00820115332e35535068756e74696e6767616368615f4465738801ce029201386576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e675f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f332e35535068756e74696e6767616368615f7469746c655f74727565636f6c6f72aa010092036608af28102e18a0c9f38e0620bf8bc1bc08280042013048505063620d352e365455504f5f7469746c656a1c5370726974654f75747075742f42502f352e365f5475506f5f54616272007a0082010b352e365455504f5f6465738801bc059201009a0100aa01009203ad0208b72810021880d7fd8e0620bf979ad30728003823420130481950636211352e34646c6367616368615f7469746c656a275370726974654f75747075742f53686f7054616249636f6e732f49636f6e53686f704761636861723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62616e6e65725f74727565636f6c6f727a0082010f352e34646c6367616368615f446573880182079201396576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f352e345f444c433267616368615f7469746c655f74727565636f6c6f72aa010092039102089d2b100318c0b2cca10620bff0a9a30628003839420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e355f362e365f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67a00193b93baa01009203ab03089f2b100418c0e494a30620c0bcafa4062800389e86073880a7293881a7293882a7293883a7293884a7293885a7293886a7293887a7293888a7293889a729388aa729388ba729388ca729388da729388ea729388fa7293890a7293891a729420134480950636217362e3653686f7070696e674461797330315f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730315f4465738801d00f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330315f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a02b100318c0e494a30620c0bcafa40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801cf0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208a12b100318c0e494a30620c0bcafa4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801ce0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208a22b101a18c0e494a30620c0bcafa4062800380d420130481450636217362e3653686f7070696e674461797330345f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730345f4465738801cd0f92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330345f7469746c655f74727565636f6c6f72a00106aa01009203d00208a42b100418c0d2e5a30620c0bcafa4062800389c8607420134481450636211362e365f573344726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010d362e365f44726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573344726573735f5469746c655f74727565636f6c6f72aa01009203d20208a52b100418c0e494a30620bfafe0a3062800389d8607420134481450636211362e365f573144726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42616e6e65725f74727565636f6c6f727a183c747970653d22377c31342220746578743d22474f222f3e82010f362e365f573144726573735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573144726573735f5469746c655f74727565636f6c6f72aa01009203dd0208a62b101518c0bcafa40620bfb1d4a406280038848c0638858c06420130481450636216352e385f73686f7070696e67646179735f7469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f5461625f74727565636f6c6f72723a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f496d6167655f74727565636f6c6f727a183c747970653d2239317c312220746578743d22474f222f3e820113332e3673686f7070696e67646179735f4465738801f80a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f42475f74727565636f6c6f729a01396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f536372617463685f546578745f74727565636f6c6f72aa01009203be0308a72b100418c0e494a30620bfbcafa406280038daae0538e5ae0538dbae0538e6ae0538dcae0538ddae0538deae0538dfae0538e7ae0538e8ae0538e9ae0538eaae0538e0ae0538e1ae0538e2ae0538e3ae0538ebae0538ecae0538edae0538eeae0538fbf74038fcf740420130481e50636213362e365f4368617261637465725f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f43686172616374657253686f775f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62616e6e65725f74727565636f6c6f727a203c747970653d2236337c34303030303138312220746578743d22474f22202f3e820111362e365f4368617261637465725f6465738801b0099201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4368617261637465725f7469746c655f74727565636f6c6f72aa01009203ec0208aa2b100418c0e494a30620bfbcafa406280038d6ae0538d7ae0538d8ae0538d9ae05420130483250636212362e365f4558576561706f6e5f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62616e6e65725f74727565636f6c6f727a1f3c747970653d22313030377c31313835312220746578743d22474f22202f3e820110362e365f4558576561706f6e5f4465738801ad099201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4558576561706f6e5f746974696c655f74727565636f6c6f72aa01009203e10208ab2b100318c1bcafa40620c0b1d4a40628003816420130481450636217362e3653686f7070696e674461797330325f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730325f4465738801f80a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7469746c655f74727565636f6c6f72a001afd207aa01009203e10208ac2b100318c1bcafa40620c0b1d4a4062800382d420130481450636217362e3653686f7070696e674461797330335f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330325f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62616e6e65725f74727565636f6c6f727a00820111362e3653686f7070696e6730335f4465738801f70a92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f53686f7070696e674461797330335f7469746c655f74727565636f6c6f72a001b0d207aa01009203df0208ad2b100318c0ddc0a30620c0c78aa40628003820420130481450636211332e3374696d6573686f705f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f332e3374696d6573686f705f4465738801a0069201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f42475f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f54696d6553686f705f5469746c655f74727565636f6c6f72a00105a001af3aa001f437aa01009203af0308ae2b100418c0e494a30620c0a2f2a4062800389ea929389fa92938a0a92938a1a92938a2a92938a3a92938a4a92938a5a92938a6a92938a7a92938a8a92938a9a92938aaa92938aba92938aca92938ada92938aea929420130481950636210362e3677656c666172655f7469746c656a3f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7461625f74727565636f6c6f7272426576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535312220746578743d22474f222f3e82010e362e3677656c666172655f6465738801aa0b92013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f62675f74727565636f6c6f729a01416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c666172656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203ee0208af2b100318c0e494a30620c09797a50628003834420130481950636214362e3677656c6661726573686f705f7469746c656a3c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7461625f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2236347c353535302220746578743d22474f222f3e820112362e3677656c6661726573686f705f6465738801a90b92013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f62675f74727565636f6c6f729a013e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f77656c6661726573686f705f7469746c655f74727565636f6c6f72a001da8007aa01009203950308b02b100418a0e1a9a40620bfa2f2a4062800388ea929388fa9293890a9293891a9293892a9293893a9293894a9293895a9293896a9293897a9293898a9293899a929389aa929389ba929389ca929389da929420130483250636212362e335f57617665527573685f7469746c656a396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7461625f74727565636f6c6f72723c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62616e6e65725f74727565636f6c6f727a193c747970653d223134327c302220746578743d22474f222f3e820110362e335f57617665527573685f4465738801880e9201386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f62675f74727565636f6c6f729a013b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f57617665527573685f7469746c655f74727565636f6c6f72aa01009203e20208b12b100418c0e494a306209f99aba306280038afa929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765315f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765315f7469746c655f74727565636f6c6f72aa01009203e20208b22b100418a099aba306209f8ed0a306280038b0a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765325f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765325f7469746c655f74727565636f6c6f72aa01009203e20208b32b100418a08ed0a30620bfa2f2a406280038b1a929420131481e50636211362e365f4d61696e4f57315f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820112362e365f4d61696e5374616765335f4465738801c10c92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e5374616765335f7469746c655f74727565636f6c6f72aa01009203800308b42b100418c0e494a30620bfa2f2a406280038b2a92938b3a92938b4a92938b5a92938b7a92938b9a92938cfaa2938d0aa2938d1aa2938d2aa29420130481e50636210362e365f4d61696e4f575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62616e6e65725f74727565636f6c6f727a193c747970653d2239347c33372220746578743d22474f222f3e820111362e365f4d61696e53746167655f4465738801c00c9201396576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f4d61696e53746167655f7469746c655f74727565636f6c6f72aa01009203d50308b52b100418a0b1d5a30620c0a2f2a40628003882aa293883aa293884aa293887aa293888aa293889aa29388aaa29388baa29388caa29388daa29388eaa29388faa293890aa293891aa293892aa293893aa293894aa293895aa293896aa293897aa293898aa293899aa29389aaa29389baa29389caa29389daa293885aa293886aa29420130481e5063620f362e36747269706c655f7469746c656a3e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7461625f74727565636f6c6f7272416576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e82010d362e36747269706c655f6465738801a40d92013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f62675f74727565636f6c6f729a01406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c656d697373696f6e5f7469746c655f74727565636f6c6f72aa01009203e80208b62b100318a0b1d5a30620c09797a50628003847420130481e50636213362e36747269706c6573686f705f7469746c656a3b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7461625f74727565636f6c6f72723e6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62616e6e65725f74727565636f6c6f727a1b3c747970653d2238317c393038302220746578743d22474f222f3e820111362e36747269706c6573686f705f6465738801a30d92013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f62675f74727565636f6c6f729a013d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f747269706c6573686f705f7469746c655f74727565636f6c6f72a001eddd07aa010092038c0208bb2b100318c0f0a9a30620bfae87a5062800383b420130480a5063620f352e36425053686f705f5469746c656a2e6576656e742f496d6d6564696174656c792f42502f636f6e73745f53686f7054616230345f74727565636f6c6f72723f6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62616e6e65725f74727565636f6c6f727a008201008801ca0992013b6576656e742f496d6d6564696174656c792f42502f53686f702f362e365f362e375f425053686f7042616e6e65725f62675f74727565636f6c6f729a01215370726974654f75747075742f42502f42505f42616e6e65725f546f756d696e67aa010092039e0408bc2b100418c0d0f1a20620c0f0a9a30628003896a205420135481450636216362e355f362e365f53686f77506167655f7469746c656a3d6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7461625f74727565636f6c6f7272406576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62616e6e65725f74727565636f6c6f727ac5013c747970653d22776562766965772220746578743d22474f2220687265663d2268747470733a2f2f6163742e686f796f76657273652e636f6d2f70757a7a6c652f6268332f6532303233303531317072657669657730315f3739382f696e6465782e68746d6c3f67616d655f62697a3d6268335f6f73267369676e5f747970653d3226617574686b65795f7665723d3126617574685f61707069643d6532303233303531317072657669657730312677696e5f6d6f64653d66756c6c73637265656e222f3e820114362e355f362e365f53686f77506167655f4465738801840792013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f62675f74727565636f6c6f729a013f6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e355f362e365f53686f77506167655f7469746c655f74727565636f6c6f72aa01009203d20208bd2b100418c0ddc0a30620bfc78aa4062800389f8607420134481450636211362e365f573244726573735f5469746c656a386576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5461625f74727565636f6c6f72723b6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42616e6e65725f74727565636f6c6f727a183c747970653d2239317c352220746578743d22474f222f3e82010f362e365f573244726573735f4465738801f70a9201376576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f42475f74727565636f6c6f729a013a6576656e742f496d6d6564696174656c792f4163746976697479506167652f362e365f573244726573735f5469746c655f74727565636f6c6f72aa01009203ff0208a77f100418c0dd9d9e0620bfe3a0ad062800389bf740420131480f50636211362e335f4d656469614a575f7469746c656a3a6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7461625f74727565636f6c6f72723d6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62616e6e65725f74727565636f6c6f727a3d3c747970653d2262726f777365722220746578743d22474f2220687265663d2268747470733a2f2f686f796f2e6c696e6b2f3031586f42424164222f3e82010f362e335f4d656469614a575f4465738801ac029201396576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f62675f74727565636f6c6f729a013c6576656e742f496d6d6564696174656c792f4163746976697479506167652f636f6e73745f4d656469614a575f7469746c655f74727565636f6c6f72aa01009a030708882710c193389a030708c03e10c293389a030708c86510c393389a030808a09c0110c493389a030808b0ea0110c59338a00314a803c0b9aec905b003c0a493cc05ba031541726d616461416374697669747942746e5f446563c00301c8033cd00332d8030ae00300e80319f00301f803ed40f803ee40f803ef40f803f04080043688041e900432980419a2040c080010001800200028003000a2040d080110cd021814200328053003a2040d0802109a0518282007280a3007a2040d080310e707183c200a280f300aa8044bb00405c00464c80414d004901cd8048c0180050a880532900519a0051eaa05910708d1f40808d2f40808d3f40808d4f40808d5f40808d6f40808d7f40808d8f40808d9f40808daf40808dbf40808dcf40808ddf40808def40808dff40808e0f40808e1f40808e2f40808e3f40808e4f40808e5f40808e6f40808e7f40808e8f40808e9f40808eaf40808ebf40808ecf40808edf40808eef40808eff40808f0f40808f1f40808f2f40808f3f40808f4f40808f5f40808f6f40808f7f40808f8f40808f9f40808faf40808fbf40808fcf40808fdf40808fef40808fff4080880f5080881f5080882f5080883f5080884f5080885f5080886f5080887f5080888f5080889f508088af508088bf508088cf508088df508088ef508088ff5080890f5080891f5080892f5080893f5080894f5080895f5080896f5080897f5080898f5080899f508089af508089bf508089cf508089df508089ef508089ff50808a0f50808a1f50808a2f50808a3f50808a4f50808a5f50808a6f50808a7f50808a8f50808a9f50808aaf50808abf50808acf50808adf50808aef50808aff50808b0f50808b1f50808b2f50808b3f50808b4f5080899f608089af608089bf608089cf608089df608089ef608089ff60808a0f60808a1f60808a2f60808a3f60808a4f60808a5f60808a9ab0908aaab0908abab0908acab0908adab0908aeab0908afab0908b0ab0908b1ab0908b2ab0908b3ab0908b4ab0908b5ab0908b6ab0908b7ab0908b8ab0908b9ab0908baab0908bbab0908bcab0908bdab0908beab0908bfab0908c0ab0908c1ab0908c2ab0908c3ab0908c4ab0908c5ab0908c6ab0908c7ab09089daf09089eaf09089faf0908a0af0908a1af0908a2af0908a3af0908a4af0908a5af0908a6af0908a7af0908a8af0908a9af0908aaaf0908abaf0908acaf0908adaf0908aeaf0908cefa360895fb3608c9bb0908ddbb0908e7bb090884dc0a0885dc0a0886dc0a0887dc0a0888dc0a0889dc0a088adc0a088bdc0a088cdc0a088ddc0a088edc0a088fdc0a0890dc0a0891dc0a0892dc0a0893dc0a0894dc0a0895dc0a0896dc0a0897dc0a0898dc0a0899dc0a089adc0a089bdc0a089cdc0a089ddc0a089edc0a089fdc0a08a0dc0a08a1dc0a08a2dc0a08a3dc0a08a4dc0a08a5dc0a08a6dc0a08a7dc0a08ac88f50408b088f50408b488f50408b888f50408bd88f50408be88f50408bf88f50408c088f50408c188f50408c288f50408c388f50408e697930508ca98930508ae99930508929a93051004100f10141015101810191020100a100b1023102110251024b80501c00501d005c0cda4a306") + + + ms = memoryview(byte_array) + rsp = GetConfigRsp() + rsp.parse(ms.tobytes()) + rsp.server_cur_time = get_unix_in_seconds() + rsp.region_name = "overseas01" + rsp.next_day_begin_time = int(get_unix_in_seconds() + 604800 / 7) + + stage_ids = [146033,146056,146077,146078] + for id in stage_ids: + rsp.anti_cheat_stage_check_config.check_stage_id_list.append(id) + + return rsp diff --git a/game_server/packet/handlers/GetConsignedOrderDataReq.py b/game_server/packet/handlers/GetConsignedOrderDataReq.py new file mode 100644 index 0000000..0990f2d --- /dev/null +++ b/game_server/packet/handlers/GetConsignedOrderDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetConsignedOrderDataReq, GetConsignedOrderDataRsp + +async def handle(session: Session, msg: GetConsignedOrderDataReq) -> betterproto.Message: + return GetConsignedOrderDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetCurrencyExchangeInfoReq.py b/game_server/packet/handlers/GetCurrencyExchangeInfoReq.py new file mode 100644 index 0000000..a19721f --- /dev/null +++ b/game_server/packet/handlers/GetCurrencyExchangeInfoReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetCurrencyExchangeInfoReq, GetCurrencyExchangeInfoRsp + +async def handle(session: Session, msg: GetCurrencyExchangeInfoReq) -> betterproto.Message: + return GetCurrencyExchangeInfoRsp(retcode=0) diff --git a/game_server/packet/handlers/GetCustomHeadDataReq.py b/game_server/packet/handlers/GetCustomHeadDataReq.py new file mode 100644 index 0000000..037040f --- /dev/null +++ b/game_server/packet/handlers/GetCustomHeadDataReq.py @@ -0,0 +1,36 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.custom_head_data import CustomHeadData +from lib.proto import ( + GetCustomHeadDataReq, + GetCustomHeadDataRsp, + CustomHead +) + +async def handle(session: Session, msg: GetCustomHeadDataReq) -> betterproto.Message: + custom_head : CustomHead = [ + CustomHead( + id=custom.headID + ) + for custom in ResourceManager.instance().values(CustomHeadData) + ] + + for i in range(161087,161091): + custom_head.append( + CustomHead( + id=i + ) + ) + + for i in range(162199,162213): + custom_head.append( + CustomHead( + id=i + ) + ) + + return GetCustomHeadDataRsp( + retcode=0, + custom_head_list=custom_head + ) diff --git a/game_server/packet/handlers/GetDLCAvatarReq.py b/game_server/packet/handlers/GetDLCAvatarReq.py new file mode 100644 index 0000000..2df0b96 --- /dev/null +++ b/game_server/packet/handlers/GetDLCAvatarReq.py @@ -0,0 +1,441 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetDLCAvatarReq, + GetDLCAvatarRsp, + DLCAvatar, + DLCAvatarTalent +) + +async def handle(session: Session, msg: GetDLCAvatarReq) -> betterproto.Message: + return GetDLCAvatarRsp( + retcode=0, + avatar_list=[ + DLCAvatar( + avatar_id=1203, + equip_talent_list=[20304,20322,20327], + talent_list=[ + DLCAvatarTalent( + level=3, + talent_id=20300 + ), + DLCAvatarTalent( + level=1, + talent_id=20301 + ), + DLCAvatarTalent( + level=3, + talent_id=20302 + ), + DLCAvatarTalent( + level=1, + talent_id=20303 + ), + DLCAvatarTalent( + level=1, + talent_id=20304 + ), + DLCAvatarTalent( + level=2, + talent_id=20305 + ), + DLCAvatarTalent( + level=1, + talent_id=20306 + ), + DLCAvatarTalent( + level=1, + talent_id=20307 + ), + DLCAvatarTalent( + level=3, + talent_id=20308 + ), + DLCAvatarTalent( + level=1, + talent_id=20309 + ), + DLCAvatarTalent( + level=1, + talent_id=20310 + ), + DLCAvatarTalent( + level=1, + talent_id=20311 + ), + DLCAvatarTalent( + level=1, + talent_id=20312 + ), + DLCAvatarTalent( + level=3, + talent_id=20313 + ), + DLCAvatarTalent( + level=3, + talent_id=20314 + ), + DLCAvatarTalent( + level=3, + talent_id=20315 + ), + DLCAvatarTalent( + level=2, + talent_id=20316 + ), + DLCAvatarTalent( + level=2, + talent_id=20317 + ), + DLCAvatarTalent( + level=1, + talent_id=20318 + ), + DLCAvatarTalent( + level=2, + talent_id=20319 + ), + DLCAvatarTalent( + level=1, + talent_id=20320 + ), + DLCAvatarTalent( + level=3, + talent_id=20321 + ), + DLCAvatarTalent( + level=3, + talent_id=20322 + ), + DLCAvatarTalent( + level=4, + talent_id=20323 + ), + DLCAvatarTalent( + level=2, + talent_id=20324 + ), + DLCAvatarTalent( + level=2, + talent_id=20325 + ), + DLCAvatarTalent( + level=1, + talent_id=20326 + ), + DLCAvatarTalent( + level=3, + talent_id=20327 + ), + DLCAvatarTalent( + level=3, + talent_id=20328 + ), + DLCAvatarTalent( + level=8, + talent_id=20329, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=20330, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=20331, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=20332, + wait_select_affix_set_id=3 + ) + ] + ), + DLCAvatar( + avatar_id=1304, + equip_talent_list=[30403,30423,30430], + talent_list=[ + DLCAvatarTalent( + level=1, + talent_id=30401 + ), + DLCAvatarTalent( + level=3, + talent_id=30402 + ), + DLCAvatarTalent( + level=1, + talent_id=30403 + ), + DLCAvatarTalent( + level=3, + talent_id=30404 + ), + DLCAvatarTalent( + level=1, + talent_id=30405 + ), + DLCAvatarTalent( + level=1, + talent_id=30406 + ), + DLCAvatarTalent( + level=4, + talent_id=30407 + ), + DLCAvatarTalent( + level=1, + talent_id=30408 + ), + DLCAvatarTalent( + level=3, + talent_id=30409 + ), + DLCAvatarTalent( + level=1, + talent_id=30410 + ), + DLCAvatarTalent( + level=3, + talent_id=30411 + ), + DLCAvatarTalent( + level=1, + talent_id=30412 + ), + DLCAvatarTalent( + level=1, + talent_id=30413 + ), + DLCAvatarTalent( + level=3, + talent_id=30414 + ), + DLCAvatarTalent( + level=3, + talent_id=30415 + ), + DLCAvatarTalent( + level=3, + talent_id=30416 + ), + DLCAvatarTalent( + level=1, + talent_id=30417 + ), + DLCAvatarTalent( + level=3, + talent_id=30418 + ), + DLCAvatarTalent( + level=1, + talent_id=30420 + ), + DLCAvatarTalent( + level=1, + talent_id=30421 + ), + DLCAvatarTalent( + level=3, + talent_id=30422 + ), + DLCAvatarTalent( + level=3, + talent_id=30423 + ), + DLCAvatarTalent( + level=3, + talent_id=30424 + ), + DLCAvatarTalent( + level=4, + talent_id=30425 + ), + DLCAvatarTalent( + level=1, + talent_id=30426 + ), + DLCAvatarTalent( + level=2, + talent_id=30427 + ), + DLCAvatarTalent( + level=1, + talent_id=30428 + ), + DLCAvatarTalent( + level=1, + talent_id=30429 + ), + DLCAvatarTalent( + level=3, + talent_id=30430 + ), + DLCAvatarTalent( + level=8, + talent_id=30431, + wait_select_affix_set_id=5 + ), + DLCAvatarTalent( + level=8, + talent_id=30432, + wait_select_affix_set_id=5 + ), + DLCAvatarTalent( + level=8, + talent_id=30433, + wait_select_affix_set_id=5 + ), + DLCAvatarTalent( + level=8, + talent_id=30434, + wait_select_affix_set_id=5 + ) + ] + ), + DLCAvatar( + avatar_id=1411, + equip_talent_list=[41101,41123,41124], + talent_list=[ + DLCAvatarTalent( + level=1, + talent_id=41100 + ), + DLCAvatarTalent( + level=1, + talent_id=41101 + ), + DLCAvatarTalent( + level=3, + talent_id=41102 + ), + DLCAvatarTalent( + level=1, + talent_id=41103 + ), + DLCAvatarTalent( + level=3, + talent_id=41104 + ), + DLCAvatarTalent( + level=1, + talent_id=41105 + ), + DLCAvatarTalent( + level=3, + talent_id=41106 + ), + DLCAvatarTalent( + level=4, + talent_id=41107 + ), + DLCAvatarTalent( + level=3, + talent_id=41108 + ), + DLCAvatarTalent( + level=1, + talent_id=41109 + ), + DLCAvatarTalent( + level=1, + talent_id=41110 + ), + DLCAvatarTalent( + level=1, + talent_id=41111 + ), + DLCAvatarTalent( + level=1, + talent_id=41112 + ), + DLCAvatarTalent( + level=3, + talent_id=41113 + ), + DLCAvatarTalent( + level=3, + talent_id=41114 + ), + DLCAvatarTalent( + level=3, + talent_id=41115 + ), + DLCAvatarTalent( + level=1, + talent_id=41116 + ), + DLCAvatarTalent( + level=2, + talent_id=41117 + ), + DLCAvatarTalent( + level=1, + talent_id=41118 + ), + DLCAvatarTalent( + level=1, + talent_id=41119 + ), + DLCAvatarTalent( + level=2, + talent_id=41120 + ), + DLCAvatarTalent( + level=3, + talent_id=41122 + ), + DLCAvatarTalent( + level=3, + talent_id=41123 + ), + DLCAvatarTalent( + level=3, + talent_id=41124 + ), + DLCAvatarTalent( + level=1, + talent_id=41125 + ), + DLCAvatarTalent( + level=2, + talent_id=41126 + ), + DLCAvatarTalent( + level=1, + talent_id=41127 + ), + DLCAvatarTalent( + level=3, + talent_id=41128 + ), + DLCAvatarTalent( + level=2, + talent_id=41129 + ), + DLCAvatarTalent( + level=8, + talent_id=41130, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=41131, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=41132, + wait_select_affix_set_id=3 + ), + DLCAvatarTalent( + level=8, + talent_id=41133, + wait_select_affix_set_id=3 + ) + ] + ) + ] + ) diff --git a/game_server/packet/handlers/GetDLCReq.py b/game_server/packet/handlers/GetDLCReq.py new file mode 100644 index 0000000..b27b513 --- /dev/null +++ b/game_server/packet/handlers/GetDLCReq.py @@ -0,0 +1,104 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetDLCReq, + GetDLCRsp, + DLCSupportNPC +) + +async def handle(session: Session, msg: GetDLCReq) -> betterproto.Message: + return GetDLCRsp( + retcode=0, + exp=5300, + finished_dialog_id_list=[ + 310145, + 310151, + 310207, + 310237, + 310240, + 310250, + 310523, + 310724, + 320206, + 320224, + 350510, + 350515, + 350526, + 360607, + 500010006, + 500010020, + 500010037, + 500010068, + 500010069, + 500010079, + 500020008, + 500020014, + 500050003, + 500060005, + 500060014, + 500060039, + 500070016, + 500070021, + 500070040, + 500080006, + 500090006, + 500090015, + 500100043, + 500110024, + 500110039, + 500110045, + 500120012, + 500120021, + 500120036, + 500130003, + 500130016, + 500140003, + 500140017, + 500140029, + 500150007, + 500200003, + 500200036, + 500200054, + 500210005, + 500210009, + 510010006, + 510010014, + 510010019, + 510050010, + 510080005, + 510080025, + 510090006, + 510100004, + 510100022, + 510110007, + 510120008, + 510120013 + ], + has_take_reward_level=30, + level=30, + name="ley", + support_npc_list=[ + DLCSupportNPC( + npc_id=1, + support_level=3 + ), + DLCSupportNPC( + npc_id=2, + support_level=2, + support_point=75 + ), + DLCSupportNPC( + npc_id=3, + support_level=3 + ), + DLCSupportNPC( + npc_id=4, + support_level=3 + ), + DLCSupportNPC( + npc_id=5, + support_level=1, + support_point=2 + ) + ] + ) diff --git a/game_server/packet/handlers/GetDLCTowerReq.py b/game_server/packet/handlers/GetDLCTowerReq.py new file mode 100644 index 0000000..897f4f0 --- /dev/null +++ b/game_server/packet/handlers/GetDLCTowerReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetDLCTowerReq, GetDLCTowerRsp + +async def handle(session: Session, msg: GetDLCTowerReq) -> betterproto.Message: + return GetDLCTowerRsp(retcode=0,schedule_id=203) diff --git a/game_server/packet/handlers/GetDormDataReq.py b/game_server/packet/handlers/GetDormDataReq.py new file mode 100644 index 0000000..28d158b --- /dev/null +++ b/game_server/packet/handlers/GetDormDataReq.py @@ -0,0 +1,924 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetDormDataReq, + GetDormDataRsp, + DepotFurniture, + DormEvent, + DormHouse, + DormRoom, + Furniture +) + +async def handle(session: Session, msg: GetDormDataReq) -> betterproto.Message: + return GetDormDataRsp( + retcode=0, + depot_furniture_list=[ + DepotFurniture( + id=140001, + num=1 + ), + DepotFurniture( + id=140002, + num=1 + ), + DepotFurniture( + id=140003, + num=1 + ), + DepotFurniture( + id=140010, + num=1 + ), + DepotFurniture( + id=140012, + num=1 + ), + DepotFurniture( + id=140013, + num=1 + ), + DepotFurniture( + id=140015, + num=1 + ), + DepotFurniture( + id=140016, + num=1 + ), + DepotFurniture( + id=140201, + num=1 + ), + DepotFurniture( + id=140202, + num=1 + ), + DepotFurniture( + id=140213, + num=1 + ), + DepotFurniture( + id=140215, + num=1 + ), + DepotFurniture( + id=140216, + num=1 + ), + DepotFurniture( + id=140601, + num=1 + ), + DepotFurniture( + id=140603, + num=1 + ), + DepotFurniture( + id=140801, + num=1 + ), + DepotFurniture( + id=140802, + num=1 + ), + DepotFurniture( + id=140806, + num=1 + ), + DepotFurniture( + id=140810, + num=1 + ), + DepotFurniture( + id=140812, + num=1 + ), + DepotFurniture( + id=140813, + num=1 + ), + DepotFurniture( + id=140814, + num=1 + ), + DepotFurniture( + id=140815, + num=1 + ), + DepotFurniture( + id=140816, + num=1 + ), + DepotFurniture( + id=140817, + num=1 + ), + DepotFurniture( + id=140818, + num=1 + ), + DepotFurniture( + id=140819, + num=1 + ), + DepotFurniture( + id=140820, + num=1 + ), + DepotFurniture( + id=140822, + num=1 + ), + DepotFurniture( + id=141501, + num=1 + ), + DepotFurniture( + id=141601, + num=1 + ), + DepotFurniture( + id=141606, + num=1 + ), + DepotFurniture( + id=141615, + num=1 + ), + DepotFurniture( + id=141619, + num=1 + ), + DepotFurniture( + id=141620, + num=1 + ), + DepotFurniture( + id=141621, + num=1 + ), + DepotFurniture( + id=141622, + num=1 + ), + DepotFurniture( + id=141701, + num=1 + ), + DepotFurniture( + id=141702, + num=1 + ), + DepotFurniture( + id=141703, + num=1 + ), + DepotFurniture( + id=141704, + num=1 + ), + DepotFurniture( + id=141709, + num=1 + ), + DepotFurniture( + id=141713, + num=1 + ), + DepotFurniture( + id=141801, + num=1 + ), + DepotFurniture( + id=141802, + num=1 + ), + DepotFurniture( + id=141804, + num=1 + ), + DepotFurniture( + id=141805, + num=1 + ), + DepotFurniture( + id=141807, + num=1 + ), + DepotFurniture( + id=141808, + num=1 + ), + DepotFurniture( + id=141809, + num=1 + ), + DepotFurniture( + id=141810, + num=1 + ), + DepotFurniture( + id=141811, + num=1 + ), + DepotFurniture( + id=141812, + num=1 + ), + DepotFurniture( + id=141814, + num=1 + ), + DepotFurniture( + id=141815, + num=1 + ), + DepotFurniture( + id=146120, + num=1 + ), + DepotFurniture( + id=146620, + num=1 + ) + ], + event_list=[ + DormEvent( + avatar_id=101, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=102, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=103, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=104, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=105, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=106, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=111, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=112, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=113, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=114, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=201, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=202, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=203, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=204, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=205, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=206, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=211, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=212, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=213, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=214, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=301, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=302, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=303, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=311, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=312, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=313, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=314, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=317, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=401, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=402, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=403, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=404, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=411, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=412, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=421, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=422, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=501, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=502, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=503, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=504, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=506, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=507, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=511, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=601, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=602, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=603, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=604, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=611, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=612, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=702, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=703, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=705, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=706, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=711, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=712, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=713, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=714, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=801, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=802, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=803, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2201, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2202, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2401, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2501, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2601, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2801, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2901, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=2902, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3101, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3201, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3301, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3501, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3601, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=3701, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=20201, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=20301, + event_id_list=[ + 10007, + 10011 + ] + ), + DormEvent( + avatar_id=20401, + event_id_list=[ + 10007, + 10011 + ] + ) + ], + house_list=[ + DormHouse( + id=101, + level=39, + name="HitLey", + room_list=[ + DormRoom( + avatar_list=[ + 412,705, + 802, + 2201, + 2401 + ], + furniture_list=[ + Furniture( + id=140015 + ), + Furniture( + id=140013 + ), + Furniture( + id=140016 + ), + ], + id=1011 + ), + DormRoom( + avatar_list=[ + 105, + 113, + 205, + 313, + 612 + ], + furniture_list=[ + Furniture( + id=140808, + pos_x=1, + pos_y=22 + ), + Furniture( + id=140809, + location=3, + pos_x=7, + pos_y=5 + ), + Furniture( + direction=3, + id=140803, + pos_x=1, + pos_y=15 + ), + Furniture( + direction=1, + id=140811, + pos_x=5, + pos_y=14 + ), + Furniture( + id=141610, + pos_x=2, + pos_y=8 + ), + Furniture( + id=140812, + pos_x=4, + pos_y=4 + ), + Furniture( + id=141806, + pos_x=9, + pos_y=7 + ), + Furniture( + id=141803, + pos_x=11, + pos_y=12 + ), + Furniture( + id=140821, + location=2, + pos_x=7, + pos_y=3 + ), + Furniture( + id=140002, + pos_x=26, + pos_y=2 + ), + Furniture( + id=140804, + pos_x=24, + pos_y=17 + ), + Furniture( + id=140805, + pos_x=25, + pos_y=15 + ), + Furniture( + id=140807, + pos_x=23, + pos_y=5 + ), + Furniture( + id=140825 + ), + Furniture( + id=140824 + ), + Furniture( + id=140823 + ) + ], + id=1012 + ), + DormRoom( + furniture_list=[ + Furniture( + id=140015 + ), + Furniture( + id=140013 + ), + Furniture( + id=140016 + ), + ], + id=1013 + ) + ] + ) + ], + is_allow_visit=True, + show_house=101, + show_room=1012, + visit_avatar=101 + ) diff --git a/game_server/packet/handlers/GetDropLimitActivityReq.py b/game_server/packet/handlers/GetDropLimitActivityReq.py new file mode 100644 index 0000000..7ad2ffe --- /dev/null +++ b/game_server/packet/handlers/GetDropLimitActivityReq.py @@ -0,0 +1,245 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetDropLimitActivityReq, + GetDropLimitActivityRsp, + DropLimitActivity, + DropLimitItem +) + +async def handle(session: Session, msg: GetDropLimitActivityReq) -> betterproto.Message: + return GetDropLimitActivityRsp( + retcode=0, + drop_limit_activity_list=[ + DropLimitActivity( + activity_id=1, + begin_time=1576029600, + drop_limit_got_num_list=[ + DropLimitItem( + limit_id=101 + ), + DropLimitItem( + limit_id=201 + ), + DropLimitItem( + limit_id=301 + ), + DropLimitItem( + limit_id=401 + ) + ], + end_time=1891735200 + ), + DropLimitActivity( + activity_id=38, + begin_time=1624500000, + drop_limit_got_num_list=[ + DropLimitItem( + limit_id=3001 + ), + DropLimitItem( + got_num=3800, + limit_id=3002 + ), + DropLimitItem( + got_num=1500, + limit_id=3003 + ), + DropLimitItem( + got_num=1500, + limit_id=3004 + ), + DropLimitItem( + got_num=1500, + limit_id=3005 + ), + DropLimitItem( + got_num=1500, + limit_id=3006 + ), + DropLimitItem( + got_num=1500, + limit_id=3007 + ), + DropLimitItem( + got_num=1500, + limit_id=3008 + ), + DropLimitItem( + got_num=1500, + limit_id=3010 + ), + DropLimitItem( + got_num=1500, + limit_id=3013 + ), + DropLimitItem( + got_num=1500, + limit_id=3014 + ), + DropLimitItem( + got_num=1500, + limit_id=3015 + ), + DropLimitItem( + got_num=1500, + limit_id=3016 + ), + DropLimitItem( + got_num=1500, + limit_id=3017 + ), + DropLimitItem( + got_num=1500, + limit_id=3019 + ), + DropLimitItem( + got_num=1500, + limit_id=3021 + ), + DropLimitItem( + got_num=1500, + limit_id=3022 + ), + DropLimitItem( + got_num=1500, + limit_id=3026 + ), + DropLimitItem( + got_num=1500, + limit_id=3027 + ), + DropLimitItem( + got_num=1500, + limit_id=3028 + ), + DropLimitItem( + got_num=1500, + limit_id=3031 + ), + DropLimitItem( + got_num=1500, + limit_id=3032 + ), + DropLimitItem( + got_num=1500, + limit_id=3035 + ), + DropLimitItem( + got_num=1500, + limit_id=3036 + ), + DropLimitItem( + got_num=210, + limit_id=3040 + ), + DropLimitItem( + got_num=1500, + limit_id=3042 + ), + DropLimitItem( + got_num=1500, + limit_id=3043 + ), + DropLimitItem( + got_num=430, + limit_id=3045 + ), + DropLimitItem( + got_num=430, + limit_id=3047 + ), + DropLimitItem( + got_num=430, + limit_id=3048 + ), + DropLimitItem( + got_num=1500, + limit_id=3049 + ), + DropLimitItem( + got_num=430, + limit_id=3050 + ), + DropLimitItem( + got_num=465, + limit_id=3051 + ), + DropLimitItem( + got_num=465, + limit_id=3052 + ), + DropLimitItem( + got_num=505, + limit_id=3054 + ), + DropLimitItem( + got_num=505, + limit_id=3055 + ) + ], + end_time=2068056000 + ), + DropLimitActivity( + activity_id=42, + begin_time=1634004000, + drop_limit_got_num_list=[ + DropLimitItem( + limit_id=408 + ) + ], + end_time=1891735200 + ), + DropLimitActivity( + activity_id=45, + begin_time=1644264000, + drop_limit_got_num_list=[ + DropLimitItem( + limit_id=4001 + ) + ], + end_time=1975780800 + ), + DropLimitActivity( + activity_id=47, + begin_time=1668045600, + drop_limit_got_num_list=[ + DropLimitItem( + got_num=360, + limit_id=4003 + ) + ], + end_time=1976558400 + ), + DropLimitActivity( + activity_id=48, + begin_time=1668045600, + drop_limit_got_num_list=[ + DropLimitItem( + limit_id=4006 + ) + ], + end_time=1976558400 + ), + DropLimitActivity( + activity_id=49, + begin_time=1668045600, + drop_limit_got_num_list=[ + DropLimitItem( + got_num=1050, + limit_id=4010 + ), + DropLimitItem( + got_num=600, + limit_id=4012 + ) + ], + end_time=1976558400 + ), + DropLimitActivity( + activity_id=50, + begin_time=1673740800, + end_time=1976558400 + ) + ] + ) diff --git a/game_server/packet/handlers/GetElfDataReq.py b/game_server/packet/handlers/GetElfDataReq.py new file mode 100644 index 0000000..6b061e9 --- /dev/null +++ b/game_server/packet/handlers/GetElfDataReq.py @@ -0,0 +1,29 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetElfDataReq, + GetElfDataRsp, + Elf, + ElfSkill +) + +async def handle(session: Session, msg: GetElfDataReq) -> betterproto.Message: + return GetElfDataRsp( + retcode=0, + elf_list=[ + Elf( + elf_id=elf_id, + level=elf.level, + star=elf.star, + exp=elf.exp, + skill_list=[ + ElfSkill( + skill_id=skill_id, + skill_level=skill.level + ) + for skill_id,skill in elf.skill_list.items() + ] + ) + for elf_id,elf in session.player.elfs.items() + ] + ) diff --git a/game_server/packet/handlers/GetEliteChapterCompensationInfoReq.py b/game_server/packet/handlers/GetEliteChapterCompensationInfoReq.py new file mode 100644 index 0000000..cc90ab5 --- /dev/null +++ b/game_server/packet/handlers/GetEliteChapterCompensationInfoReq.py @@ -0,0 +1,20 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetEliteChapterCompensationInfoReq, + GetEliteChapterCompensationInfoRsp, + EliteChapterCompensationInfo + +) + +async def handle(session: Session, msg: GetEliteChapterCompensationInfoReq) -> betterproto.Message: + return GetEliteChapterCompensationInfoRsp( + retcode=0, + chapter_list=[ + EliteChapterCompensationInfo( + chapter_id=id, + has_taken_compensation=True + ) + for id in range(1,35) + ] + ) diff --git a/game_server/packet/handlers/GetEmojiDataReq.py b/game_server/packet/handlers/GetEmojiDataReq.py new file mode 100644 index 0000000..802848f --- /dev/null +++ b/game_server/packet/handlers/GetEmojiDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetEmojiDataReq, GetEmojiDataRsp + +async def handle(session: Session, msg: GetEmojiDataReq) -> betterproto.Message: + return GetEmojiDataRsp(retcode=0,is_all=True) diff --git a/game_server/packet/handlers/GetEndlessStatusReq.py b/game_server/packet/handlers/GetEndlessStatusReq.py new file mode 100644 index 0000000..bee6f8b --- /dev/null +++ b/game_server/packet/handlers/GetEndlessStatusReq.py @@ -0,0 +1,29 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetEndlessStatusReq, + GetEndlessStatusRsp, + EndlessStatus, + EndlessType +) + +async def handle(session: Session, msg: GetEndlessStatusReq) -> betterproto.Message: + return GetEndlessStatusRsp( + retcode=0, + cur_status=EndlessStatus( + begin_time=1730098800, + can_join_in=True, + close_time=1880308800, + end_time=1880308800, + endless_type=EndlessType.ENDLESS_TYPE_ULTRA.value, + ), + next_status_list=[ + EndlessStatus( + begin_time=1730444400, + close_time=1880308800, + end_time=1880308800, + endless_type=EndlessType.ENDLESS_TYPE_ULTRA.value + ) + ], + selected_endless_type=5 + ) diff --git a/game_server/packet/handlers/GetEquipmentDataReq.py b/game_server/packet/handlers/GetEquipmentDataReq.py new file mode 100644 index 0000000..71ce53f --- /dev/null +++ b/game_server/packet/handlers/GetEquipmentDataReq.py @@ -0,0 +1,50 @@ +import betterproto +from typing import List +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.weapon_data import WeaponData +from game_server.resource.configdb.stigmata_data import StigmataData +from lib.proto import ( + GetEquipmentDataReq, + GetEquipmentDataRsp, + Material, + Weapon, + Stigmata, +) + +async def handle(session: Session, msg: GetEquipmentDataReq) -> betterproto.Message: + return GetEquipmentDataRsp( + retcode=0, + is_all=True, + weapon_list=[ + Weapon( + unique_id=id, + id=weapon.item_id, + level=weapon.level, + exp=weapon.exp, + is_protected=weapon.is_locked, + is_extracted=weapon.is_extracted + ) + for id, weapon in session.player.inventory.weapon_items.items() + ], + stigmata_list=[ + Stigmata( + unique_id=id, + id=stigmata.item_id, + level=stigmata.level, + exp=stigmata.exp, + slot_num=stigmata.slot_num, + refine_value=stigmata.refine_value, + promote_times=stigmata.promote_times, + is_protected=stigmata.is_locked + ) + for id, stigmata in session.player.inventory.stigmata_items.items() + ], + material_list=[ + Material( + id=material.item_id, + num=material.num + ) + for id, material in session.player.inventory.material_items.items() + ] + ) diff --git a/game_server/packet/handlers/GetEquipmentForgeDataReq.py b/game_server/packet/handlers/GetEquipmentForgeDataReq.py new file mode 100644 index 0000000..0021217 --- /dev/null +++ b/game_server/packet/handlers/GetEquipmentForgeDataReq.py @@ -0,0 +1,24 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetEquipmentForgeDataReq, + GetEquipmentForgeDataRsp, + EquipmentForge +) + +async def handle(session: Session, msg: GetEquipmentForgeDataReq) -> betterproto.Message: + return GetEquipmentForgeDataRsp( + retcode=0, + forge_list=[11001,11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11618,11619,11620,11621,11622,11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,12001,12002,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,13001,13002,13003,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13617,13618,13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,14001,14002,14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,14015,14016,14017,14618,14619,14620,14621,14622,14623,14624,14625,14626,14627,14628,14629,14630,12030,14031,11634,12631,13630,14632,11035,11036,11037,11038,12032,13031,14033,12033,13032,14034,11639,11640,11641,11642,11643,11644,11645,11646,11047,12034,13033,14035,11648,11649,12635,13634,14636,12036,13035,14037,12037,13036,14038,11050,12038,13037,14039,12639,13638,14640,12640,13639,14641,12041,13040,14042,12042,13041,14043,11051,11052,11053,13042,12644,13644,14645,11654,12645,13645,14646,11055,11056,11057,11059,21001,21002,21003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064,20065,20066,20067,70001,70002,70003,70004,70005,70006,70007,70008,70009,70010,70011,70012,70013,70014,70015,70016,70017,70018,70025,70026,70027,70028,70029,70030,70031,70032,70033,11804,11805,11806,11807,11808,11809,11810,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821,11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,11835,11836,31001,31002,31003,31004,31005,31006,31007,31008,31009,31010,40034,40035,70019,70020,70021,70022,70023,70024,11060,20068,20069,20070,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,11061,11851,20098,20099,20100,11852,20101,20102,20103,11853,20104,20105,20106,11854,70034,70035,70036,20107,20108,20109,11855,11856,20110,20111,20112,11857,20113,20114,20115,11858,20116,20117,20118,11062,11063,11064,11065,20119,20120,20121,11860,11861,20122,20123,20124,11859,20125,20126,20127,20128,20129,20130,20131,20132,20133,11862,20134,20135,20136,20137,20138,20139,11863,20140,20141,20142,20143,20144,20145,11066,11864,20146,20147,20148,20149,20150,20151,11865,11866,20152,20153,20154,20155,20156,20157,20158,20159,20160], + has_forge_list=[ + EquipmentForge( + forge_id=20042, + times=1 + ), + EquipmentForge( + forge_id=20049, + times=1 + ) + ], + schedule_id=1 + ) diff --git a/game_server/packet/handlers/GetExBossInfoReq.py b/game_server/packet/handlers/GetExBossInfoReq.py new file mode 100644 index 0000000..7e4d9af --- /dev/null +++ b/game_server/packet/handlers/GetExBossInfoReq.py @@ -0,0 +1,29 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetExBossInfoReq, + GetExBossInfoRsp, + ExBossInfo, + ExBossIdInfo +) + +async def handle(session: Session, msg: GetExBossInfoReq) -> betterproto.Message: + return GetExBossInfoRsp( + retcode=0, + boss_info=ExBossInfo( + boss_id_list=[ + ExBossIdInfo( + boss_id=48016 + ), + ExBossIdInfo( + boss_id=41021 + ), + ExBossIdInfo( + boss_id=13021 + ) + ], + cur_max_enter_times=714, + rank_id=104, + schedule_id=10359 + ) + ) diff --git a/game_server/packet/handlers/GetExBossScheduleReq.py b/game_server/packet/handlers/GetExBossScheduleReq.py new file mode 100644 index 0000000..ccee55d --- /dev/null +++ b/game_server/packet/handlers/GetExBossScheduleReq.py @@ -0,0 +1,6 @@ +import betterproto +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) diff --git a/game_server/packet/handlers/GetExtraStoryDataReq.py b/game_server/packet/handlers/GetExtraStoryDataReq.py new file mode 100644 index 0000000..829ae7e --- /dev/null +++ b/game_server/packet/handlers/GetExtraStoryDataReq.py @@ -0,0 +1,14 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetExtraStoryDataReq,GetExtraStoryDataRsp + +# TODO implement extra story +async def handle(session: Session, msg: GetExtraStoryDataReq) -> betterproto.Message: + + byte_array = bytes.fromhex("080012F801086510181A4308E112120C08D1BB02100018E0DD97E806120C08D2BB02100018E0DD97E806120C08D3BB02100018E0DD97E806120C08D4BB02100018E0DD97E806180020E0DD97E8061A4308E212120C08D5BB02100018E0DD97E806120C08D6BB02100018E0DD97E806120C08D7BB02100018E0DD97E806120C08D8BB02100018E0DD97E806180020E0DD97E8061A3508E312120C08D9BB02100018E0DD97E806120C08DABB02100018E0DD97E806120C08DBBB02100018E0DD97E806180020E0DD97E8061A2708E412120C08DCBB02100018E0DD97E806120C08DDBB02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B010866101E1A7B08E512120C08E5BB02100018E0DD97E806120C08E6BB02100018E0DD97E806120C08E7BB02100018E0DD97E806120C08E8BB02100018E0DD97E806120C08E9BB02100018E0DD97E806120C08EABB02100018E0DD97E806120C08EBBB02100018E0DD97E806120C08ECBB02100018E0DD97E806180020E0DD97E806200028E0DD97E806300012A202086710231A4308EB12120C08B5BC02100018E0DD97E806120C08B6BC02100018E0DD97E806120C08B7BC02100018E0DD97E806120C08B8BC02100018E0DD97E806180020E0DD97E8061A4308EC12120C08B9BC02100018E0DD97E806120C08BABC02100018E0DD97E806120C08BBBC02100018E0DD97E806120C08BCBC02100018E0DD97E806180020E0DD97E8061A4308ED12120C08BDBC02100018E0DD97E806120C08BEBC02100018E0DD97E806120C08BFBC02100018E0DD97E806120C08C0BC02100018E0DD97E806180020E0DD97E8061A4308EE12120C08C1BC02100018E0DD97E806120C08C2BC02100018E0DD97E806120C08C3BC02100018E0DD97E806120C08C4BC02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B01086810281A7B08EF12120C08C9BC02100018E0DD97E806120C08CABC02100018E0DD97E806120C08CBBC02100018E0DD97E806120C08CCBC02100018E0DD97E806120C08CDBC02100018E0DD97E806120C08CEBC02100018E0DD97E806120C08CFBC02100018E0DD97E806120C08D0BC02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001298010869102D1A4308F512120C0899BD02100018E0DD97E806120C089ABD02100018E0DD97E806120C089BBD02100018E0DD97E806120C089CBD02100018E0DD97E806180020E0DD97E8061A4308F612120C089DBD02100018E0DD97E806120C089EBD02100018E0DD97E806120C089FBD02100018E0DD97E806120C08A0BD02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001253086A102D1A4308F912120C08A3BD02100018E0DD97E806120C08A4BD02100018E0DD97E806120C08A5BD02100018E0DD97E806120C08A6BD02100018E0DD97E806180020E0DD97E806200028E0DD97E806300012A202086B10321A4308FF12120C08FDBD02100018E0DD97E806120C08FEBD02100018E0DD97E806120C08FFBD02100018E0DD97E806120C0880BE02100018E0DD97E806180020E0DD97E8061A43088013120C0881BE02100018E0DD97E806120C0882BE02100018E0DD97E806120C0883BE02100018E0DD97E806120C0884BE02100018E0DD97E806180020E0DD97E8061A43088113120C0885BE02100018E0DD97E806120C0886BE02100018E0DD97E806120C0887BE02100018E0DD97E806120C0888BE02100018E0DD97E806180020E0DD97E8061A43088213120C0889BE02100018E0DD97E806120C088ABE02100018E0DD97E806120C088BBE02100018E0DD97E806120C088CBE02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000128B01086C10321A7B088913120C08E1BE02100018E0DD97E806120C08E2BE02100018E0DD97E806120C08E3BE02100018E0DD97E806120C08E4BE02100018E0DD97E806120C08E5BE02100018E0DD97E806120C08E6BE02100018E0DD97E806120C08E7BE02100018E0DD97E806120C08E8BE02100018E0DD97E806180020E0DD97E806200028E0DD97E8063000126F086D10371A5F089313120C08C5BF02100018E0DD97E806120C08C6BF02100018E0DD97E806120C08C7BF02100018E0DD97E806120C08C8BF02100018E0DD97E806120C08C9BF02100018E0DD97E806120C08CABF02100018E0DD97E806180020E0DD97E806200028E0DD97E80630001253086E10371A43089D13120C08A9C002100018E0DD97E806120C08AAC002100018E0DD97E806120C08ABC002100018E0DD97E806120C08ACC002100018E0DD97E806180020E0DD97E806200028E0DD97E806300012B401086F103C1A5F08A713120C088DC102100018E0DD97E806120C088EC102100018E0DD97E806120C088FC102100018E0DD97E806120C0890C102100018E0DD97E806120C0891C102100018E0DD97E806120C0892C102100018E0DD97E806180020E0DD97E8061A4308A813120C0893C102100018E0DD97E806120C0894C102100018E0DD97E806120C0895C102100018E0DD97E806120C0896C102100018E0DD97E806180020E0DD97E806200028E0DD97E8063000126F0870103C1A5F08B113120C08F1C102100018E0DD97E806120C08F2C102100018E0DD97E806120C08F3C102100018E0DD97E806120C08F4C102100018E0DD97E806120C08F5C102100018E0DD97E806120C08F6C102100018E0DD97E806180020E0DD97E806200028E0DD97E806300012B3010871101E1A4308BB13120C08D5C202100018E0DD97E806120C08D6C202100018E0DD97E806120C08D7C202100018E0DD97E806120C08D8C202100018E0DD97E806180020E0DD97E8061A3508BC13120C08D9C202100018E0DD97E806120C08DAC202100018E0DD97E806120C08DBC202100018E0DD97E806180020E0DD97E8061A2708BD13120C08DCC202100018E0DD97E806120C08DDC202100018E0DD97E806180020E0DD97E806200028E0DD97E806300012530872103C1A4308C513120C08B9C302100018E0DD97E806120C08BAC302100018E0DD97E806120C08BBC302100018E0DD97E806120C08BCC302100018E0DD97E806180020E0DD97E806200028E0DD97E806300018012801280228032804280528062807300138D1BB0238D2BB0238D3BB0238D4BB0238D5BB0238D6BB0238D7BB0238D8BB0238D9BB0238DABB0238DBBB0238DCBB0238DDBB0238E5BB0238E6BB0238E7BB0238E8BB0238E9BB0238EABB0238EBBB0238ECBB0238B5BC0238B6BC0238B7BC0238B8BC0238B9BC0238BABC0238BBBC0238BCBC0238BDBC0238BEBC0238BFBC0238C0BC0238C1BC0238C2BC0238C3BC0238C4BC0238C9BC0238CABC0238CBBC0238CCBC0238CDBC0238CEBC0238CFBC0238D0BC023899BD02389ABD02389BBD02389CBD02389DBD02389EBD02389FBD0238A0BD0238A3BD0238A4BD0238A5BD0238A6BD0238FDBD0238FEBD0238FFBD023880BE023881BE023882BE023883BE023884BE023885BE023886BE023887BE023888BE023889BE02388ABE02388BBE02388CBE0238E1BE0238E2BE0238E3BE0238E4BE0238E5BE0238E6BE0238E7BE0238E8BE0238C5BF0238C6BF0238C7BF0238C8BF0238C9BF0238CABF0238A9C00238AAC00238ABC00238ACC002388DC102388EC102388FC1023890C1023891C1023892C1023893C1023894C1023895C1023896C10238F1C10238F2C10238F3C10238F4C10238F5C10238F6C10238D5C20238D6C20238D7C20238D8C20238D9C20238DAC20238DBC20238DCC20238DDC20238B9C30238BAC30238BBC30238BCC302") + + ms = memoryview(byte_array) + rsp = GetExtraStoryDataRsp() + rsp.parse(ms.tobytes()) + + return rsp diff --git a/game_server/packet/handlers/GetExtractReforgeActivityReq.py b/game_server/packet/handlers/GetExtractReforgeActivityReq.py new file mode 100644 index 0000000..f7cbf7c --- /dev/null +++ b/game_server/packet/handlers/GetExtractReforgeActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetExtractReforgeActivityReq,GetExtractReforgeActivityRsp + +async def handle(session: Session, msg: GetExtractReforgeActivityReq) -> betterproto.Message: + return GetExtractReforgeActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetFarmActivityDataReq.py b/game_server/packet/handlers/GetFarmActivityDataReq.py new file mode 100644 index 0000000..6af0499 --- /dev/null +++ b/game_server/packet/handlers/GetFarmActivityDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetFarmActivityDataReq, GetFarmActivityDataRsp + +async def handle(session: Session, msg: GetFarmActivityDataReq) -> betterproto.Message: + return GetFarmActivityDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetFinishGuideDataReq.py b/game_server/packet/handlers/GetFinishGuideDataReq.py new file mode 100644 index 0000000..518b878 --- /dev/null +++ b/game_server/packet/handlers/GetFinishGuideDataReq.py @@ -0,0 +1,716 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetFinishGuideDataReq,GetFinishGuideDataRsp + +async def handle(session: Session, msg: GetFinishGuideDataReq) -> betterproto.Message: + return GetFinishGuideDataRsp( + retcode=0, + guide_id_list=[ + 2007, + 5007, + 5008, + 5009, + 2002, + 5648, + 2974, + 5391, + 5392, + 5537, + 1080, + 1274, + 1275, + 1276, + 1299, + 1302, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1550, + 1624, + 1625, + 2003, + 2400, + 2401, + 2402, + 2403, + 2404, + 2405, + 2501, + 2519, + 2521, + 2539, + 2540, + 2600, + 2700, + 2701, + 2703, + 2900, + 2901, + 2902, + 2903, + 2904, + 2920, + 2960, + 2963, + 2968, + 2969, + 2985, + 2986, + 2994, + 3000, + 3001, + 3002, + 3003, + 3005, + 3006, + 3007, + 3008, + 3009, + 3010, + 3011, + 3012, + 3013, + 3014, + 3015, + 3016, + 3017, + 3020, + 3023, + 3024, + 3025, + 4112, + 5006, + 5008, + 5009, + 5010, + 5102, + 5104, + 5105, + 5108, + 5109, + 5110, + 5112, + 5114, + 5202, + 5231, + 5367, + 5368, + 5369, + 5830, + 5831, + 5832, + 5833, + 5851, + 5852, + 5853, + 5854, + 5889, + 6010, + 6015, + 6022, + 6023, + 6024, + 6025, + 6401, + 6402, + 6403, + 6501, + 6521, + 6522, + 6523, + 6551, + 6715, + 6716, + 6835, + 6838, + 6852, + 7056, + 7057, + 7058, + 7060, + 7069, + 7070, + 7100, + 7101, + 7102, + 7103, + 7200, + 7230, + 7301, + 7302, + 7303, + 7304, + 7305, + 7306, + 7307, + 7308, + 7309, + 7310, + 7311, + 7312, + 7313, + 7501, + 7502, + 7503, + 7505, + 7507, + 7508, + 7509, + 7510, + 7511, + 7512, + 7513, + 7514, + 7515, + 7516, + 7517, + 7518, + 7523, + 7528, + 7529, + 7530, + 7531, + 7533, + 7534, + 7535, + 7537, + 7539, + 7540, + 7541, + 7542, + 7543, + 7545, + 7601, + 7602, + 7603, + 7605, + 7615, + 7616, + 7617, + 7618, + 7619, + 7620, + 7621, + 7631, + 7632, + 7637, + 7638, + 7639, + 7640, + 7641, + 7642, + 7643, + 7701, + 7750, + 7751, + 7752, + 7753, + 7834, + 7835, + 7836, + 7837, + 7839, + 7851, + 7852, + 7853, + 7854, + 7855, + 7856, + 7858, + 7859, + 7860, + 7867, + 7868, + 7869, + 7884, + 7885, + 7886, + 7887, + 9101, + 9202, + 9301, + 9302, + 9311, + 9313, + 9483, + 9484, + 9485, + 9488, + 9495, + 9496, + 9497, + 9498, + 9502, + 9505, + 9508, + 9530, + 9550, + 9562, + 9563, + 9564, + 9566, + 9567, + 9576, + 9581, + 9630, + 9631, + 9632, + 9642, + 9644, + 9650, + 9651, + 9702, + 9714, + 9783, + 9784, + 9785, + 9786, + 9787, + 9788, + 9790, + 9793, + 9905, + 9906, + 9993, + 9996, + 9997, + 20041, + 20042, + 20043, + 20044, + 20045, + 20046, + 20047, + 20048, + 20049, + 20050, + 20051, + 20052, + 20053, + 20057, + 20059, + 20060, + 20062, + 20063, + 20064, + 20065, + 20066, + 20067, + 20068, + 20069, + 20070, + 20071, + 20072, + 20073, + 20074, + 20075, + 20076, + 40001, + 40005, + 40006, + 40007, + 40008, + 40009, + 40023, + 40024, + 40025, + 40026, + 40027, + 40028, + 40029, + 40030, + 40031, + 40032, + 40033, + 40034, + 40035, + 40036, + 40037, + 40038, + 40039, + 40040, + 40044, + 40045, + 40046, + 40047, + 40048, + 40055, + 40056, + 40057, + 40058, + 40059, + 40060, + 40061, + 40062, + 40063, + 40064, + 40065, + 40067, + 40068, + 40069, + 40070, + 40071, + 40072, + 40073, + 40084, + 40085, + 40086, + 40087, + 40088, + 40089, + 40115, + 40116, + 40117, + 40118, + 40119, + 40120, + 40121, + 40122, + 40123, + 40124, + 41001, + 42000, + 42001, + 42002, + 42003, + 42004, + 42005, + 42006, + 42007, + 42008, + 42009, + 42010, + 42012, + 42013, + 42014, + 42015, + 42016, + 42017, + 42020, + 42021, + 42024, + 42027, + 42028, + 42047, + 42050, + 42051, + 42052, + 42053, + 42055, + 42066, + 42067, + 42070, + 42085, + 42087, + 42090, + 42114, + 42116, + 42122, + 42124, + 42126, + 42129, + 42141, + 42142, + 42143, + 42144, + 42145, + 42146, + 42156, + 42157, + 42159, + 42161, + 42163, + 42166, + 42180, + 42181, + 42182, + 42184, + 42210, + 42213, + 42214, + 42215, + 42262, + 42263, + 42264, + 42269, + 42274, + 42275, + 42288, + 42309, + 42310, + 42311, + 42312, + 42313, + 42316, + 42318, + 42320, + 42321, + 42325, + 42328, + 42333, + 42338, + 42372, + 42382, + 42383, + 42392, + 42400, + 42403, + 42413, + 42414, + 42419, + 42433, + 42439, + 42440, + 42441, + 42452, + 42453, + 42454, + 42464, + 42465, + 42494, + 42517, + 42519, + 42521, + 42532, + 42533, + 42572, + 42573, + 42745, + 42747, + 42751, + 42775, + 44618, + 44619, + 44620, + 44621, + 44622, + 44747, + 44748, + 44751, + 44754, + 44756, + 44758, + 44761, + 44762, + 45000, + 45001, + 45002, + 45009, + 45010, + 45011, + 45023, + 45024, + 48256, + 48258, + 48272, + 48278, + 48280, + 48283, + 48289, + 48290, + 48291, + 48294, + 48319, + 48347, + 50079, + 50080, + 50081, + 50084, + 50087, + 50102, + 50103, + 50104, + 50105, + 50252, + 50253, + 50254, + 50255, + 50256, + 50262, + 50263, + 50266, + 50271, + 50272, + 50274, + 50276, + 50277, + 50281, + 50282, + 50284, + 50290, + 50291, + 50292, + 50294, + 50299, + 50304, + 50312, + 50316, + 50317, + 50318, + 50322, + 50323, + 50325, + 50332, + 50340, + 50351, + 50352, + 50353, + 50355, + 50357, + 50360, + 50361, + 50362, + 50366, + 50376, + 50377, + 50379, + 50380, + 50382, + 50383, + 50385, + 50386, + 50387, + 50388, + 50396, + 50397, + 50398, + 50399, + 50404, + 50407, + 50408, + 50409, + 50410, + 50411, + 50412, + 50416, + 50417, + 50418, + 50419, + 50422, + 50423, + 50424, + 50425, + 50432, + 50433, + 50436, + 50446, + 50447, + 50449, + 50467, + 50468, + 50469, + 50473, + 50474, + 50475, + 50476, + 50477, + 50478, + 50479, + 50480, + 50486, + 50492, + 50493, + 100002, + 100003, + 100004, + 100005, + 100006, + 100007, + 100078, + 100079, + 100080, + 100082, + 100083, + 100086, + 100087, + 100088, + 100089, + 100091, + 100095, + 100097, + 100098, + 100100, + 100101, + 100102, + 100106, + 100107, + 100108, + 100109, + 100111, + 100113, + 100115, + 100116, + 100117, + 100139, + 100140, + 100142, + 100143, + 100144, + 100145, + 100146, + 100147, + 100148, + 100149, + 100150, + 100151, + 100152, + 100153, + 100154, + 100158, + 100159, + 100160, + 100162, + 100163, + 100356, + 100357, + 100366, + 100367, + 100369, + 100372, + 100373 + ] + ) diff --git a/game_server/packet/handlers/GetFrameDataReq.py b/game_server/packet/handlers/GetFrameDataReq.py new file mode 100644 index 0000000..3655ad7 --- /dev/null +++ b/game_server/packet/handlers/GetFrameDataReq.py @@ -0,0 +1,24 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.frame_data import Frame_Data +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetFrameDataReq, + GetFrameDataRsp, + FrameData +) + + +async def handle(session: Session, msg: GetFrameDataReq) -> betterproto.Message: + return GetFrameDataRsp( + retcode=0, + is_all=True, + frame_list=[ + FrameData( + id=frame.id, + expire_time=get_unix_in_seconds() + 3600 * 24 * 7 + ) + for frame in ResourceManager.instance().values(Frame_Data) + ] + ) diff --git a/game_server/packet/handlers/GetFriendListReq.py b/game_server/packet/handlers/GetFriendListReq.py new file mode 100644 index 0000000..1ffb68d --- /dev/null +++ b/game_server/packet/handlers/GetFriendListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetFriendListReq, GetFriendListRsp + +async def handle(session: Session, msg: GetFriendListReq) -> betterproto.Message: + return GetFriendListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetFriendRemarkListReq.py b/game_server/packet/handlers/GetFriendRemarkListReq.py new file mode 100644 index 0000000..52a3443 --- /dev/null +++ b/game_server/packet/handlers/GetFriendRemarkListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetFriendRemarkListReq, GetFriendRemarkListRsp + +async def handle(session: Session, msg: GetFriendRemarkListReq) -> betterproto.Message: + return GetFriendRemarkListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetGachaDisplayReq.py b/game_server/packet/handlers/GetGachaDisplayReq.py new file mode 100644 index 0000000..b57853c --- /dev/null +++ b/game_server/packet/handlers/GetGachaDisplayReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetGachaDisplayReq, GetGachaDisplayRsp + +async def handle(session: Session, msg: GetGachaDisplayReq) -> betterproto.Message: + return GetGachaDisplayRsp(retcode=0) diff --git a/game_server/packet/handlers/GetGalInteractTriggerEventReq.py b/game_server/packet/handlers/GetGalInteractTriggerEventReq.py new file mode 100644 index 0000000..b5252f6 --- /dev/null +++ b/game_server/packet/handlers/GetGalInteractTriggerEventReq.py @@ -0,0 +1,11 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import GetGalInteractTriggerEventReq,GetGalInteractTriggerEventRsp + +async def handle(session: Session, msg: GetGalInteractTriggerEventReq) -> betterproto.Message: + return GetGalInteractTriggerEventRsp( + retcode=0, + avatar_id=msg.avatar_id, + event_id=0 + ) diff --git a/game_server/packet/handlers/GetGardenScheduleReq.py b/game_server/packet/handlers/GetGardenScheduleReq.py new file mode 100644 index 0000000..c8dff2d --- /dev/null +++ b/game_server/packet/handlers/GetGardenScheduleReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetGardenScheduleReq, GetGardenScheduleRsp + +async def handle(session: Session, msg: GetGardenScheduleReq) -> betterproto.Message: + return GetGardenScheduleRsp(retcode=0) diff --git a/game_server/packet/handlers/GetGobackReq.py b/game_server/packet/handlers/GetGobackReq.py new file mode 100644 index 0000000..0fb37df --- /dev/null +++ b/game_server/packet/handlers/GetGobackReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetGobackReq,GetGobackRsp + +async def handle(session: Session, msg: GetGobackReq) -> betterproto.Message: + return GetGobackRsp(retcode=0) diff --git a/game_server/packet/handlers/GetGodWarReq.py b/game_server/packet/handlers/GetGodWarReq.py new file mode 100644 index 0000000..eedbba6 --- /dev/null +++ b/game_server/packet/handlers/GetGodWarReq.py @@ -0,0 +1,3116 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetGodWarReq, + GetGodWarRsp, + GodWar, + GodWarTale, + GodWarChallenge, + GodWarOverall, + GodWarSite, + GodWarSiteStatus, + GodWarChallengeHistory, + GodWarCurAvatarScheduleInfo, + GodWarTalent, + GodWarChapter, + GodWarRoleInfo, + GodWarRoleRelation +) + +# TODO implement GodWar +async def handle(session: Session, msg: GetGodWarReq) -> betterproto.Message: + return GetGodWarRsp( + retcode=0, + god_war_list=[ + GodWar( + begin_time=1614564000, + end_time=1898539200, + god_war_id=msg.god_war_id, + max_support_point=95, + lobby_id=1, + chapter_list=[ + GodWarChapter( + chapter_id=id + ) + for id in range(1,4) + ], + cur_chapter_id=1, + role_info=[ + GodWarRoleInfo( + main_avatar_id_list=[112,113,205,206,313,315,412,511,512,704,705,713,801,2101,2401,2601,2801,2901,2902,3101,3201,3301,3501,3601,3701,20201,20301,20401,20501,20601,20701,20801,20901], + support_avatar_id_list=[104,204,301,303,314,404,412,506,611,705,712,802,2401,2601,2902,20201,20501], + role_relation_list=[ + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 67, + 68, + 69 + ], + role_id=14 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 9, + 10, + 11, + 12, + 13, + 61, + 62, + 63, + 82, + 83, + 84 + ], + role_id=15 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109 + ], + role_id=16 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 75, + 88, + 89 + ], + role_id=17 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209 + ], + role_id=18 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 72, + 73, + 74, + 87 + ], + role_id=19 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 29, + 30, + 31, + 32, + 33, + 57, + 58, + 59, + 60, + 86 + ], + role_id=20 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 70, + 71, + 85 + ], + role_id=21 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309 + ], + role_id=22 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 41, + 42, + 43, + 44, + 45, + 76, + 77, + 78, + 79, + 80, + 81 + ], + role_id=23 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409 + ], + role_id=24 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 64, + 65, + 66 + ], + role_id=25 + ), + GodWarRoleRelation( + level=11, + reward_has_take_level=11, + reward_has_take_story_list=[ + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 509 + ], + role_id=26 + ), + GodWarRoleRelation( + level=15, + role_id=1200 + ), + GodWarRoleRelation( + level=8, + role_id=1305 + ), + GodWarRoleRelation( + level=8, + role_id=1307 + ), + GodWarRoleRelation( + level=10, + role_id=1311 + ), + GodWarRoleRelation( + level=9, + role_id=1315 + ), + GodWarRoleRelation( + level=9, + role_id=1316 + ), + GodWarRoleRelation( + level=8, + role_id=1318 + ), + GodWarRoleRelation( + level=8, + role_id=1320 + ), + GodWarRoleRelation( + level=8, + role_id=1324 + ), + GodWarRoleRelation( + level=11, + role_id=1325 + ), + GodWarRoleRelation( + level=8, + role_id=1326 + ), + GodWarRoleRelation( + level=8, + role_id=1327 + ), + GodWarRoleRelation( + level=11, + role_id=1330 + ), + GodWarRoleRelation( + level=8, + role_id=1333 + ), + GodWarRoleRelation( + level=8, + role_id=1335 + ), + GodWarRoleRelation( + level=9, + role_id=1336 + ), + GodWarRoleRelation( + level=8, + role_id=1338 + ), + GodWarRoleRelation( + level=8, + role_id=1340 + ), + GodWarRoleRelation( + level=15, + role_id=1342 + ), + GodWarRoleRelation( + level=11, + role_id=1343 + ), + GodWarRoleRelation( + level=15, + role_id=1344 + ), + GodWarRoleRelation( + level=15, + role_id=1345 + ), + GodWarRoleRelation( + level=15, + role_id=1346 + ), + GodWarRoleRelation( + level=15, + role_id=1347 + ), + GodWarRoleRelation( + level=15, + role_id=1348 + ), + GodWarRoleRelation( + level=15, + role_id=1349 + ), + GodWarRoleRelation( + level=8, + role_id=1400 + ), + GodWarRoleRelation( + level=8, + role_id=1500 + ), + GodWarRoleRelation( + level=8, + role_id=1600 + ), + GodWarRoleRelation( + level=10, + role_id=1700 + ), + GodWarRoleRelation( + level=8, + role_id=1800 + ) + ] + ) + ], + tale_list=[ + GodWarTale( + avatar_schedule_id=10001, + begin_time=1614564000, + challenge=GodWarChallenge( + random_seed=766096404, + refresh_teleport_times_limit=3 + ), + cur_avatar_schedule_info=None, + end_time=1909252800, + overall_list=[ + GodWarOverall( + overall_id=100, + overall_val=1001 + ), + GodWarOverall( + overall_id=101, + overall_val=99 + ), + GodWarOverall( + overall_id=102 + ), + GodWarOverall( + overall_id=103, + overall_val=48 + ), + GodWarOverall( + overall_id=104, + overall_val=1 + ), + GodWarOverall( + overall_id=105 + ), + GodWarOverall( + overall_id=106 + ), + GodWarOverall( + overall_id=107 + ), + GodWarOverall( + overall_id=108 + ), + GodWarOverall( + overall_id=200, + overall_val=300 + ), + GodWarOverall( + overall_id=201, + overall_val=300 + ), + GodWarOverall( + overall_id=202, + overall_val=300 + ), + GodWarOverall( + overall_id=203, + overall_val=300 + ), + GodWarOverall( + overall_id=204, + overall_val=300 + ), + GodWarOverall( + overall_id=205, + overall_val=300 + ), + GodWarOverall( + overall_id=206, + overall_val=300 + ), + GodWarOverall( + overall_id=207, + overall_val=300 + ), + GodWarOverall( + overall_id=208, + overall_val=100 + ), + GodWarOverall( + overall_id=209, + overall_val=300 + ), + GodWarOverall( + overall_id=210, + overall_val=300 + ), + GodWarOverall( + overall_id=211, + overall_val=300 + ), + GodWarOverall( + overall_id=212, + overall_val=300 + ), + GodWarOverall( + overall_id=213, + overall_val=300 + ), + GodWarOverall( + overall_id=299, + overall_val=1000000 + ), + GodWarOverall( + overall_id=300 + ), + GodWarOverall( + overall_id=301 + ), + GodWarOverall( + overall_id=302 + ), + GodWarOverall( + overall_id=303 + ), + GodWarOverall( + overall_id=304 + ), + GodWarOverall( + overall_id=305 + ), + GodWarOverall( + overall_id=306 + ), + GodWarOverall( + overall_id=307 + ), + GodWarOverall( + overall_id=308 + ), + GodWarOverall( + overall_id=309 + ), + GodWarOverall( + overall_id=310 + ), + GodWarOverall( + overall_id=311 + ), + GodWarOverall( + overall_id=312 + ), + GodWarOverall( + overall_id=313 + ), + GodWarOverall( + overall_id=400, + overall_val=2 + ), + GodWarOverall( + overall_id=402 + ), + GodWarOverall( + overall_id=403, + overall_val=1 + ), + GodWarOverall( + overall_id=404, + overall_val=1 + ), + GodWarOverall( + overall_id=405, + overall_val=3 + ), + GodWarOverall( + overall_id=406, + overall_val=1 + ), + GodWarOverall( + overall_id=409 + ), + GodWarOverall( + overall_id=410 + ), + GodWarOverall( + overall_id=411 + ), + GodWarOverall( + overall_id=412 + ), + GodWarOverall( + overall_id=413 + ), + GodWarOverall( + overall_id=415 + ), + GodWarOverall( + overall_id=416, + overall_val=1 + ), + GodWarOverall( + overall_id=417 + ), + GodWarOverall( + overall_id=442, + overall_val=1 + ), + GodWarOverall( + overall_id=443, + overall_val=1 + ), + GodWarOverall( + overall_id=444, + overall_val=1 + ), + GodWarOverall( + overall_id=445, + overall_val=1 + ), + GodWarOverall( + overall_id=451 + ), + GodWarOverall( + overall_id=452 + ), + GodWarOverall( + overall_id=453 + ), + GodWarOverall( + overall_id=454 + ), + GodWarOverall( + overall_id=455 + ), + GodWarOverall( + overall_id=456 + ), + GodWarOverall( + overall_id=457 + ), + GodWarOverall( + overall_id=458 + ), + GodWarOverall( + overall_id=459 + ), + GodWarOverall( + overall_id=460 + ), + GodWarOverall( + overall_id=461 + ), + GodWarOverall( + overall_id=462 + ), + GodWarOverall( + overall_id=463 + ), + GodWarOverall( + overall_id=464 + ), + GodWarOverall( + overall_id=500, + overall_val=1 + ), + GodWarOverall( + overall_id=601 + ), + GodWarOverall( + overall_id=602, + overall_val=1 + ), + GodWarOverall( + overall_id=603, + overall_val=1 + ), + GodWarOverall( + overall_id=604, + overall_val=1 + ), + GodWarOverall( + overall_id=605, + overall_val=1 + ), + GodWarOverall( + overall_id=612 + ), + GodWarOverall( + overall_id=613 + ), + GodWarOverall( + overall_id=614 + ), + GodWarOverall( + overall_id=615 + ), + GodWarOverall( + overall_id=616 + ), + GodWarOverall( + overall_id=617 + ), + GodWarOverall( + overall_id=618 + ), + GodWarOverall( + overall_id=619 + ), + GodWarOverall( + overall_id=620 + ), + GodWarOverall( + overall_id=621 + ), + GodWarOverall( + overall_id=622 + ), + GodWarOverall( + overall_id=623 + ), + GodWarOverall( + overall_id=624 + ), + GodWarOverall( + overall_id=705 + ), + GodWarOverall( + overall_id=706 + ), + GodWarOverall( + overall_id=709 + ), + GodWarOverall( + overall_id=710 + ), + GodWarOverall( + overall_id=713 + ), + GodWarOverall( + overall_id=714 + ), + GodWarOverall( + overall_id=716 + ), + GodWarOverall( + overall_id=717 + ), + GodWarOverall( + overall_id=718, + overall_val=973 + ), + GodWarOverall( + overall_id=719 + ), + GodWarOverall( + overall_id=720 + ), + GodWarOverall( + overall_id=721 + ), + GodWarOverall( + overall_id=722 + ), + GodWarOverall( + overall_id=723 + ), + GodWarOverall( + overall_id=724 + ), + GodWarOverall( + overall_id=725 + ), + GodWarOverall( + overall_id=726 + ), + GodWarOverall( + overall_id=727 + ), + GodWarOverall( + overall_id=728 + ), + GodWarOverall( + overall_id=729 + ), + GodWarOverall( + overall_id=730 + ), + GodWarOverall( + overall_id=731 + ), + GodWarOverall( + overall_id=732 + ), + GodWarOverall( + overall_id=733 + ), + GodWarOverall( + overall_id=734 + ), + GodWarOverall( + overall_id=735 + ), + GodWarOverall( + overall_id=800 + ), + GodWarOverall( + overall_id=801 + ), + GodWarOverall( + overall_id=802, + overall_val=1 + ), + GodWarOverall( + overall_id=1000, + overall_val=880 + ), + GodWarOverall( + overall_id=1001 + ), + GodWarOverall( + overall_id=1002 + ), + GodWarOverall( + overall_id=1003 + ), + GodWarOverall( + overall_id=1004 + ), + GodWarOverall( + overall_id=1005 + ), + GodWarOverall( + overall_id=1006 + ), + GodWarOverall( + overall_id=1007 + ), + GodWarOverall( + overall_id=1008 + ), + GodWarOverall( + overall_id=2000, + overall_val=840 + ), + GodWarOverall( + overall_id=2001 + ), + GodWarOverall( + overall_id=2002 + ), + GodWarOverall( + overall_id=2003 + ), + GodWarOverall( + overall_id=2004 + ), + GodWarOverall( + overall_id=2005 + ), + GodWarOverall( + overall_id=2006 + ), + GodWarOverall( + overall_id=2007 + ), + GodWarOverall( + overall_id=2008 + ), + GodWarOverall( + overall_id=4571 + ), + GodWarOverall( + overall_id=4621 + ) + ], + schedule_id=2, + site_list=[ + GodWarSite( + site_id=1600, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1601, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1602, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1603, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1604, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1605, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1606, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1607, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1610, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1611, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1612, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1613, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1620, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1621, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1622, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1623, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1624, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1625, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1626, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1627, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1630, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1631, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1632, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1633, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1634, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1635, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1636, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1637, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1640, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1641, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1642, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1643, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1644, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1645, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1646, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1647, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1650, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1651, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1652, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1653, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1654, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1655, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1656, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1657, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1658, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1659, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1660, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1661, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1662, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1663, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1664, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1665, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1666, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=1667, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ) + ], + tale_id=10 + ), + GodWarTale( + avatar_schedule_id=20000, + begin_time=1614564000, + challenge=GodWarChallenge( + refresh_teleport_times_limit=3 + ), + challenge_history_list=[ + GodWarChallengeHistory( + avatar_id=112, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=113, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=206, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=313, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=315, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=412, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=511, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=512, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=704, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=705, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=713, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=801, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2101, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2401, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2601, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2801, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2901, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=2902, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3101, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3201, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3301, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3501, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3601, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=3701, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20201, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20301, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20401, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20501, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20601, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20701, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20801, + is_challenge_succ=True, + pass_step_level_list=[ + 1, + 2, + 3 + ] + ) + ], + cur_avatar_schedule_info=None, + end_time=1909252800, + overall_list=[ + GodWarOverall( + overall_id=100, + overall_val=1001 + ), + GodWarOverall( + overall_id=101, + overall_val=99 + ), + GodWarOverall( + overall_id=102 + ), + GodWarOverall( + overall_id=103 + ), + GodWarOverall( + overall_id=104, + overall_val=1 + ), + GodWarOverall( + overall_id=105 + ), + GodWarOverall( + overall_id=106 + ), + GodWarOverall( + overall_id=107 + ), + GodWarOverall( + overall_id=108 + ), + GodWarOverall( + overall_id=200, + overall_val=300 + ), + GodWarOverall( + overall_id=201, + overall_val=300 + ), + GodWarOverall( + overall_id=202, + overall_val=300 + ), + GodWarOverall( + overall_id=203, + overall_val=300 + ), + GodWarOverall( + overall_id=204, + overall_val=300 + ), + GodWarOverall( + overall_id=205, + overall_val=300 + ), + GodWarOverall( + overall_id=206, + overall_val=300 + ), + GodWarOverall( + overall_id=207, + overall_val=300 + ), + GodWarOverall( + overall_id=208, + overall_val=100 + ), + GodWarOverall( + overall_id=209, + overall_val=300 + ), + GodWarOverall( + overall_id=210, + overall_val=300 + ), + GodWarOverall( + overall_id=211, + overall_val=300 + ), + GodWarOverall( + overall_id=212, + overall_val=300 + ), + GodWarOverall( + overall_id=213, + overall_val=300 + ), + GodWarOverall( + overall_id=299, + overall_val=1000000 + ), + GodWarOverall( + overall_id=300 + ), + GodWarOverall( + overall_id=301 + ), + GodWarOverall( + overall_id=302 + ), + GodWarOverall( + overall_id=303 + ), + GodWarOverall( + overall_id=304 + ), + GodWarOverall( + overall_id=305 + ), + GodWarOverall( + overall_id=306 + ), + GodWarOverall( + overall_id=307 + ), + GodWarOverall( + overall_id=308 + ), + GodWarOverall( + overall_id=309 + ), + GodWarOverall( + overall_id=310 + ), + GodWarOverall( + overall_id=311 + ), + GodWarOverall( + overall_id=312 + ), + GodWarOverall( + overall_id=313 + ), + GodWarOverall( + overall_id=400 + ), + GodWarOverall( + overall_id=402 + ), + GodWarOverall( + overall_id=403 + ), + GodWarOverall( + overall_id=404 + ), + GodWarOverall( + overall_id=405 + ), + GodWarOverall( + overall_id=406, + overall_val=1 + ), + GodWarOverall( + overall_id=409 + ), + GodWarOverall( + overall_id=410 + ), + GodWarOverall( + overall_id=411 + ), + GodWarOverall( + overall_id=412 + ), + GodWarOverall( + overall_id=413 + ), + GodWarOverall( + overall_id=415 + ), + GodWarOverall( + overall_id=416, + overall_val=1 + ), + GodWarOverall( + overall_id=417 + ), + GodWarOverall( + overall_id=451 + ), + GodWarOverall( + overall_id=452 + ), + GodWarOverall( + overall_id=453 + ), + GodWarOverall( + overall_id=454 + ), + GodWarOverall( + overall_id=455 + ), + GodWarOverall( + overall_id=456 + ), + GodWarOverall( + overall_id=457 + ), + GodWarOverall( + overall_id=458 + ), + GodWarOverall( + overall_id=459 + ), + GodWarOverall( + overall_id=460 + ), + GodWarOverall( + overall_id=461 + ), + GodWarOverall( + overall_id=462 + ), + GodWarOverall( + overall_id=463 + ), + GodWarOverall( + overall_id=464 + ), + GodWarOverall( + overall_id=500, + overall_val=1 + ), + GodWarOverall( + overall_id=601 + ), + GodWarOverall( + overall_id=602, + overall_val=1 + ), + GodWarOverall( + overall_id=603, + overall_val=1 + ), + GodWarOverall( + overall_id=604, + overall_val=1 + ), + GodWarOverall( + overall_id=605, + overall_val=1 + ), + GodWarOverall( + overall_id=610, + overall_val=1 + ), + GodWarOverall( + overall_id=612 + ), + GodWarOverall( + overall_id=613 + ), + GodWarOverall( + overall_id=614 + ), + GodWarOverall( + overall_id=615 + ), + GodWarOverall( + overall_id=616 + ), + GodWarOverall( + overall_id=617 + ), + GodWarOverall( + overall_id=618 + ), + GodWarOverall( + overall_id=619 + ), + GodWarOverall( + overall_id=620 + ), + GodWarOverall( + overall_id=621 + ), + GodWarOverall( + overall_id=622 + ), + GodWarOverall( + overall_id=623 + ), + GodWarOverall( + overall_id=624 + ), + GodWarOverall( + overall_id=705 + ), + GodWarOverall( + overall_id=706 + ), + GodWarOverall( + overall_id=709 + ), + GodWarOverall( + overall_id=710 + ), + GodWarOverall( + overall_id=713 + ), + GodWarOverall( + overall_id=714 + ), + GodWarOverall( + overall_id=716 + ), + GodWarOverall( + overall_id=717 + ), + GodWarOverall( + overall_id=718 + ), + GodWarOverall( + overall_id=719 + ), + GodWarOverall( + overall_id=720 + ), + GodWarOverall( + overall_id=721 + ), + GodWarOverall( + overall_id=722 + ), + GodWarOverall( + overall_id=723 + ), + GodWarOverall( + overall_id=724 + ), + GodWarOverall( + overall_id=725 + ), + GodWarOverall( + overall_id=726 + ), + GodWarOverall( + overall_id=727 + ), + GodWarOverall( + overall_id=728 + ), + GodWarOverall( + overall_id=729 + ), + GodWarOverall( + overall_id=730 + ), + GodWarOverall( + overall_id=731 + ), + GodWarOverall( + overall_id=732 + ), + GodWarOverall( + overall_id=733 + ), + GodWarOverall( + overall_id=734 + ), + GodWarOverall( + overall_id=735 + ), + GodWarOverall( + overall_id=800 + ), + GodWarOverall( + overall_id=801 + ), + GodWarOverall( + overall_id=802, + overall_val=1 + ), + GodWarOverall( + overall_id=1000, + overall_val=880 + ), + GodWarOverall( + overall_id=1001 + ), + GodWarOverall( + overall_id=1002 + ), + GodWarOverall( + overall_id=1003 + ), + GodWarOverall( + overall_id=1004 + ), + GodWarOverall( + overall_id=1005 + ), + GodWarOverall( + overall_id=1006 + ), + GodWarOverall( + overall_id=1007 + ), + GodWarOverall( + overall_id=1008 + ), + GodWarOverall( + overall_id=2000, + overall_val=840 + ), + GodWarOverall( + overall_id=2001 + ), + GodWarOverall( + overall_id=2002 + ), + GodWarOverall( + overall_id=2003 + ), + GodWarOverall( + overall_id=2004 + ), + GodWarOverall( + overall_id=2005 + ), + GodWarOverall( + overall_id=2006 + ), + GodWarOverall( + overall_id=2007 + ), + GodWarOverall( + overall_id=2008 + ), + GodWarOverall( + overall_id=4571 + ), + GodWarOverall( + overall_id=4621 + ), + GodWarOverall( + overall_id=999901 + ) + ], + schedule_id=5, + site_list=[ + GodWarSite( + site_id=5000, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5001, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5002, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5003, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5004, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5005, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5006, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5007, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5100, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5101, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5102, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5103, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5104, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5105, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5106, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5107, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5108, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5109, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5110, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5111, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5112, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5113, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5114, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5115, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5116, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5117, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5118, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5119, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5200, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5201, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5202, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5203, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5204, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5205, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5206, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5207, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5208, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5209, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5210, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5211, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5212, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5213, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5214, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5215, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5216, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5217, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5218, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5219, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5220, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5221, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5222, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5223, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5224, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5225, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5226, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5227, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5228, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5229, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5230, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5231, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5232, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5233, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5234, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5235, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5236, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5237, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5300, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5301, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5302, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5303, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5304, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5305, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5306, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5307, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5308, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5309, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5310, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5311, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5312, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5313, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5314, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5315, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5316, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5317, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5318, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5319, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5320, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5321, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5322, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5323, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5324, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5325, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5326, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5327, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5328, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5329, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5330, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5331, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5332, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5333, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=5334, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ) + ], + tale_id=20 + ), + GodWarTale( + avatar_schedule_id=30141, + avatar_schedule_max_score=24200, + begin_time=1614564000, + challenge=GodWarChallenge( + random_seed=78966892, + refresh_teleport_times_limit=3 + ), + challenge_history_list=[ + GodWarChallengeHistory( + avatar_id=206, + is_challenge_succ=True, + max_challenge_score=8800, + max_punish_level=300, + pass_step_level_list=[ + 1 + ] + ), + GodWarChallengeHistory( + avatar_id=313, + is_challenge_succ=True, + max_challenge_score=13200, + max_punish_level=301, + pass_step_level_list=[ + 1, + 2 + ] + ), + GodWarChallengeHistory( + avatar_id=512, + is_challenge_succ=True, + max_challenge_score=13200, + max_punish_level=301, + pass_step_level_list=[ + 2 + ] + ), + GodWarChallengeHistory( + avatar_id=3101, + is_challenge_succ=True, + max_challenge_score=15400, + max_punish_level=302, + pass_step_level_list=[ + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20201, + is_challenge_succ=True, + max_challenge_score=24200, + max_punish_level=306, + pass_step_level_list=[ + 1, + 2, + 3, + 4, + 6, + 7 + ] + ), + GodWarChallengeHistory( + avatar_id=20401, + is_challenge_succ=True, + max_challenge_score=14000, + max_punish_level=302, + pass_step_level_list=[ + 1, + 3 + ] + ), + GodWarChallengeHistory( + avatar_id=20501, + is_challenge_succ=True, + max_challenge_score=13200, + max_punish_level=301, + pass_step_level_list=[ + 2 + ] + ), + GodWarChallengeHistory( + avatar_id=20601, + is_challenge_succ=True, + max_challenge_score=24200, + max_punish_level=306, + pass_step_level_list=[ + 3, + 6, + 7 + ] + ), + GodWarChallengeHistory( + avatar_id=20701, + is_challenge_succ=True, + max_challenge_score=24200, + max_punish_level=306, + pass_step_level_list=[ + 2, + 5, + 6, + 7 + ] + ), + GodWarChallengeHistory( + avatar_id=20801, + is_challenge_succ=True, + max_challenge_score=24200, + max_punish_level=306, + pass_step_level_list=[ + 4, + 7 + ] + ) + ], + cur_avatar_schedule_info=GodWarCurAvatarScheduleInfo( + last_schedule_max_punish_level=306, + max_challenge_score=24200, + max_punish_level=306 + ), + end_time=1909252800, + overall_list=[ + GodWarOverall( + overall_id=100, + overall_val=1001 + ), + GodWarOverall( + overall_id=101, + overall_val=99 + ), + GodWarOverall( + overall_id=102 + ), + GodWarOverall( + overall_id=103, + overall_val=1258 + ), + GodWarOverall( + overall_id=104, + overall_val=1 + ), + GodWarOverall( + overall_id=105 + ), + GodWarOverall( + overall_id=106 + ), + GodWarOverall( + overall_id=107 + ), + GodWarOverall( + overall_id=108 + ), + GodWarOverall( + overall_id=200, + overall_val=300 + ), + GodWarOverall( + overall_id=201, + overall_val=300 + ), + GodWarOverall( + overall_id=202, + overall_val=300 + ), + GodWarOverall( + overall_id=203, + overall_val=300 + ), + GodWarOverall( + overall_id=204, + overall_val=300 + ), + GodWarOverall( + overall_id=205, + overall_val=300 + ), + GodWarOverall( + overall_id=206, + overall_val=300 + ), + GodWarOverall( + overall_id=207, + overall_val=300 + ), + GodWarOverall( + overall_id=208, + overall_val=100 + ), + GodWarOverall( + overall_id=209, + overall_val=300 + ), + GodWarOverall( + overall_id=210, + overall_val=300 + ), + GodWarOverall( + overall_id=211, + overall_val=300 + ), + GodWarOverall( + overall_id=212, + overall_val=300 + ), + GodWarOverall( + overall_id=213, + overall_val=300 + ), + GodWarOverall( + overall_id=299, + overall_val=1000000 + ), + GodWarOverall( + overall_id=300 + ), + GodWarOverall( + overall_id=301 + ), + GodWarOverall( + overall_id=302 + ), + GodWarOverall( + overall_id=303 + ), + GodWarOverall( + overall_id=304 + ), + GodWarOverall( + overall_id=305 + ), + GodWarOverall( + overall_id=306 + ), + GodWarOverall( + overall_id=307 + ), + GodWarOverall( + overall_id=308 + ), + GodWarOverall( + overall_id=309 + ), + GodWarOverall( + overall_id=310 + ), + GodWarOverall( + overall_id=311 + ), + GodWarOverall( + overall_id=312 + ), + GodWarOverall( + overall_id=313 + ), + GodWarOverall( + overall_id=400, + overall_val=1 + ), + GodWarOverall( + overall_id=402 + ), + GodWarOverall( + overall_id=403 + ), + GodWarOverall( + overall_id=404 + ), + GodWarOverall( + overall_id=405 + ), + GodWarOverall( + overall_id=406, + overall_val=1 + ), + GodWarOverall( + overall_id=409 + ), + GodWarOverall( + overall_id=410 + ), + GodWarOverall( + overall_id=411 + ), + GodWarOverall( + overall_id=412 + ), + GodWarOverall( + overall_id=413 + ), + GodWarOverall( + overall_id=415 + ), + GodWarOverall( + overall_id=416, + overall_val=1 + ), + GodWarOverall( + overall_id=417 + ), + GodWarOverall( + overall_id=451 + ), + GodWarOverall( + overall_id=452 + ), + GodWarOverall( + overall_id=453 + ), + GodWarOverall( + overall_id=454 + ), + GodWarOverall( + overall_id=455 + ), + GodWarOverall( + overall_id=456 + ), + GodWarOverall( + overall_id=457 + ), + GodWarOverall( + overall_id=458 + ), + GodWarOverall( + overall_id=459 + ), + GodWarOverall( + overall_id=460 + ), + GodWarOverall( + overall_id=461 + ), + GodWarOverall( + overall_id=462 + ), + GodWarOverall( + overall_id=463 + ), + GodWarOverall( + overall_id=464 + ), + GodWarOverall( + overall_id=500, + overall_val=1 + ), + GodWarOverall( + overall_id=601 + ), + GodWarOverall( + overall_id=602, + overall_val=1 + ), + GodWarOverall( + overall_id=603, + overall_val=1 + ), + GodWarOverall( + overall_id=604, + overall_val=1 + ), + GodWarOverall( + overall_id=605, + overall_val=1 + ), + GodWarOverall( + overall_id=611 + ), + GodWarOverall( + overall_id=612 + ), + GodWarOverall( + overall_id=613 + ), + GodWarOverall( + overall_id=614 + ), + GodWarOverall( + overall_id=615 + ), + GodWarOverall( + overall_id=616 + ), + GodWarOverall( + overall_id=617 + ), + GodWarOverall( + overall_id=618 + ), + GodWarOverall( + overall_id=619 + ), + GodWarOverall( + overall_id=620 + ), + GodWarOverall( + overall_id=621 + ), + GodWarOverall( + overall_id=622 + ), + GodWarOverall( + overall_id=623 + ), + GodWarOverall( + overall_id=624 + ), + GodWarOverall( + overall_id=705 + ), + GodWarOverall( + overall_id=706 + ), + GodWarOverall( + overall_id=709 + ), + GodWarOverall( + overall_id=710 + ), + GodWarOverall( + overall_id=713 + ), + GodWarOverall( + overall_id=714 + ), + GodWarOverall( + overall_id=716 + ), + GodWarOverall( + overall_id=717 + ), + GodWarOverall( + overall_id=718 + ), + GodWarOverall( + overall_id=719 + ), + GodWarOverall( + overall_id=720 + ), + GodWarOverall( + overall_id=721 + ), + GodWarOverall( + overall_id=722 + ), + GodWarOverall( + overall_id=723 + ), + GodWarOverall( + overall_id=724 + ), + GodWarOverall( + overall_id=725 + ), + GodWarOverall( + overall_id=726 + ), + GodWarOverall( + overall_id=727 + ), + GodWarOverall( + overall_id=728 + ), + GodWarOverall( + overall_id=729 + ), + GodWarOverall( + overall_id=730 + ), + GodWarOverall( + overall_id=731 + ), + GodWarOverall( + overall_id=732 + ), + GodWarOverall( + overall_id=733 + ), + GodWarOverall( + overall_id=734 + ), + GodWarOverall( + overall_id=735 + ), + GodWarOverall( + overall_id=800 + ), + GodWarOverall( + overall_id=801 + ), + GodWarOverall( + overall_id=802, + overall_val=1 + ), + GodWarOverall( + overall_id=1000, + overall_val=880 + ), + GodWarOverall( + overall_id=1001 + ), + GodWarOverall( + overall_id=1002 + ), + GodWarOverall( + overall_id=1003 + ), + GodWarOverall( + overall_id=1004 + ), + GodWarOverall( + overall_id=1005 + ), + GodWarOverall( + overall_id=1006 + ), + GodWarOverall( + overall_id=1007 + ), + GodWarOverall( + overall_id=1008 + ), + GodWarOverall( + overall_id=2000, + overall_val=840 + ), + GodWarOverall( + overall_id=2001 + ), + GodWarOverall( + overall_id=2002 + ), + GodWarOverall( + overall_id=2003 + ), + GodWarOverall( + overall_id=2004 + ), + GodWarOverall( + overall_id=2005 + ), + GodWarOverall( + overall_id=2006 + ), + GodWarOverall( + overall_id=2007 + ), + GodWarOverall( + overall_id=2008 + ), + GodWarOverall( + overall_id=4571 + ), + GodWarOverall( + overall_id=4621 + ) + ], + schedule_id=6, + site_list=[ + GodWarSite( + site_id=6001, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6002, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6003, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6004, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6005, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6006, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6007, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6008, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6009, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6010, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6011, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6012, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6013, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6014, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6015, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6016, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6017, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6018, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ), + GodWarSite( + site_id=6101, + site_status=GodWarSiteStatus.GOD_WAR_SITE_STATUS_UNLOCKED.value + ) + ], + tale_id=30 + ), + GodWarTale( + begin_time=1614564000, + challenge=GodWarChallenge( + gain_coin_num=7464, + random_seed=647325868, + refresh_teleport_times_limit=3 + ), + cur_avatar_schedule_info=None, + end_time=1909252800, + overall_list=[ + GodWarOverall( + overall_id=400, + overall_val=2 + ), + GodWarOverall( + overall_id=401, + overall_val=1 + ), + GodWarOverall( + overall_id=407 + ), + GodWarOverall( + overall_id=408, + overall_val=2 + ), + GodWarOverall( + overall_id=426, + overall_val=1 + ), + GodWarOverall( + overall_id=427 + ), + GodWarOverall( + overall_id=441 + ), + GodWarOverall( + overall_id=442 + ), + GodWarOverall( + overall_id=443 + ), + GodWarOverall( + overall_id=444 + ), + GodWarOverall( + overall_id=445 + ), + GodWarOverall( + overall_id=464, + overall_val=1 + ), + GodWarOverall( + overall_id=600 + ), + GodWarOverall( + overall_id=1221, + overall_val=1 + ), + GodWarOverall( + overall_id=1261, + overall_val=1 + ), + GodWarOverall( + overall_id=2211, + overall_val=1 + ), + GodWarOverall( + overall_id=2281, + overall_val=1 + ), + GodWarOverall( + overall_id=2311 + ), + GodWarOverall( + overall_id=3261, + overall_val=1 + ), + GodWarOverall( + overall_id=3271, + overall_val=1 + ), + GodWarOverall( + overall_id=3311, + overall_val=1 + ), + GodWarOverall( + overall_id=3331, + overall_val=1 + ), + GodWarOverall( + overall_id=3351, + overall_val=1 + ), + GodWarOverall( + overall_id=7201, + overall_val=1 + ), + GodWarOverall( + overall_id=8221, + overall_val=1 + ), + GodWarOverall( + overall_id=8241, + overall_val=1 + ), + GodWarOverall( + overall_id=8261, + overall_val=1 + ), + GodWarOverall( + overall_id=8281, + overall_val=1 + ), + GodWarOverall( + overall_id=999901 + ) + ], + schedule_id=7, + tale_id=100 + ) + ], + talent_list=[ + GodWarTalent( + talent_id=111, + talent_level=3 + ), + GodWarTalent( + talent_id=112, + talent_level=3 + ), + GodWarTalent( + talent_id=113, + talent_level=3 + ), + GodWarTalent( + talent_id=121, + talent_level=3 + ), + GodWarTalent( + talent_id=122, + talent_level=3 + ), + GodWarTalent( + talent_id=123, + talent_level=3 + ), + GodWarTalent( + talent_id=131, + talent_level=3 + ), + GodWarTalent( + talent_id=132, + talent_level=3 + ), + GodWarTalent( + talent_id=133, + talent_level=3 + ), + GodWarTalent( + talent_id=211, + talent_level=3 + ), + GodWarTalent( + talent_id=212, + talent_level=3 + ), + GodWarTalent( + talent_id=221, + talent_level=3 + ), + GodWarTalent( + talent_id=222, + talent_level=3 + ), + GodWarTalent( + talent_id=231, + talent_level=1 + ), + GodWarTalent( + talent_id=232, + talent_level=1 + ), + GodWarTalent( + talent_id=311, + talent_level=3 + ), + GodWarTalent( + talent_id=312, + talent_level=3 + ), + GodWarTalent( + talent_id=313, + talent_level=3 + ), + GodWarTalent( + talent_id=321, + talent_level=3 + ), + GodWarTalent( + talent_id=322, + talent_level=3 + ), + GodWarTalent( + talent_id=323, + talent_level=3 + ), + GodWarTalent( + talent_id=331, + talent_level=3 + ), + GodWarTalent( + talent_id=332, + talent_level=3 + ), + GodWarTalent( + talent_id=333, + talent_level=3 + ), + GodWarTalent( + talent_id=411, + talent_level=3 + ), + GodWarTalent( + talent_id=412, + talent_level=3 + ), + GodWarTalent( + talent_id=413, + talent_level=3 + ), + GodWarTalent( + talent_id=421, + talent_level=3 + ), + GodWarTalent( + talent_id=422, + talent_level=3 + ), + GodWarTalent( + talent_id=423, + talent_level=3 + ), + GodWarTalent( + talent_id=431, + talent_level=3 + ), + GodWarTalent( + talent_id=432, + talent_level=3 + ), + GodWarTalent( + talent_id=433, + talent_level=3 + ) + ] + ) + ] + ) diff --git a/game_server/packet/handlers/GetGrandKeyReq.py b/game_server/packet/handlers/GetGrandKeyReq.py new file mode 100644 index 0000000..97b77e7 --- /dev/null +++ b/game_server/packet/handlers/GetGrandKeyReq.py @@ -0,0 +1,82 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetGrandKeyReq, + GetGrandKeyRsp, + GrandKey, + GrandKeySkill +) + +async def handle(session: Session, msg: GetGrandKeyReq) -> betterproto.Message: + return GetGrandKeyRsp( + retcode=0, + is_all=True, + key_list=[ + GrandKey( + activate_level=10, + breach_level=1, + end_time=1975780800, + id=203, + level=10, + skill=GrandKeySkill( + skill_id=20310 + ), + unlock_level=50 + ), + GrandKey( + id=208, + level=1, + unlock_level=65 + ), + GrandKey( + activate_level=10, + breach_level=1, + end_time=1975780800, + id=205, + level=10, + skill=GrandKeySkill( + skill_id=20509 + ), + unlock_level=65 + ), + GrandKey( + activate_level=10, + breach_level=2, + end_time=1975780800, + id=202, + level=10, + skill=GrandKeySkill( + skill_id=20209 + ), + unlock_level=50 + ), + GrandKey( + breach_level=1, + id=207, + level=1, + unlock_level=65 + ), + GrandKey( + breach_level=1, + id=204, + level=1, + unlock_level=65 + ), + GrandKey( + activate_level=10, + end_time=1975780800, + id=201, + level=10, + skill=GrandKeySkill( + skill_id=20109 + ), + unlock_level=50 + ), + GrandKey( + breach_level=1, + id=206, + level=1, + unlock_level=35 + ) + ] + ) diff --git a/game_server/packet/handlers/GetGratuityActivityReq.py b/game_server/packet/handlers/GetGratuityActivityReq.py new file mode 100644 index 0000000..ce3dd7d --- /dev/null +++ b/game_server/packet/handlers/GetGratuityActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetGratuityActivityReq,GetGratuityActivityRsp + +async def handle(session: Session, msg: GetGratuityActivityReq) -> betterproto.Message: + return GetGratuityActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetHasGotFurnitureIdListReq.py b/game_server/packet/handlers/GetHasGotFurnitureIdListReq.py new file mode 100644 index 0000000..03ec47e --- /dev/null +++ b/game_server/packet/handlers/GetHasGotFurnitureIdListReq.py @@ -0,0 +1,10 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetHasGotFurnitureIdListReq, GetHasGotFurnitureIdListRsp + +async def handle(session: Session, msg: GetHasGotFurnitureIdListReq) -> betterproto.Message: + return GetHasGotFurnitureIdListRsp( + retcode=0, + furniture_id_list=[140001,140002,140003,140010,140012,140013,140015,140016,140201,140202,140213,140215,140216,140601,140603,140801,140802,140803,140804,140805,140806,140807,140808,140809,140810,140811,140812,140813,140814,140815,140816,140817,140818,140819,140820,140821,140822,140823,140824,140825,141501,141601,141606,141610,141615,141619,141620,141621,141622,141701,141702,141703,141704,141709,141713,141801,141802,141803,141804,141805,141806,141807,141808,141809,141810,141811,141812,141814,141815,146120,146620], + has_unlock_furniture_id_list=[140601,140603,140801,140802,140803,140804,140805,140806,140807,140808,140809,140810,140811,140812,140813,140814,140815,140816,140817,140818,140819,140820,140821,140822,140823,140824,140825,141501,141701,141702,141703,141704,141801,141807,141808,141809,141810,141811,141812,141815] + ) diff --git a/game_server/packet/handlers/GetHasGotItemIdListReq.py b/game_server/packet/handlers/GetHasGotItemIdListReq.py new file mode 100644 index 0000000..c0512f5 --- /dev/null +++ b/game_server/packet/handlers/GetHasGotItemIdListReq.py @@ -0,0 +1,349 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetHasGotItemIdListReq, GetHasGotItemIdListRsp + +async def handle(session: Session, msg: GetHasGotItemIdListReq) -> betterproto.Message: + return GetHasGotItemIdListRsp( + retcode=0, + item_id_list=[4,5,6,100,801,802,803,810,811,812,813,821,827,828,829,830,832,833,834,835,837,838,842,843,844,845,846,847,848,849,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,896,897,898,899,900,902,913,915,921,926,930,934,944,945,949,950,951,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,998,1001,1002,1003,1006,1009,1102,1103,1109,1110,1112,1113,1114,1115,1301,1302,1400,1401,1402,2008,3000,3005,3006,3007,3008,3101,3104,3107,3110,3112,3122,3129,3130,3134,3322,3500,3508,3509,3511,3512,4001,4002,4003,4004,4013,5005,5006,5007,5008,5400,5565,5569,6001,6002,6003,6004,6506,6515,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6551,6561,6562,6563,6564,6565,6566,6567,7022,7023,7024,7025,7026,7027,7032,7033,7034,7084,7091,7104,7106,7113,7114,7115,7156,7159,7160,7161,7215,7244,7280,7281,7287,7335,7359,7360,7411,7421,7422,7431,7432,7441,7442,7471,7511,7512,7521,7522,7531,7541,7551,7611,7621,7622,7631,7641,7651,7711,7721,7722,7731,7741,7751,7838,7839,7882,7887,7895,7896,7944,7948,7949,7950,8001,8003,8004,8008,8009,8101,8211,8212,8213,8214,8216,8217,8218,8305,8309,8310,8402,8403,8601,8602,8640,8641,9001,9002,9003,9004,9010,9101,9107,9113,9114,9117,9124,9125,9128,9129,9134,9135,9136,9137,9139,9142,9502,9503,9507,9511,9516,9520,9521,9523,9529,9533,9543,9545,9547,10101,10102,10103,10104,10105,10106,10111,10112,10113,10114,10201,10202,10203,10204,10205,10211,10212,10213,10214,10301,10302,10303,10304,10311,10312,10313,10314,10315,10317,10401,10402,10403,10404,10411,10412,10421,10422,10501,10502,10503,10504,10506,10507,10511,10601,10603,10604,10611,10612,10702,10703,10704,10705,10706,10711,10712,10714,10801,10802,10803,10901,12101,12201,12202,12401,12501,12601,12701,12801,12901,12902,13101,13201,13301,13401,13501,13601,13701,20001,20004,20007,20010,20013,20016,20017,20018,20019,20020,20021,20022,20029,20033,20041,20042,20043,20044,20047,20050,20053,20054,20055,20056,20057,20058,20059,20062,20073,20074,20075,20076,20081,20084,20087,20090,20093,20094,20095,20096,20099,20102,20109,20113,20114,20115,20116,20121,20124,20127,20130,20133,20134,20136,20137,20138,20139,20142,20153,20154,20155,20156,20161,20168,20171,20172,20173,20174,20184,20185,20186,20187,20197,20198,20199,20200,20206,20213,20221,20227,20228,20229,20238,20242,20243,20248,20249,20250,20277,20285,20299,20306,20313,20316,20319,20329,20333,20334,20335,20336,20339,20388,20392,20406,20407,20408,20409,20430,20433,20436,20439,20442,20445,20448,20449,20450,20454,20455,20456,20457,20460,20464,20475,20476,20477,20478,20479,20480,20481,20482,20487,20488,20530,20531,20532,20533,20542,20546,20547,20548,20549,20550,20566,20570,20590,20591,20592,20593,20594,20611,20612,20613,20631,20640,20641,20642,20643,20644,20661,20671,20672,20673,20691,20692,20693,20694,20695,20696,20700,20701,20702,20703,20704,20711,20721,20722,20723,20731,20732,20733,20734,20751,20761,20762,20763,20764,20765,20766,20811,20821,20841,20871,20872,20873,20874,20881,20891,20901,20902,20903,20911,20921,20922,20923,20924,20951,20971,20972,20973,20974,21001,21002,21021,21031,21041,21051,21052,21053,21054,21071,21081,21091,21092,21093,21094,21101,21111,21121,21131,21132,21133,21134,21141,21151,21161,21162,21163,21164,21171,21172,21173,21191,21211,21212,21213,21214,21231,21241,21251,21252,21253,21254,21261,21271,21281,21291,21292,21293,21294,21331,21341,21342,21343,21344,21351,21361,21381,21382,21383,21384,21391,21392,21393,21394,21401,21421,21422,21423,21424,21431,21432,21433,21434,21451,21452,21453,21454,21461,21462,21463,21464,21471,21481,21491,21492,21493,21494,21501,21502,21503,21504,21521,21522,21523,21524,21541,21551,21552,21553,21554,21561,21562,21563,21581,21582,21583,21584,21591,21611,21612,21613,21614,21621,21622,21623,21624,21631,21632,21633,21634,21641,21642,21643,21644,21651,21661,21662,21663,21664,21671,21672,21673,21674,21681,21682,21683,21684,21691,21692,21693,21694,21701,21702,21703,21704,21711,21712,21713,21714,21721,21731,21732,21733,21734,21741,21742,21743,21744,21791,21792,21793,21794,21811,21812,21813,21814,21841,21842,21843,21844,24021,24022,24023,24024,24041,24101,24111,24112,24113,24114,24121,24122,24123,24124,24151,24152,24153,24154,24161,24162,24163,24164,24171,24172,24173,24174,24181,24182,24183,24184,24191,24192,24193,24194,24201,24202,24203,24204,24211,24212,24213,24214,24251,24252,24253,24254,24261,24262,24263,24264,24271,24272,24273,24274,24281,24282,24283,24284,24321,24351,24352,24353,24354,24355,24356,24357,24358,24371,24372,24373,24374,24381,24411,24412,24413,24414,24421,24431,24432,24441,24451,24452,24453,24454,24461,24462,24463,24464,24471,24472,24473,24474,24501,24502,24503,24504,24511,24512,24513,24514,24551,24552,25001,25011,25012,25021,25031,25032,25041,25051,25052,25061,25071,25072,25081,25091,25092,25101,25111,25112,25113,25114,25115,25116,25121,25131,25132,25141,25151,25152,28103,28104,28105,28106,28107,28108,28115,28116,28131,28132,28151,28152,29001,30001,30004,30007,30010,30013,30016,30019,30020,30021,30022,30023,30024,30025,30028,30031,30032,30033,30042,30043,30044,30045,30054,30057,30060,30063,30066,30069,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30084,30099,30100,30101,30102,30107,30110,30113,30116,30119,30122,30125,30128,30129,30130,30131,30132,30133,30134,30137,30148,30172,30173,30174,30198,30199,30200,30201,30210,30211,30212,30213,30214,30215,30216,30217,30227,30228,30229,30230,30231,30235,30243,30244,30245,30246,30290,30291,30292,30293,30294,30295,30296,30297,30298,30307,30308,30309,30310,30344,30347,30350,30359,30360,30361,30362,30371,30374,30375,30376,30377,30380,30381,30382,30383,30384,30385,30386,30387,30388,30390,30431,30432,30433,30497,30498,30499,30500,30505,30506,30507,30508,30518,30521,30524,30525,30526,30530,30552,30553,30554,30555,30572,30576,30577,30578,30579,30584,30587,30590,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30609,30613,30614,30615,30616,30668,30669,30670,30699,30700,30701,30702,30703,30704,30705,30706,30779,30801,30802,30803,30804,30821,30822,30823,30824,30861,30862,30863,30864,30871,30872,30873,30874,30891,30901,30911,30912,30913,30914,30921,31011,31012,31013,31014,31021,31022,31023,31024,31031,31032,31033,31034,31161,31162,31163,31164,31171,31172,31173,31174,31181,31182,31183,31184,31191,31192,31193,31201,31211,31231,31261,31271,31281,31321,31322,31323,31331,31332,31333,31341,31342,31343,31361,31411,31412,31413,31414,31421,31422,31423,31424,31431,31432,31471,31472,31473,31474,31481,31482,31483,31484,31491,31492,31493,31494,31541,31542,31543,31544,31561,31591,31651,31711,31721,31722,31723,31724,31741,31751,31761,31791,31811,31891,31892,31893,31894,31901,31902,31903,31904,31911,31912,31913,31914,31981,31991,32001,32081,32082,32083,32084,32091,32092,32093,32094,32181,32182,32183,32184,32191,32192,32193,32194,32201,32202,32203,32204,32291,32341,32371,32391,32392,32393,32441,32442,32443,32444,32461,32462,32463,32471,32472,32473,32481,32501,32502,32511,32521,32522,32523,32524,32561,32591,32592,32593,32594,32601,32602,32603,32604,32631,32632,32633,32634,32671,32681,32701,32702,32703,32704,32711,32712,32713,32714,32721,32722,32723,32724,32731,32741,32761,32762,32763,32764,32771,32772,32773,32774,32781,32782,32783,32784,32791,32792,32793,32794,32811,32812,32813,32814,32861,32891,32892,32893,32894,32901,32902,32903,32904,32981,32982,32983,32984,32991,32992,32993,32994,33001,33002,33003,33004,33011,33012,33013,33021,33022,33023,33024,33061,33062,33063,33064,33071,33072,33073,33074,33081,33091,33092,33093,33094,33251,33252,33253,33254,33261,33262,33263,33264,33271,33272,33273,33274,33281,33282,33283,33284,33291,33292,33293,33294,33301,33302,33303,33304,33321,33331,33351,33352,33353,33354,33361,33362,33363,33364,33371,33372,33373,33374,33391,33421,33422,33423,33424,33461,33501,33521,33531,33591,33592,33593,33594,33691,33701,33702,33703,33704,33711,33721,33731,33751,33761,33762,33763,33764,33771,33772,33773,33774,33781,33782,33783,33784,33861,33871,33891,33892,33893,33894,33901,33902,33903,33904,33911,33912,33913,33914,33941,33951,33961,33962,33963,33964,33971,33972,33973,33974,33981,33982,33983,33984,34001,34011,34012,34013,34014,34021,34022,34023,34024,34031,34032,34033,34034,34061,34111,34112,34113,34114,34121,34122,34123,34124,34131,34132,34133,34134,34141,34151,34161,34171,34172,34173,34174,34191,34192,34193,34194,34201,34211,34221,34251,34261,34311,34312,34313,34314,34321,34322,34323,34324,34331,34332,34333,34334,34341,34361,34362,34363,34364,34371,34372,34373,34374,34381,34382,34383,34384,34391,34392,34393,34394,34401,34402,34403,34404,34411,34451,34452,34453,34454,34461,34462,34463,34464,34471,34472,34473,34474,34511,34521,34551,34561,34591,34601,34611,34621,34631,34632,34633,34634,34641,34642,34643,34644,34651,34652,34653,34654,34661,34681,34682,34683,34684,34691,34692,34693,34694,34701,34702,34703,34704,34711,34712,34713,34714,34721,34722,34723,34724,34731,34732,34733,34734,34741,34751,34771,34811,34812,34813,34814,34831,34841,34842,34843,34844,34851,34852,34853,34854,34861,34862,34863,34864,34871,34872,34873,34874,34881,34882,34883,34884,34891,34892,34893,34894,34901,34991,34992,34993,34994,35001,35002,35003,35004,35011,35012,35013,35014,35091,35101,35102,35103,35104,35111,35112,35113,35114,35121,35122,35123,35124,35131,35141,35181,35182,35183,35184,35201,35221,35222,35223,35224,35271,35321,35322,35323,35324,35351,35361,35371,35421,35422,35423,35424,35431,35432,35433,35434,35441,35442,35443,35444,35451,35452,35453,35454,35461,35471,35472,35473,35474,35491,50006,50009,50010,50013,50014,50021,50023,50024,50025,50027,50028,50032,50037,50038,50054,50076,50083,50086,50091,50092,50098,50101,50107,50109,50110,50113,50114,50115,50116,50117,50118,50119,50123,50125,50129,50130,50131,50133,50136,50138,50139,50140,50142,50145,50146,50147,50148,50150,50151,50152,50153,50157,50158,50160,50161,50163,50164,50165,50166,50168,50169,50170,50172,50173,50174,50175,50179,50181,50182,50184,50187,50188,50189,50190,50191,50192,50195,50197,50198,50201,50206,50224,59101,59102,59103,59104,59105,59106,59111,59112,59113,59114,59201,59202,59203,59204,59205,59206,59211,59212,59213,59214,59301,59302,59303,59311,59312,59313,59314,59317,59401,59402,59403,59404,59411,59412,59421,59422,59501,59502,59503,59504,59506,59507,59511,59601,59602,59603,59604,59611,59612,59702,59703,59705,59706,59711,59712,59713,59714,59801,59802,59803,59901,60101,60102,60103,60104,60105,60106,60111,60112,60113,60114,60201,60202,60203,60204,60205,60206,60211,60212,60213,60301,60302,60303,60311,60312,60313,60317,60401,60402,60403,60404,60411,60412,60421,60422,60501,60502,60503,60506,60507,60511,60601,60602,60603,60604,60611,60612,60702,60703,60705,60706,60711,60712,60713,60714,60801,60802,60803,62101,62201,62202,62801,62901,63101,63201,63701,110085,110086,110088,110089,110090,112102,112104,112106,112110,112111,112112,112113,112119,112120,113112,113113,113116,113117,113127,113129,114003,114100,114107,114108,114200,114224,114250,114260,114261,114262,114272,114273,114274,114290,114291,114292,114298,114304,114307,114308,114325,114326,114327,114333,114336,114337,114338,114339,114340,114341,114342,114344,114345,114346,114347,114348,114350,114351,114358,114365,114367,114368,114369,114370,114371,114372,114378,114379,114383,114384,114385,114387,114396,114397,114399,114400,114401,114402,114422,114423,114426,114427,114431,114432,114433,114435,114441,114442,114443,114445,114451,114452,114455,114468,114471,114482,114483,114484,114485,114486,114487,114488,114489,114490,114491,114492,114497,114500,114501,114502,114503,114504,114505,114506,114507,114508,114509,114511,114512,114513,114514,114515,114516,114517,114518,114519,114520,114521,114522,114523,114524,114527,114529,114530,114531,114532,114538,114540,114541,114598,114599,114605,114606,114609,114610,114611,114616,114617,114618,114619,114620,114621,114622,114623,114631,114633,114634,114635,114636,114637,114638,114639,114640,114641,114642,114643,114645,114650,114651,114652,114653,114654,114656,114657,114658,114661,114668,114669,114670,114671,114672,114673,114674,114676,114678,114679,114680,114681,114682,114683,114684,114685,114687,114688,114690,114691,114692,114693,114694,114695,114696,114697,114698,114699,114700,114701,114702,114703,114704,114705,114706,114708,114711,114712,114713,114714,114715,114716,114717,114722,114732,114733,114734,114735,114738,114744,114749,114750,114751,114752,114753,114759,114761,114762,114763,114765,114766,114767,114768,114769,114770,114771,114772,114773,114774,114775,114776,114777,114778,114779,114801,115001,115002,115003,115004,115100,115103,115104,115106,115110,115115,115116,115117,115119,115121,115123,115124,115125,115126,115127,115134,115136,115137,115138,115139,115150,115151,115152,115153,115154,115162,115163,115164,115165,115166,115169,115172,115175,115176,115180,115181,115193,115201,115202,115203,115204,115301,115302,115303,115304,115307,115308,115309,115310,115402,115403,115404,115405,115406,115407,115503,115504,115505,115506,115507,115508,115801,115901,116027,116029,116042,116043,116044,116045,116046,116047,116048,116049,116050,116051,116101,116102,116104,116105,116106,116107,116111,116113,116114,116115,116116,116117,116118,116119,116125,116128,116129,116132,116202,116203,116208,116209,116210,116506,116507,116508,116509,116510,116609,116610,116611,116612,116615,116620,116621,116622,116626,116627,116628,116629,116630,116631,116632,116633,116634,116635,116636,116637,116638,116639,116640,116641,116642,116643,116644,116645,116646,116647,116648,116649,116650,116651,116652,116653,116654,116655,116656,116657,116658,116659,116660,116662,116701,116702,116703,116704,116707,116760,116761,116762,117102,117159,117171,117411,117421,117431,117441,117442,117461,117481,117491,117492,117493,117494,117496,117497,117498,117499,117502,117503,117504,117505,117511,117521,117522,117531,117532,117611,117612,117613,117621,117631,117711,117712,117721,117731,117734,117735,117736,117743,117744,117745,117752,117753,117754,117761,117762,117763,117764,117770,117771,117772,117779,117780,117781,117785,117786,117787,117791,117792,117793,117794,117796,117797,117798,117799,117803,117804,117805,117809,117810,117811,117818,117819,117820,117821,117824,117827,117828,117829,118004,118005,118006,118007,118022,118201,118202,118203,118204,118301,118302,118303,118304,118307,118308,118309,118310,118402,118403,118404,118405,118406,118407,118503,118504,118505,118506,118507,118508,118801,118802,118803,118823,118824,118828,118829,118830,118858,118859,118862,118899,118900,118906,118910,118911,118913,118915,118916,118917,118918,118920,118921,118922,118924,118925,118927,118930,118941,118942,118951,118952,118953,118954,118955,118956,118957,118958,118959,118960,118961,118962,118963,118964,118965,118966,118967,118968,118971,118972,118980,118981,118982,118983,118984,118985,118986,118987,118988,118989,118990,118991,118992,118993,118994,118995,118996,118997,118998,119000,119001,119002,119003,119006,119101,119102,119105,119106,119107,119110,119112,119113,119203,119204,119205,119206,119207,119208,119209,119210,119211,119212,119213,119214,119215,119216,119217,119218,119219,119220,119221,119222,119223,119224,119225,119226,119227,119228,119230,119231,119233,119235,119236,119237,119238,119239,119280,119282,119283,119284,119285,119286,119287,119288,119289,119291,119292,119293,119294,119300,119301,119302,119303,119304,119305,119306,119307,119308,119309,119310,119311,119312,119313,119314,119315,119316,119317,119318,119319,119320,119321,119323,119324,119325,119326,119327,119328,119329,119330,119331,119332,119333,119334,119335,119336,119337,119338,119339,119340,119341,119342,119343,119344,119345,119346,119347,119348,119349,119390,119400,119402,119403,119404,119406,119407,119408,119409,119410,119411,119412,119413,119415,119417,119418,119420,119422,119423,119424,119426,119427,119428,119429,119431,119432,119433,119434,119435,119436,119437,119438,119439,119440,119441,119443,119444,119445,119446,119447,119448,119450,119451,119501,119502,119503,119504,119505,119506,119507,119508,119509,119605,119606,119607,119701,119702,119703,119704,119705,119706,119707,119708,119709,119710,119711,119715,119716,119717,119718,119719,119720,119721,119723,119724,119727,119728,119729,119730,119731,119732,119733,119734,119735,119736,119737,119738,119739,119740,119741,119742,119743,119744,119745,119746,119747,119748,119749,119750,119751,119752,119754,119756,119757,119761,119762,119763,119765,119766,119767,119770,119771,119775,119777,119778,119780,119782,119783,119784,119785,119786,119787,119789,119790,119801,119802,119803,119804,119805,119806,119807,119808,119809,119810,119811,119812,119813,119814,119815,119816,119817,119818,119819,119820,119821,119822,119823,119824,119825,119826,119827,119828,119829,119830,119831,119832,119833,119834,119835,119836,119837,119838,119839,119840,119841,119843,119844,119999,121001,121002,121003,121004,121005,121006,121007,121008,121009,121010,121011,121012,121029,121044,121045,121046,121047,121050,121101,121102,121103,121104,121105,121106,121107,121108,121110,121112,121113,121114,121115,121117,121121,121122,121123,121124,121125,121126,121127,121128,121129,121130,121131,121135,121136,121137,121138,121202,121203,121204,121205,121207,121208,121290,121291,121292,121301,121302,121303,121304,121305,121306,121307,121325,121326,121327,121401,121402,121403,121404,121405,121406,121407,121408,121409,121410,121411,121412,121501,121502,121503,121504,121511,121512,121513,121520,121521,121522,121523,121525,121527,121528,121529,121530,121537,121558,121559,121560,121564,121565,121567,121568,121573,121574,121575,121580,121581,121582,121583,121584,121591,121598,121599,121600,121601,121602,121603,121604,121605,121606,121607,122000,122001,122002,122003,122010,122011,122012,122103,122104,122105,122106,122107,122108,122109,122110,122111,122112,122113,122114,122115,122116,122117,122118,122119,122120,122121,122122,122123,122126,122127,122128,122129,122130,122131,122132,122133,122144,122145,122146,122147,122148,122149,122150,122151,122152,122153,122154,122160,122161,122162,122163,122164,122165,122166,122167,122168,122169,122170,122171,122201,122202,122203,122204,122205,122206,122207,122208,122209,122210,122211,122212,122213,122214,122215,122216,122217,122218,122301,122302,122303,122304,122305,122306,122307,122308,122309,122320,122321,122322,122323,122324,122327,122392,122393,122701,122702,122703,122704,122705,122750,122751,122760,122762,122763,122764,122765,122801,122802,122803,122804,122811,122815,122819,122820,122821,122822,122823,122824,122825,122826,122827,122832,122835,122836,122837,122838,122839,122840,122847,122851,122852,122855,122856,122857,122858,122859,122861,122863,122864,122865,122867,122872,122873,122876,123001,123002,123003,123004,123006,123007,123008,123009,123010,123011,123012,123101,123102,123103,123104,123105,123106,123201,123202,123203,123204,123205,123206,123207,123208,123209,123210,123211,123212,123213,123214,123215,123216,123217,123218,123219,123220,123221,123222,123223,123224,123225,123226,123227,123228,123229,123230,123231,123232,123233,123234,123235,123236,123301,123302,123303,123304,123305,123306,123311,123337,123410,123411,123412,123413,123414,123415,123416,123417,123418,123419,123425,123426,123427,123430,123431,123432,123433,123436,123437,123438,123439,123442,123443,123444,123445,123446,123447,123448,123450,123451,123452,123453,123454,123455,123456,123457,123458,123459,123462,123463,123464,123465,123466,123481,123482,123483,123484,123487,123488,123489,123490,123493,123494,123495,123496,123497,123498,123499,123500,123501,123502,123503,123504,123505,123506,123507,123508,123509,123510,123511,123512,123513,123514,123515,123516,123601,123602,123603,123604,123605,123606,123607,123608,123609,123610,123611,123612,123613,123614,123990,124001,124002,124003,124004,124005, + 124006, + 124007, + 124008, + 124009, + 124010, + 124011, + 124012, + 124013, + 124014, + 124015, + 124016, + 124017, + 124018, + 124019, + 124020, + 124021, + 124022, + 124023, + 124024, + 124025, + 124026, + 124027, + 124101, + 124102, + 124103, + 124104, + 124105, + 124111, + 124112, + 124113, + 124114, + 124117, + 124119, + 125191, + 125203, + 125214, + 125225, + 125226, + 125231, + 125236, + 125240, + 125241, + 125242, + 126001, + 126002, + 126003, + 126004, + 126005, + 126006, + 126501, + 126502, + 126503, + 126504, + 126505, + 126506, + 126507, + 126508, + 126600, + 126601, + 126701, + 126702, + 126703, + 126704, + 126799, + 126801, + 126802, + 126818, + 126820, + 126821, + 126822, + 126824, + 126826, + 126827, + 126834, + 126870, + 126871, + 126874, + 126880, + 126881, + 127300, + 127353, + 127356, + 127364, + 127501, + 128001, + 128002, + 128008, + 128011, + 128012, + 128013, + 128052, + 128053, + 128055, + 128056, + 128057, + 128058, + 128062, + 128063, + 128067, + 128068, + 128070, + 128079, + 128081, + 128082, + 128083, + 128090, + 128093, + 128095, + 128096, + 128098, + 128103, + 128116, + 128118, + 128119, + 128165, + 128166, + 128167, + 128200, + 128201, + 128203, + 128220, + 128221, + 128223, + 128224, + 128312, + 128316, + 128318, + 128336, + 128337, + 128338, + 128505, + 128506, + 128511, + 128512, + 128513, + 128514, + 128516, + 129010, + 129011, + 129012, + 129013, + 129100, + 129139, + 129140, + 129141, + 129150, + 129152, + 129163, + 129190, + 129194, + 129207, + 129208, + 129209, + 129210, + 129211, + 129212, + 129405, + 129407, + 129416, + 129424, + 129432, + 129435, + 129500, + 129501, + 129502, + 129567, + 135001, + 135002, + 135003, + 135004, + 135009, + 135010, + 161067, + 161068, + 161069, + 340105, + 370101, + 370102, + 370103, + 370106, + 370108, + 370110, + 370111, + 370112, + 370113, + 370114, + 370115, + 380106, + 380108, + 380110, + 380111, + 380112, + 380113, + 380120, + 400002, + 400004, + 400006, + 400007, + 401000, + 401001, + 401005, + 401006, + 401008, + 401009, + 401010, + 401011, + 401998, + 401999, + 410002, + 510001, + 510002, + 510003, + 510004, + 510021, + 510051, + 510071, + 510081, + 510082, + 510083, + 510091, + 592101, + 592201, + 592202, + 592401, + 592501, + 592601, + 592801, + 592901, + 592902, + 593101, + 593201, + 593301, + 593501, + 593601, + 593701, + 1040113, + 1060212, + 1060565, + 1060585, + 1060601, + 1060618, + 1060630, + 1060631, + 1060632, + 1060633, + 1060634, + 1060635, + 1060636, + 1060637, + 1060638, + 1060639, + 1060640, + 1060641, + 1060642, + 1060664, + 1060703, + 1060710, + 1060711, + 1060712, + 1060713, + 1060714, + 1060730, + 1060800, + 1060813, + 1060816, + 1060817, + 1060818, + 1060819, + 1060820, + 1060821, + 1060823, + 1060825, + 1060826, + 1060830, + 1060831, + 1060890, + 1060891, + 1060892, + 1060893, + 1060894, + 1060896, + 1060897, + 1060920, + 1060921, + 1060923, + 1060927, + 1060929, + 1060932, + 1060951, + 1060952, + 1061050, + 1061257, + 1061258, + 1061266, + 1061276, + 1061277, + 1061294, + 1061300, + 1061301, + 1061310, + 1061400, + 1061401, + 1061402, + 1061403, + 1061404, + 1061410, + 1061438, + 1061468, + 1061475, + 1061608, + 1061619, + 1061626, + 1061634, + 1061662, + 1061670, + 1061671, + 1061679, + 1061710, + 1061711, + 1061712, + 1061770, + 1061772, + 1061773, + 1061785, + 1061787, + 1061848, + 1061854, + 1061857, + 1061912, + 1061922, + 1061945, + 2020301, + 2020401, + 3020201, + 3020301, + 3020401, + 5920201, + 5920301, + 5920401 + ] + ) diff --git a/game_server/packet/handlers/GetInviteActivityInviteeDataReq.py b/game_server/packet/handlers/GetInviteActivityInviteeDataReq.py new file mode 100644 index 0000000..987a16d --- /dev/null +++ b/game_server/packet/handlers/GetInviteActivityInviteeDataReq.py @@ -0,0 +1,19 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetInviteActivityInviteeDataReq, + GetInviteActivityInviteeDataRsp, + InviteeActivity, + InviteeActivityType +) + +async def handle(session: Session, msg: GetInviteActivityInviteeDataReq) -> betterproto.Message: + return GetInviteActivityInviteeDataRsp( + retcode=0, + invitee_activity_info_list=[ + InviteeActivity( + schedule_id=2, + activity_type=InviteeActivityType.INVITEE_ACTIVITY_TYPE_GOBACK + ) + ] + ) diff --git a/game_server/packet/handlers/GetInviteActivityInviterDataReq.py b/game_server/packet/handlers/GetInviteActivityInviterDataReq.py new file mode 100644 index 0000000..049296a --- /dev/null +++ b/game_server/packet/handlers/GetInviteActivityInviterDataReq.py @@ -0,0 +1,21 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetInviteActivityInviterDataReq, + GetInviteActivityInviterDataRsp, + InviterActivity +) + +async def handle(session: Session, msg: GetInviteActivityInviterDataReq) -> betterproto.Message: + return GetInviteActivityInviterDataRsp( + retcode=0, + inviter_activity_info_list=[ + InviterActivity( + schedule_id=4 + ), + InviterActivity( + schedule_id=103 + ), + ], + my_invite_code="17263334YG" + ) diff --git a/game_server/packet/handlers/GetLoginActivityReq.py b/game_server/packet/handlers/GetLoginActivityReq.py new file mode 100644 index 0000000..b3c0559 --- /dev/null +++ b/game_server/packet/handlers/GetLoginActivityReq.py @@ -0,0 +1,21 @@ +import betterproto +from game_server.net.session import Session +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetLoginActivityReq, + GetLoginActivityRsp, + LoginActivityData +) + +async def handle(session: Session, msg: GetLoginActivityReq) -> betterproto.Message: + return GetLoginActivityRsp( + retcode=0, + login_list=[ + LoginActivityData( + id=581, + login_days=get_unix_in_seconds(), + accept_time=get_unix_in_seconds(), + duration_end_time=get_unix_in_seconds() + 604800 * 2 + ) + ] + ) diff --git a/game_server/packet/handlers/GetMainDataReq.py b/game_server/packet/handlers/GetMainDataReq.py new file mode 100644 index 0000000..6d6f4d9 --- /dev/null +++ b/game_server/packet/handlers/GetMainDataReq.py @@ -0,0 +1,49 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMainDataReq,GetMainDataRsp,WarshipAvatarData,ChatworldActivityInfo,WarshipThemeData +from game_server.utils import get_unix_in_seconds + +async def handle(session: Session, msg: GetMainDataReq) -> betterproto.Message: + return GetMainDataRsp( + retcode=0, + assistant_avatar_id=session.player.assistant_avatar_id, + birthday=session.player.birth_date, + nickname=session.player.name, + level=session.player.level, + exp=session.player.exp, + free_hcoin=0, + hcoin=session.player.hcoin, + custom_head_id=session.player.head_photo, + scoin=0, + is_all=True, + register_time=get_unix_in_seconds(), + pay_hcoin=0, + warship_avatar=WarshipAvatarData( + warship_first_avatar_id=session.player.warship_avatar.warship_first_avatar_id, + warship_second_avatar_id=session.player.warship_avatar.warship_second_avatar_id + ), + self_desc=session.player.signature, + use_frame_id=session.player.head_frame, + on_phone_pendant_id=350005, + stamina=session.player.stamina, + stamina_recover_config_time=360, + stamina_recover_left_time=360, + equipment_size_limit=1000, + open_panel_activity_list=[2], + chatworld_activity_info=ChatworldActivityInfo( + is_has_npc_red_envelope=False, + treasure_schedule_id=0 + ), + is_allow_cost_senior_equip_on_cur_device=True, + type_list=[2, 3, 4, 5, 6, 7, 8, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39], + level_lock_id=1, + mcoin=100000, + month_recharge_price=0, + warship_theme=WarshipThemeData( + warship_id=session.player.warship_id + ), + total_login_days=1, + next_evaluate_time=0, + on_medal_id=0, + today_recharge_price=0 + ) diff --git a/game_server/packet/handlers/GetMasterPupilApplyReq.py b/game_server/packet/handlers/GetMasterPupilApplyReq.py new file mode 100644 index 0000000..f1c1082 --- /dev/null +++ b/game_server/packet/handlers/GetMasterPupilApplyReq.py @@ -0,0 +1,13 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetMasterPupilApplyReq, + GetMasterPupilApplyRsp, + MasterPupilType +) + +async def handle(session: Session, msg: GetMasterPupilApplyReq) -> betterproto.Message: + return GetMasterPupilApplyRsp( + retcode=0, + type=MasterPupilType.MASTER_PUPIL_MASTER_TYPE.value + ) diff --git a/game_server/packet/handlers/GetMasterPupilCardReq.py b/game_server/packet/handlers/GetMasterPupilCardReq.py new file mode 100644 index 0000000..e9ae9f5 --- /dev/null +++ b/game_server/packet/handlers/GetMasterPupilCardReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMasterPupilCardReq, GetMasterPupilCardRsp + +async def handle(session: Session, msg: GetMasterPupilCardReq) -> betterproto.Message: + return GetMasterPupilCardRsp(retcode=0) diff --git a/game_server/packet/handlers/GetMasterPupilDataReq.py b/game_server/packet/handlers/GetMasterPupilDataReq.py new file mode 100644 index 0000000..a711ce8 --- /dev/null +++ b/game_server/packet/handlers/GetMasterPupilDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMasterPupilDataReq, GetMasterPupilDataRsp + +async def handle(session: Session, msg: GetMasterPupilDataReq) -> betterproto.Message: + return GetMasterPupilDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetMasterPupilMainDataReq.py b/game_server/packet/handlers/GetMasterPupilMainDataReq.py new file mode 100644 index 0000000..ddabba9 --- /dev/null +++ b/game_server/packet/handlers/GetMasterPupilMainDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMasterPupilMainDataReq, GetMasterPupilMainDataRsp + +async def handle(session: Session, msg: GetMasterPupilMainDataReq) -> betterproto.Message: + return GetMasterPupilMainDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetMedalDataReq.py b/game_server/packet/handlers/GetMedalDataReq.py new file mode 100644 index 0000000..6a1a7b5 --- /dev/null +++ b/game_server/packet/handlers/GetMedalDataReq.py @@ -0,0 +1,195 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetMedalDataReq, + GetMedalDataRsp, + Medal +) + +async def handle(session: Session, msg: GetMedalDataReq) -> betterproto.Message: + return GetMedalDataRsp( + retcode=0, + medal_list=[ + Medal( + extra_param=110, + id=101113 + ), + Medal( + id=101042 + ), + Medal( + id=101089 + ), + Medal( + id=101108 + ), + Medal( + end_time=1757947552, + id=101092 + ), + Medal( + id=101115 + ), + Medal( + id=101103 + ), + Medal( + id=101112 + ), + Medal( + extra_param=30, + id=101110 + ), + Medal( + end_time=1743980267, + id=101031 + ), + Medal( + id=101125 + ), + Medal( + id=101091 + ), + Medal( + id=101047 + ), + Medal( + end_time=1719062973, + id=101094 + ), + Medal( + id=101074 + ), + Medal( + extra_param=3010, + id=101120 + ), + Medal( + id=101026 + ), + Medal( + id=101096 + ), + Medal( + id=101085 + ), + Medal( + id=101145 + ), + Medal( + id=101098 + ), + Medal( + id=101102 + ), + Medal( + extra_param=40, + id=101117 + ), + Medal( + id=101040 + ), + Medal( + id=101134 + ), + Medal( + id=101090 + ), + Medal( + id=101067 + ), + Medal( + id=101111 + ), + Medal( + id=101088 + ), + Medal( + end_time=1684342752, + id=101121 + ), + Medal( + id=101024 + ), + Medal( + id=101118 + ), + Medal( + extra_param=268, + id=101124 + ), + Medal( + end_time=1681312396, + id=101083 + ), + Medal( + end_time=1675728702, + id=101036 + ), + Medal( + id=101106 + ), + Medal( + id=101059 + ), + Medal( + id=101105 + ), + Medal( + id=101104 + ), + Medal( + end_time=1757949121, + id=101093 + ), + Medal( + id=101116 + ), + Medal( + end_time=1661813717, + id=101069 + ), + Medal( + end_time=1719448204, + id=101030 + ), + Medal( + extra_param=49, + id=101127 + ), + Medal( + id=101109 + ), + Medal( + extra_param=1593836710, + id=101142 + ), + Medal( + id=101025 + ), + Medal( + extra_param=4, + id=101122 + ), + Medal( + id=101099 + ), + Medal( + id=101146 + ), + Medal( + id=101107 + ), + Medal( + id=101100 + ), + Medal( + id=101126 + ), + Medal( + end_time=1664198688, + id=101079 + ) + ] + + ) diff --git a/game_server/packet/handlers/GetMissionDataReq.py b/game_server/packet/handlers/GetMissionDataReq.py new file mode 100644 index 0000000..4f31c85 --- /dev/null +++ b/game_server/packet/handlers/GetMissionDataReq.py @@ -0,0 +1,39 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.mission_data import MissionData +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetMissionDataReq, + GetMissionDataRsp, + Mission, + MissionStatus, + ChallengeMissionData, + MainlineStepMission +) + +async def handle(session: Session, msg: GetMissionDataReq) -> betterproto.Message: + return GetMissionDataRsp( + retcode=0, + challenge_mission=ChallengeMissionData( + is_unlock=True + ), + close_mission_list=[mission.id for mission in ResourceManager.instance().values(MissionData)], + is_all=True, + is_in_activity=True, + mainline_step=MainlineStepMission( + is_update=True + ), + mission_list=[ + Mission( + mission_id=mission.id, + status=MissionStatus.MISSION_CLOSE.value, + priority=mission.Priority, + progress=mission.totalProgress, + begin_time=0, + end_time=2073239999, + cycle_id=1 + ) + for mission in ResourceManager.instance().values(MissionData) + ] + ) diff --git a/game_server/packet/handlers/GetMissionGroupMainInfoReq.py b/game_server/packet/handlers/GetMissionGroupMainInfoReq.py new file mode 100644 index 0000000..dd848a1 --- /dev/null +++ b/game_server/packet/handlers/GetMissionGroupMainInfoReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMissionGroupMainInfoReq,GetMissionGroupMainInfoRsp + +async def handle(session: Session, msg: GetMissionGroupMainInfoReq) -> betterproto.Message: + return GetMissionGroupMainInfoRsp( + retcode=0, + has_take_reward_mission_group_list=[97001] + ) diff --git a/game_server/packet/handlers/GetMissionThemeDataReq.py b/game_server/packet/handlers/GetMissionThemeDataReq.py new file mode 100644 index 0000000..056fafb --- /dev/null +++ b/game_server/packet/handlers/GetMissionThemeDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMissionThemeDataReq, GetMissionThemeDataRsp + +async def handle(session: Session, msg: GetMissionThemeDataReq) -> betterproto.Message: + return GetMissionThemeDataRsp(retcode=0,is_get_all=True) diff --git a/game_server/packet/handlers/GetMosaicActivityReq.py b/game_server/packet/handlers/GetMosaicActivityReq.py new file mode 100644 index 0000000..ca0020a --- /dev/null +++ b/game_server/packet/handlers/GetMosaicActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetMosaicActivityReq, GetMosaicActivityRsp + +async def handle(session: Session, msg: GetMosaicActivityReq) -> betterproto.Message: + return GetMosaicActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetNewOpenworldReq.py b/game_server/packet/handlers/GetNewOpenworldReq.py new file mode 100644 index 0000000..b231904 --- /dev/null +++ b/game_server/packet/handlers/GetNewOpenworldReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetNewOpenworldReq, GetNewOpenworldRsp + +async def handle(session: Session, msg: GetNewOpenworldReq) -> betterproto.Message: + return GetNewOpenworldRsp(retcode=0) diff --git a/game_server/packet/handlers/GetNewbieActivityReq.py b/game_server/packet/handlers/GetNewbieActivityReq.py new file mode 100644 index 0000000..0423119 --- /dev/null +++ b/game_server/packet/handlers/GetNewbieActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetNewbieActivityReq, GetNewbieActivityRsp + +async def handle(session: Session, msg: GetNewbieActivityReq) -> betterproto.Message: + return GetNewbieActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetNinjaActivityReq.py b/game_server/packet/handlers/GetNinjaActivityReq.py new file mode 100644 index 0000000..cc6b647 --- /dev/null +++ b/game_server/packet/handlers/GetNinjaActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetNinjaActivityReq,GetNinjaActivityRsp + +async def handle(session: Session, msg: GetNinjaActivityReq) -> betterproto.Message: + return GetNinjaActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetOfflineResourceDataReq.py b/game_server/packet/handlers/GetOfflineResourceDataReq.py new file mode 100644 index 0000000..3b26a2b --- /dev/null +++ b/game_server/packet/handlers/GetOfflineResourceDataReq.py @@ -0,0 +1,7 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import GetOfflineResourceDataReq,GetOfflineResourceDataRsp + +async def handle(session: Session, msg: GetOfflineResourceDataReq) -> betterproto.Message: + return GetOfflineResourceDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetOpenworldEndlessDataReq.py b/game_server/packet/handlers/GetOpenworldEndlessDataReq.py new file mode 100644 index 0000000..3744bfb --- /dev/null +++ b/game_server/packet/handlers/GetOpenworldEndlessDataReq.py @@ -0,0 +1,19 @@ +import betterproto +import random +from game_server.net.session import Session +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetOpenworldEndlessDataReq, + GetOpenworldEndlessDataRsp +) + +async def handle(session: Session, msg: GetOpenworldEndlessDataReq) -> betterproto.Message: + return GetOpenworldEndlessDataRsp( + retcode=0, + begin_time=0, + end_time=int(get_unix_in_seconds() + 3600 * 24 * 7), + close_time=int(get_unix_in_seconds() + 3600 * 24 * 7 + 1200), + random_seed=random.randint(1, 1000000), + hard_level=msg.level, + type=msg.type + ) diff --git a/game_server/packet/handlers/GetOpenworldMechaDefenseReq.py b/game_server/packet/handlers/GetOpenworldMechaDefenseReq.py new file mode 100644 index 0000000..501e273 --- /dev/null +++ b/game_server/packet/handlers/GetOpenworldMechaDefenseReq.py @@ -0,0 +1,15 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetOpenworldMechaDefenseReq, + GetOpenworldMechaDefenseRsp, + OpenworldMechaDefense +) + +async def handle(session: Session, msg: GetOpenworldMechaDefenseReq) -> betterproto.Message: + return GetOpenworldMechaDefenseRsp( + retcode=0, + mecha_defense=OpenworldMechaDefense( + left_enter_times=1 + ) + ) diff --git a/game_server/packet/handlers/GetOpenworldQuestActivityReq.py b/game_server/packet/handlers/GetOpenworldQuestActivityReq.py new file mode 100644 index 0000000..94f7847 --- /dev/null +++ b/game_server/packet/handlers/GetOpenworldQuestActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetOpenworldQuestActivityReq, GetOpenworldQuestActivityRsp + +async def handle(session: Session, msg: GetOpenworldQuestActivityReq) -> betterproto.Message: + return GetOpenworldQuestActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetPediaReq.py b/game_server/packet/handlers/GetPediaReq.py new file mode 100644 index 0000000..03aafc7 --- /dev/null +++ b/game_server/packet/handlers/GetPediaReq.py @@ -0,0 +1,7011 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetPediaReq, GetPediaRsp + +async def handle(session: Session, msg: GetPediaReq) -> betterproto.Message: + return GetPediaRsp( + retcode=0, + black_list=[ + 129999, + 129892, + 129891, + 129832, + 129723, + 129722, + 129721, + 129720, + 129719, + 129718, + 129717, + 129716, + 129715, + 129669, + 129668, + 129667, + 129666, + 129432, + 129431, + 129430, + 129429, + 129428, + 129427, + 129426, + 129425, + 129424, + 129173, + 129172, + 129171, + 129170, + 129169, + 129168, + 129167, + 129166, + 129165, + 129164, + 129163, + 129162, + 129161, + 129160, + 129159, + 129158, + 129157, + 129156, + 129155, + 129154, + 129153, + 129152, + 129151, + 129150, + 129100, + 129146, + 129145, + 129144, + 129143, + 129142, + 129141, + 129140, + 129139, + 129019, + 129018, + 129014, + 129013, + 129012, + 129011, + 129010, + 129004, + 129003, + 129000, + 128623, + 128622, + 128534, + 128533, + 128532, + 128531, + 128530, + 128504, + 128452, + 128451, + 128450, + 128424, + 128381, + 128380, + 128379, + 128378, + 128377, + 128376, + 128375, + 128372, + 128371, + 128370, + 128369, + 128368, + 128367, + 128366, + 128365, + 128364, + 128363, + 128362, + 128361, + 128360, + 128359, + 128358, + 128357, + 128356, + 128355, + 128354, + 128353, + 128352, + 128351, + 128350, + 128349, + 128348, + 128347, + 128346, + 128345, + 128344, + 128343, + 128342, + 128341, + 128340, + 128339, + 128338, + 128337, + 128336, + 128335, + 128334, + 128333, + 128332, + 128331, + 128330, + 128329, + 128328, + 128327, + 128326, + 128325, + 128324, + 128323, + 128322, + 128321, + 128320, + 128319, + 128318, + 128317, + 128316, + 128315, + 128314, + 128313, + 128312, + 128311, + 128310, + 128309, + 128308, + 128307, + 128306, + 128305, + 128304, + 128303, + 128229, + 128228, + 128227, + 128171, + 128170, + 128169, + 128168, + 128167, + 128166, + 128165, + 128164, + 128163, + 128162, + 128161, + 128160, + 128159, + 128158, + 128157, + 128156, + 128155, + 128154, + 128153, + 128152, + 128151, + 128150, + 128134, + 128133, + 128132, + 128131, + 128130, + 128129, + 128128, + 128127, + 128126, + 128125, + 128124, + 128123, + 128122, + 128121, + 128071, + 128070, + 128069, + 128068, + 128067, + 128066, + 128061, + 128060, + 128059, + 128058, + 128057, + 128056, + 128051, + 128031, + 128011, + 128009, + 128008, + 127621, + 127620, + 127610, + 127601, + 127578, + 127577, + 127576, + 127571, + 127570, + 127569, + 127568, + 127567, + 127566, + 127561, + 127560, + 127559, + 127558, + 127557, + 127556, + 127551, + 127550, + 127549, + 127548, + 127547, + 127546, + 127541, + 127540, + 127539, + 127538, + 127537, + 127536, + 127531, + 127521, + 127520, + 127519, + 127518, + 127517, + 127516, + 127511, + 127501, + 127300, + 127231, + 127230, + 127228, + 127227, + 127226, + 127225, + 127221, + 127220, + 127219, + 127218, + 127217, + 127211, + 127210, + 127209, + 119845, + 119844, + 119457, + 119456, + 119455, + 119454, + 119453, + 119452, + 119451, + 119450, + 115197, + 115196, + 115195, + 115193, + 9576, + 9575, + 9574, + 9573, + 9572, + 9571, + 9570, + 9569, + 9568, + 9567, + 9566, + 9565, + 9564, + 9563, + 8640, + 128001, + 6617, + 6616, + 6615, + 6614, + 6613, + 6612, + 6104, + 6103, + 6102, + 994, + 129002, + 129001, + 127208, + 119449, + 118976, + 116779, + 116776, + 116775, + 116774, + 116773, + 116771, + 9562, + 9561, + 993, + 127500, + 127391, + 127390, + 127389, + 127381, + 127380, + 127379, + 127378, + 127377, + 127376, + 127371, + 127370, + 127361, + 127201, + 127200, + 122866, + 119448, + 118975, + 118974, + 118973, + 118871, + 118870, + 118869, + 118868, + 118867, + 114784, + 114783, + 114782, + 114781, + 114780, + 114779, + 992, + 127356, + 127355, + 127351, + 127311, + 127310, + 127309, + 127308, + 127307, + 127306, + 127301, + 127151, + 127150, + 127149, + 127148, + 127147, + 127146, + 127145, + 127144, + 127143, + 127142, + 127141, + 127140, + 127139, + 127138, + 127137, + 127136, + 127131, + 127130, + 127129, + 127128, + 127121, + 127120, + 127119, + 127118, + 127117, + 127116, + 127115, + 127111, + 127110, + 127109, + 127108, + 127107, + 127106, + 127105, + 127101, + 127100, + 127099, + 127098, + 127097, + 127096, + 127095, + 127091, + 127090, + 127089, + 127088, + 127081, + 127080, + 127079, + 127078, + 127077, + 127076, + 127071, + 127070, + 127069, + 127068, + 127067, + 127066, + 127061, + 127060, + 127059, + 127058, + 127051, + 127050, + 127049, + 127048, + 127041, + 127040, + 127039, + 127038, + 127031, + 127030, + 127029, + 127028, + 127027, + 127011, + 127010, + 127009, + 127008, + 127007, + 127006, + 127001, + 127000, + 126931, + 126921, + 126901, + 126899, + 126881, + 126879, + 126867, + 126866, + 123348, + 123347, + 123346, + 123345, + 123344, + 123343, + 119447, + 119446, + 9560, + 9559, + 9558, + 6607, + 6606, + 6605, + 126880, + 126878, + 126877, + 126876, + 126871, + 126870, + 126859, + 126858, + 126857, + 126856, + 126850, + 126849, + 126848, + 126841, + 126840, + 126839, + 126838, + 126837, + 126836, + 126835, + 126831, + 126830, + 126829, + 126827, + 126826, + 126825, + 123614, + 123613, + 123612, + 123608, + 123607, + 123606, + 123605, + 123604, + 123603, + 123602, + 123337, + 119445, + 115188, + 115187, + 110202, + 110201, + 9557, + 9556, + 6604, + 6603, + 126819, + 119444, + 9555, + 6602, + 3322, + 126861, + 126860, + 126821, + 126820, + 126818, + 129902, + 114729, + 129901, + 114728, + 129900, + 114727, + 123336, + 123335, + 123334, + 123333, + 123332, + 123328, + 123327, + 123326, + 123325, + 123324, + 123323, + 123322, + 122798, + 122797, + 122796, + 122795, + 122794, + 122793, + 122792, + 122783, + 122782, + 122778, + 122777, + 122776, + 122775, + 122774, + 122773, + 122768, + 122767, + 122766, + 122765, + 122764, + 122763, + 119443, + 119442, + 118899, + 114778, + 9554, + 122854, + 119441, + 119440, + 116770, + 116762, + 116761, + 115185, + 115184, + 122848, + 122843, + 122842, + 122705, + 122704, + 122703, + 119437, + 119436, + 118866, + 118865, + 118864, + 128510, + 7126, + 128509, + 7125, + 982, + 119006, + 1061726, + 1061721, + 1061712, + 1061711, + 1061710, + 1061720, + 1061719, + 1061718, + 1061717, + 1061716, + 1061713, + 1061679, + 1061678, + 1061677, + 1061676, + 1061675, + 1061674, + 1061673, + 1061672, + 1061671, + 1061670, + 1061668, + 1061667, + 1061665, + 1061664, + 1061663, + 1061662, + 1061626, + 1061661, + 1061660, + 1061659, + 1061656, + 1061635, + 1061634, + 1061633, + 1061632, + 1061625, + 1061623, + 1061622, + 1061619, + 1061618, + 1061610, + 1061609, + 1061608, + 1061607, + 1061594, + 1061584, + 1061583, + 1061579, + 1061578, + 1061577, + 1061576, + 1061575, + 1061475, + 1061574, + 1061468, + 1061461, + 1061449, + 1061438, + 1061447, + 1061422, + 1061420, + 1061410, + 1061404, + 1061403, + 1061402, + 1061401, + 1061400, + 1061391, + 1061390, + 1061389, + 1061388, + 1061387, + 1061386, + 1061385, + 1061384, + 1061383, + 1061382, + 1061361, + 1061360, + 1061347, + 1061328, + 1061327, + 1061301, + 1061321, + 1061320, + 1061310, + 1061300, + 1061281, + 1061280, + 1061277, + 1061276, + 1061275, + 1061274, + 1061266, + 1061262, + 1061294, + 1061283, + 1061282, + 1061261, + 1061260, + 1061259, + 1061258, + 1061257, + 1061256, + 1061255, + 1061254, + 1061244, + 1061238, + 1061237, + 1061187, + 1061185, + 1061184, + 1061182, + 1061131, + 1061130, + 1061120, + 1061119, + 1061117, + 1061116, + 1061115, + 1061113, + 1061112, + 1061110, + 1061109, + 1061107, + 1061106, + 1061104, + 1061103, + 1061102, + 1061058, + 1061057, + 1061056, + 1061053, + 1061050, + 1061049, + 1061047, + 1060952, + 1060951, + 1060941, + 1060934, + 1060933, + 1060931, + 1060930, + 1060929, + 1060928, + 1060927, + 1060925, + 1060830, + 1060826, + 1060824, + 1060921, + 1060896, + 1060895, + 1060893, + 1060892, + 1060891, + 1060890, + 1060823, + 1060821, + 1060820, + 1060818, + 1060817, + 1060815, + 1060814, + 1060812, + 1060809, + 1060808, + 1060806, + 1060805, + 1060804, + 1060802, + 1060801, + 1060800, + 1060732, + 1060731, + 1060714, + 1060713, + 1060712, + 1060711, + 1060710, + 1060703, + 1060702, + 1060665, + 1060664, + 1060642, + 1060641, + 1060640, + 1060639, + 1060638, + 1060637, + 1060636, + 1060635, + 1060634, + 1060633, + 1060632, + 1060631, + 1060630, + 1060621, + 1060618, + 1060617, + 1060616, + 1060615, + 1060612, + 1060611, + 1060610, + 1060601, + 1060585, + 119843, + 1060569, + 1060999, + 1060365, + 1060364, + 1060266, + 1060265, + 1060264, + 1060262, + 1060260, + 1060259, + 1060258, + 1060256, + 1060255, + 1060254, + 1060253, + 1060252, + 1060251, + 1060250, + 1060241, + 1060239, + 1060238, + 1060237, + 1060236, + 1060261, + 1060226, + 1060224, + 1060223, + 1060222, + 1060219, + 1060218, + 1060215, + 1060214, + 1060213, + 1060212, + 1060211, + 1060210, + 1060209, + 1060208, + 1060203, + 1060202, + 1060201, + 1060200, + 1060086, + 1060085, + 1060083, + 1060082, + 1060081, + 1060106, + 1060105, + 1060104, + 1060103, + 1060102, + 1060101, + 1060100, + 1060080, + 1060079, + 1060078, + 1060077, + 1060076, + 1060024, + 1060023, + 1060022, + 1060021, + 1060005, + 1060004, + 1040113, + 119796, + 1030176, + 119795, + 1060521, + 1030175, + 119794, + 1060520, + 1030174, + 119793, + 1030173, + 119791, + 1030171, + 1030179, + 1030178, + 119792, + 1030172, + 119790, + 1030170, + 119789, + 1030169, + 119788, + 1060514, + 1030168, + 119787, + 1060513, + 1030167, + 119786, + 1030166, + 119785, + 1030165, + 119784, + 1030164, + 119783, + 1030163, + 119782, + 1030162, + 119781, + 1030161, + 119780, + 1030160, + 119779, + 1030159, + 119776, + 1030156, + 119775, + 1030155, + 1030080, + 1030079, + 1030078, + 1030077, + 1030076, + 1030075, + 1030074, + 1030073, + 1030072, + 1030071, + 1030070, + 1030069, + 1030068, + 1030067, + 1030066, + 1030065, + 1030064, + 1030063, + 1030062, + 1030061, + 1030060, + 1030059, + 1030058, + 1030057, + 1030056, + 1030055, + 1030054, + 1030053, + 1030052, + 1030051, + 1030050, + 1030049, + 1060394, + 1030048, + 1030047, + 1030046, + 1030045, + 1030044, + 1030043, + 1030042, + 1030041, + 1030040, + 1030039, + 1030038, + 1030037, + 1060382, + 1030036, + 1060381, + 1030035, + 1060380, + 1030034, + 1060379, + 1030033, + 1060378, + 1030032, + 1060377, + 1030031, + 1060376, + 1030030, + 1060375, + 1030029, + 1060374, + 1030028, + 1060373, + 1030027, + 1060372, + 1030026, + 1060371, + 1030025, + 1060370, + 1030024, + 1060369, + 1030023, + 1060368, + 1030022, + 1060367, + 1030021, + 1060366, + 1030020, + 1030015, + 1030014, + 1030013, + 1030012, + 1030011, + 1030010, + 1030009, + 1030008, + 1030007, + 1030006, + 1030005, + 1030004, + 1030003, + 1020190, + 124118, + 124117, + 124116, + 124115, + 124114, + 124113, + 124105, + 124104, + 124103, + 124027, + 124026, + 124025, + 124024, + 124023, + 124018, + 124017, + 124016, + 124015, + 124014, + 124013, + 124012, + 124008, + 124007, + 124006, + 124005, + 124004, + 124003, + 124002, + 123516, + 123515, + 123514, + 123513, + 123508, + 123507, + 123506, + 123505, + 123504, + 123503, + 123498, + 123497, + 123496, + 123495, + 123494, + 123493, + 123484, + 123483, + 123478, + 123477, + 123476, + 123475, + 123474, + 123473, + 123468, + 123467, + 123466, + 123465, + 123464, + 123463, + 123458, + 123457, + 123456, + 123455, + 123454, + 123453, + 123448, + 123447, + 123446, + 123445, + 123444, + 123443, + 123438, + 123437, + 123436, + 123435, + 123434, + 123433, + 123432, + 123428, + 123427, + 123426, + 123425, + 123424, + 123423, + 123418, + 123417, + 123416, + 123415, + 123414, + 123413, + 123412, + 123408, + 123407, + 123406, + 123405, + 123404, + 123403, + 123402, + 123313, + 123306, + 123305, + 123304, + 123303, + 123237, + 123236, + 123235, + 123234, + 123233, + 123228, + 123227, + 123226, + 123225, + 123224, + 123223, + 123218, + 123217, + 123216, + 123215, + 123214, + 123213, + 123208, + 123207, + 123206, + 123205, + 123204, + 123203, + 123108, + 123107, + 123106, + 123105, + 123104, + 123103, + 123102, + 123008, + 123007, + 123006, + 123005, + 123004, + 123003, + 122878, + 122877, + 122876, + 122875, + 122874, + 122873, + 122872, + 122868, + 122867, + 122865, + 122864, + 122863, + 122858, + 122857, + 122856, + 122855, + 122852, + 122847, + 122838, + 122837, + 122836, + 122835, + 122834, + 122833, + 122832, + 122828, + 122827, + 122826, + 122825, + 122824, + 122823, + 122822, + 122818, + 122817, + 122815, + 122814, + 122813, + 122812, + 122808, + 122807, + 122806, + 122805, + 122804, + 122803, + 122802, + 114801, + 122395, + 122394, + 1009, + 122393, + 991, + 122375, + 990, + 122374, + 989, + 122373, + 988, + 122372, + 122208, + 122207, + 122206, + 122204, + 122203, + 122168, + 122167, + 122166, + 122165, + 122164, + 122163, + 122162, + 122154, + 122153, + 122148, + 122147, + 122146, + 122145, + 122144, + 122133, + 122128, + 122127, + 122126, + 122123, + 122118, + 122117, + 122116, + 122115, + 122114, + 122113, + 122108, + 122107, + 122106, + 122105, + 122104, + 122103, + 122003, + 121036, + 121035, + 1061759, + 121033, + 1061758, + 121032, + 1061757, + 121031, + 1061756, + 121030, + 121029, + 1061754, + 121028, + 121027, + 121026, + 121025, + 121024, + 121023, + 121022, + 121021, + 121020, + 121019, + 121018, + 121017, + 1061742, + 121016, + 1061741, + 121015, + 121014, + 121013, + 121012, + 121011, + 121010, + 121009, + 1061734, + 121008, + 1061733, + 121007, + 1061732, + 121006, + 121005, + 1061730, + 121004, + 121003, + 1061728, + 121002, + 1061727, + 121001, + 119401, + 1060020, + 119294, + 1060019, + 119293, + 1060018, + 119292, + 119291, + 1060016, + 119290, + 1060015, + 119289, + 1060014, + 119288, + 1060013, + 119287, + 119286, + 119285, + 119284, + 1060009, + 119283, + 1060008, + 119282, + 1060007, + 119281, + 1060006, + 119280, + 119239, + 119238, + 119237, + 119236, + 119235, + 119233, + 119232, + 119231, + 119230, + 1060025, + 119299, + 119228, + 119227, + 119226, + 119225, + 119224, + 119223, + 119222, + 119221, + 119220, + 119219, + 119218, + 119217, + 119216, + 119215, + 119214, + 119213, + 119212, + 119211, + 119210, + 119209, + 119208, + 119207, + 119206, + 119205, + 119204, + 119203, + 119202, + 119201, + 119114, + 119113, + 119112, + 119111, + 119110, + 119109, + 119108, + 119107, + 119106, + 119105, + 119102, + 119101, + 119003, + 119002, + 119001, + 118022, + 118021, + 118020, + 118019, + 118018, + 118017, + 118016, + 118015, + 118014, + 118013, + 118012, + 118011, + 118010, + 118009, + 118008, + 118007, + 118006, + 118005, + 118004, + 118003, + 118002, + 118001, + 117013, + 117012, + 117011, + 117010, + 117009, + 117008, + 117007, + 117006, + 117005, + 117004, + 117003, + 117002, + 117001, + 116068, + 116067, + 116066, + 116065, + 116064, + 116058, + 116057, + 116056, + 116055, + 116048, + 116047, + 116046, + 116045, + 116044, + 116036, + 116035, + 116034, + 116033, + 116032, + 116031, + 116030, + 116029, + 116028, + 116027, + 116026, + 116025, + 116024, + 116023, + 116022, + 116021, + 116020, + 116019, + 116018, + 116017, + 116016, + 116015, + 116014, + 116013, + 116012, + 116011, + 116010, + 116009, + 116008, + 116007, + 116006, + 116005, + 116004, + 116003, + 116002, + 116001, + 116000, + 117832, + 117831, + 117830, + 117829, + 117828, + 117827, + 117826, + 117825, + 117824, + 117823, + 117822, + 117821, + 117820, + 117819, + 117818, + 117817, + 117816, + 117815, + 117814, + 117813, + 117812, + 117811, + 117810, + 117809, + 117808, + 117807, + 117806, + 117805, + 117804, + 117803, + 117802, + 117801, + 117800, + 117799, + 117798, + 117797, + 117796, + 117795, + 117794, + 117793, + 117792, + 117791, + 117790, + 117789, + 117788, + 117787, + 117786, + 117785, + 117784, + 117783, + 117782, + 117781, + 117780, + 117779, + 117778, + 117777, + 117776, + 117775, + 117774, + 117773, + 117772, + 117771, + 117770, + 117769, + 117768, + 117767, + 117766, + 117765, + 117764, + 117763, + 117762, + 117761, + 117760, + 117759, + 117758, + 117757, + 117756, + 117755, + 117754, + 117753, + 117752, + 117751, + 117750, + 117749, + 117748, + 117747, + 117746, + 117745, + 117744, + 117743, + 117742, + 117741, + 117740, + 117739, + 117738, + 117737, + 117736, + 117735, + 117734, + 117733, + 117732, + 117731, + 117633, + 117632, + 117631, + 117533, + 117532, + 117531, + 117723, + 117722, + 117721, + 117623, + 117622, + 117621, + 117523, + 117522, + 117521, + 117713, + 117712, + 117711, + 117613, + 117612, + 117611, + 117513, + 117512, + 117511, + 7753, + 7752, + 7751, + 7653, + 7652, + 7651, + 7553, + 7552, + 7551, + 7743, + 7742, + 7741, + 7643, + 7642, + 7641, + 7543, + 7542, + 7541, + 7733, + 7732, + 7731, + 129017, + 7633, + 129016, + 7632, + 129015, + 7631, + 7533, + 7532, + 7531, + 7723, + 7722, + 7721, + 129007, + 7623, + 129006, + 7622, + 129005, + 7621, + 7523, + 7522, + 7521, + 7713, + 7712, + 7711, + 7613, + 7612, + 7611, + 7513, + 7512, + 7511, + 117508, + 117507, + 117506, + 117505, + 117504, + 117503, + 117502, + 117501, + 117500, + 117499, + 117498, + 117497, + 117496, + 117495, + 117494, + 117493, + 117492, + 117491, + 117482, + 117481, + 117472, + 117471, + 117462, + 117461, + 117452, + 117451, + 117442, + 117441, + 117432, + 117431, + 117422, + 117421, + 117412, + 117411, + 7443, + 7442, + 7441, + 7433, + 7432, + 7431, + 7423, + 7422, + 7421, + 7413, + 7412, + 7411, + 80014, + 80013, + 130771, + 130759, + 130751, + 130731, + 130711, + 130699, + 130691, + 130671, + 130668, + 130661, + 130657, + 130649, + 130641, + 130637, + 130629, + 130621, + 130617, + 130609, + 130599, + 130596, + 130590, + 130587, + 130560, + 130556, + 130548, + 130540, + 130536, + 130530, + 130527, + 130469, + 130461, + 130457, + 130449, + 130446, + 130440, + 130437, + 130431, + 130428, + 130420, + 130416, + 130408, + 34533, + 34532, + 34531, + 33684, + 33683, + 33682, + 33681, + 33674, + 33673, + 33672, + 33671, + 33644, + 33643, + 33642, + 33641, + 33634, + 33633, + 33632, + 33631, + 33583, + 33582, + 33581, + 33574, + 33573, + 33572, + 3504, + 33571, + 3503, + 26037, + 26036, + 26035, + 26034, + 26027, + 26026, + 26025, + 26024, + 26016, + 116220, + 26015, + 116219, + 26014, + 116218, + 26006, + 116210, + 26005, + 116209, + 26004, + 116208, + 33443, + 33442, + 33441, + 116128, + 33433, + 33432, + 33431, + 116118, + 116108, + 33383, + 33661, + 3315, + 33382, + 3314, + 33381, + 3313, + 33652, + 3306, + 33651, + 3305, + 3304, + 3303, + 33343, + 33342, + 33341, + 115999, + 3206, + 3205, + 3204, + 3203, + 124112, + 124111, + 124102, + 124101, + 33054, + 33053, + 33052, + 33043, + 33042, + 33033, + 33032, + 124022, + 124021, + 124020, + 124011, + 124010, + 124009, + 124001, + 32963, + 124000, + 32962, + 32953, + 123990, + 32952, + 32943, + 32942, + 32924, + 32923, + 32922, + 32874, + 32873, + 32872, + 32544, + 32484, + 123512, + 32474, + 123511, + 130194, + 123510, + 123502, + 32464, + 123501, + 123500, + 123492, + 123491, + 123490, + 123482, + 123481, + 123480, + 130163, + 123472, + 123471, + 123470, + 123462, + 123461, + 130144, + 123460, + 123452, + 123451, + 130134, + 123450, + 123442, + 130125, + 123441, + 123440, + 123431, + 123430, + 130113, + 123429, + 123422, + 32384, + 123421, + 32383, + 123420, + 32382, + 130103, + 123411, + 123410, + 123401, + 130063, + 32333, + 115020, + 130054, + 32332, + 123352, + 115001, + 123351, + 115000, + 130034, + 123350, + 123342, + 123341, + 123340, + 123331, + 32293, + 123330, + 32292, + 130013, + 123321, + 123320, + 123312, + 32274, + 123311, + 123302, + 32243, + 32242, + 32241, + 123232, + 123231, + 123230, + 123222, + 123221, + 123220, + 123212, + 123211, + 123210, + 123488, + 123202, + 123201, + 9541, + 114771, + 114770, + 9531, + 114769, + 2006, + 114761, + 114760, + 2004, + 9521, + 114759, + 32054, + 129914, + 114741, + 129893, + 114720, + 129883, + 114710, + 32013, + 129873, + 114700, + 129853, + 114680, + 123012, + 31974, + 129834, + 114661, + 123011, + 31973, + 129833, + 114660, + 123002, + 31964, + 129824, + 114651, + 31954, + 129814, + 114641, + 31953, + 129813, + 114640, + 31943, + 129803, + 114630, + 31934, + 31933, + 129783, + 114610, + 114601, + 31884, + 31883, + 31874, + 130568, + 31873, + 31864, + 31863, + 122862, + 129684, + 114511, + 122851, + 129673, + 114500, + 122811, + 129633, + 114460, + 7939, + 114150, + 7938, + 114149, + 8661, + 8660, + 8652, + 8651, + 130025, + 8641, + 1114, + 1113, + 8622, + 122210, + 1104, + 122209, + 130004, + 8620, + 122202, + 122201, + 8610, + 8603, + 8602, + 8601, + 122171, + 122170, + 122169, + 122161, + 122160, + 122152, + 31114, + 122151, + 31113, + 122150, + 31112, + 122149, + 31111, + 122132, + 122131, + 122130, + 122129, + 122122, + 122121, + 122120, + 122119, + 122112, + 31074, + 122111, + 31073, + 122110, + 31072, + 122109, + 31071, + 984, + 983, + 973, + 964, + 963, + 954, + 953, + 944, + 122327, + 943, + 934, + 933, + 122308, + 924, + 122307, + 923, + 914, + 913, + 122012, + 122011, + 122010, + 122002, + 122001, + 122000, + 894, + 893, + 114621, + 8410, + 884, + 883, + 30943, + 30942, + 874, + 30941, + 873, + 866, + 865, + 864, + 863, + 855, + 854, + 853, + 846, + 845, + 844, + 843, + 836, + 835, + 122218, + 834, + 122217, + 833, + 813, + 803, + 34543, + 34542, + 34541, + 30790, + 30789, + 30788, + 30787, + 129594, + 8210, + 129593, + 8209, + 117161, + 117160, + 30734, + 117159, + 30733, + 117158, + 30732, + 30731, + 30730, + 30729, + 30728, + 30727, + 30726, + 117151, + 30725, + 117150, + 30724, + 117149, + 30723, + 117148, + 117141, + 117140, + 117139, + 117138, + 117131, + 117130, + 117129, + 117128, + 117121, + 117120, + 117119, + 117118, + 117111, + 117110, + 117109, + 117108, + 30679, + 30678, + 30677, + 30676, + 30675, + 30674, + 30583, + 121620, + 30582, + 30581, + 30580, + 30579, + 30578, + 30577, + 30576, + 30575, + 30574, + 30573, + 30572, + 121607, + 121606, + 121605, + 121604, + 121603, + 121602, + 121601, + 121600, + 121599, + 121598, + 121597, + 30559, + 121596, + 30558, + 121595, + 30557, + 121594, + 30556, + 121593, + 30555, + 121592, + 30554, + 121591, + 30553, + 121590, + 30552, + 121589, + 30551, + 121588, + 30550, + 121587, + 30549, + 121586, + 30548, + 121585, + 121584, + 121583, + 121582, + 121581, + 121575, + 121574, + 121573, + 121572, + 121571, + 121566, + 121565, + 121564, + 121563, + 121562, + 121561, + 121560, + 121559, + 121558, + 121557, + 121556, + 121555, + 121554, + 121553, + 121552, + 128374, + 113201, + 121551, + 128373, + 113200, + 121546, + 121545, + 121544, + 121543, + 121542, + 121541, + 121536, + 121535, + 121534, + 121533, + 121532, + 121531, + 121526, + 121525, + 121523, + 121522, + 121521, + 121516, + 121515, + 121514, + 116901, + 121513, + 116900, + 121512, + 116899, + 121511, + 116898, + 121510, + 114130, + 7919, + 121504, + 116891, + 121503, + 116890, + 121502, + 116889, + 121501, + 116888, + 116881, + 116880, + 116879, + 116878, + 116871, + 30445, + 116870, + 30444, + 116869, + 30443, + 116868, + 128302, + 113129, + 128301, + 113128, + 23063, + 7890, + 128300, + 113127, + 128299, + 113126, + 128298, + 113125, + 128297, + 113124, + 128296, + 113123, + 116861, + 128295, + 113122, + 116860, + 128294, + 113121, + 116859, + 128293, + 113120, + 116858, + 128292, + 113119, + 128291, + 113118, + 128290, + 113117, + 128289, + 113116, + 128288, + 113115, + 113114, + 113113, + 116851, + 113112, + 116850, + 113111, + 116849, + 113110, + 116848, + 113109, + 113108, + 113107, + 113106, + 113105, + 113104, + 113103, + 116841, + 113102, + 116840, + 113101, + 116839, + 116838, + 113099, + 113098, + 113097, + 113096, + 113095, + 113094, + 113093, + 116831, + 113092, + 116830, + 113091, + 116829, + 113090, + 116828, + 113089, + 113088, + 113087, + 113086, + 113085, + 113084, + 113083, + 116821, + 113082, + 116820, + 113081, + 116819, + 113080, + 7842, + 116818, + 113079, + 113078, + 113077, + 113076, + 23011, + 7838, + 113075, + 7837, + 113074, + 113073, + 116811, + 113072, + 116810, + 113071, + 116809, + 113070, + 116808, + 113069, + 113068, + 113067, + 128239, + 113066, + 113065, + 113064, + 113063, + 116801, + 113062, + 121412, + 113061, + 121411, + 113060, + 121410, + 113059, + 121409, + 113058, + 121408, + 121407, + 121406, + 121405, + 121404, + 128226, + 113053, + 121403, + 128225, + 113052, + 121402, + 128224, + 113051, + 121401, + 128223, + 113050, + 128222, + 113049, + 128221, + 113048, + 128220, + 113047, + 113046, + 113045, + 113044, + 113043, + 113042, + 113041, + 113040, + 113039, + 113038, + 113037, + 113036, + 113035, + 113034, + 113033, + 113032, + 113031, + 34082, + 128203, + 113030, + 34081, + 128202, + 113029, + 128201, + 113028, + 128200, + 113027, + 113026, + 113025, + 113024, + 113023, + 113022, + 116760, + 113021, + 34072, + 113020, + 34071, + 113019, + 113018, + 128190, + 113017, + 128189, + 113016, + 128188, + 113015, + 128187, + 113014, + 128186, + 113013, + 128185, + 113012, + 116750, + 128184, + 113011, + 128183, + 113010, + 128182, + 113009, + 128181, + 113008, + 128180, + 113007, + 128179, + 113006, + 128178, + 113005, + 128177, + 113004, + 128176, + 113003, + 128175, + 113002, + 128174, + 113001, + 34052, + 128173, + 113000, + 34051, + 120510, + 34042, + 34041, + 120506, + 120503, + 120499, + 121330, + 121329, + 120495, + 121328, + 121327, + 30289, + 121326, + 30288, + 121325, + 30287, + 120491, + 120487, + 120483, + 116701, + 120479, + 120475, + 121307, + 121306, + 121305, + 121304, + 121303, + 121302, + 120468, + 121301, + 121300, + 121298, + 128120, + 112947, + 120464, + 121297, + 128119, + 112946, + 121296, + 128118, + 112945, + 121295, + 128117, + 112944, + 121294, + 128116, + 112943, + 1061186, + 120460, + 33994, + 121293, + 128115, + 112942, + 121292, + 128114, + 112941, + 33992, + 121291, + 128113, + 112940, + 120457, + 33991, + 121290, + 128112, + 112939, + 128111, + 112938, + 112937, + 120454, + 112936, + 112935, + 112934, + 120451, + 112933, + 112932, + 112931, + 120448, + 128103, + 112930, + 128102, + 112929, + 128101, + 112928, + 120445, + 112927, + 112926, + 128098, + 112925, + 120442, + 128097, + 112924, + 128096, + 112923, + 116661, + 128095, + 112922, + 120439, + 116660, + 128094, + 112921, + 116659, + 128093, + 112920, + 116658, + 128092, + 112919, + 120436, + 128091, + 112918, + 128090, + 112917, + 128089, + 112916, + 120433, + 128088, + 112915, + 128087, + 112914, + 128086, + 112913, + 120430, + 116651, + 116650, + 116649, + 116648, + 120426, + 128081, + 112908, + 128080, + 112907, + 128079, + 112906, + 128078, + 112905, + 120422, + 128077, + 112904, + 128076, + 112903, + 116640, + 120418, + 116639, + 116638, + 120414, + 120410, + 30205, + 116630, + 30204, + 116629, + 30203, + 116628, + 1061966, + 30202, + 120406, + 1061965, + 1061963, + 1061962, + 120402, + 1061961, + 30197, + 1061960, + 30196, + 30195, + 120399, + 30194, + 30193, + 30192, + 30191, + 120395, + 1061954, + 30190, + 1061953, + 1061952, + 1061118, + 120392, + 1061951, + 1061950, + 33923, + 116610, + 1061114, + 120388, + 33922, + 116609, + 33921, + 1061945, + 1061111, + 120385, + 1061108, + 120382, + 1061941, + 1061940, + 121213, + 1061105, + 120379, + 121212, + 121211, + 1061936, + 121210, + 1061935, + 121209, + 120375, + 121208, + 121207, + 121206, + 30168, + 120372, + 121205, + 30167, + 121204, + 30166, + 121203, + 30165, + 1061928, + 121202, + 30164, + 120368, + 1061927, + 121201, + 30163, + 1061926, + 30162, + 1061925, + 30161, + 1061924, + 30160, + 120364, + 1061923, + 1061922, + 1061921, + 7606, + 120361, + 7605, + 7604, + 7603, + 7602, + 120357, + 7601, + 7600, + 120353, + 1061912, + 1061911, + 1061910, + 120350, + 1061909, + 33883, + 1061908, + 33882, + 1061907, + 33881, + 1061906, + 120346, + 120342, + 120339, + 120336, + 120333, + 1061055, + 120329, + 120325, + 123329, + 32291, + 32252, + 127385, + 32251, + 129852, + 114679, + 127032, + 26038, + 116201, + 7918, + 114129, + 129632, + 114459, + 122849, + 129671, + 114498, + 7917, + 114128, + 130465, + 129631, + 114458, + 129670, + 114497, + 127012, + 20801, + 26017, + 116221, + 7898, + 114109, + 7897, + 114108, + 127002, + 130687, + 129863, + 114690, + 118507, + 26009, + 116213, + 26008, + 116212, + 26007, + 116211, + 118502, + 129843, + 114670, + 126004, + 123001, + 31963, + 129823, + 114650, + 20746, + 126932, + 126922, + 126912, + 126911, + 114600, + 118402, + 126882, + 127021, + 5637, + 126872, + 126862, + 126832, + 20621, + 126822, + 122861, + 129683, + 114510, + 28118, + 126951, + 28108, + 126941, + 5557, + 28107, + 28106, + 126939, + 118310, + 28105, + 126938, + 5554, + 118309, + 28104, + 126937, + 118308, + 122841, + 31803, + 129663, + 114490, + 28103, + 126936, + 118307, + 122831, + 129653, + 114480, + 126918, + 126917, + 122821, + 129643, + 114470, + 126916, + 122820, + 129642, + 114469, + 122859, + 129681, + 114508, + 122819, + 129641, + 114468, + 129680, + 114507, + 126898, + 5514, + 126897, + 5513, + 122801, + 129623, + 114450, + 126896, + 5512, + 122800, + 129622, + 114449, + 122839, + 31801, + 129661, + 114488, + 24244, + 129621, + 114448, + 129660, + 114487, + 126891, + 5507, + 126890, + 5506, + 126889, + 5505, + 126888, + 5504, + 126887, + 5503, + 122791, + 129613, + 114440, + 126886, + 5502, + 122790, + 129612, + 114439, + 122829, + 129651, + 114478, + 126885, + 5501, + 122789, + 129611, + 114438, + 129650, + 114477, + 122781, + 129603, + 114430, + 122780, + 129602, + 8218, + 114429, + 20525, + 122779, + 129601, + 8217, + 114428, + 129640, + 114467, + 20524, + 122772, + 122771, + 122770, + 129592, + 8208, + 114419, + 122769, + 129591, + 8207, + 114418, + 129630, + 114457, + 122762, + 129584, + 114411, + 126718, + 122761, + 129583, + 114410, + 126717, + 122760, + 129582, + 114409, + 126716, + 129581, + 114408, + 24243, + 129620, + 114447, + 126715, + 126712, + 126711, + 126710, + 126709, + 129574, + 114401, + 126708, + 122751, + 129573, + 114400, + 126707, + 122750, + 129572, + 114399, + 126706, + 129571, + 114398, + 129610, + 114437, + 126705, + 31704, + 129564, + 114391, + 31703, + 129563, + 114390, + 20486, + 31702, + 129562, + 114389, + 20485, + 31701, + 129561, + 114388, + 130434, + 129600, + 8216, + 114427, + 20484, + 118202, + 118201, + 9142, + 129553, + 114380, + 129552, + 114379, + 129551, + 114378, + 130424, + 129590, + 8206, + 114417, + 20474, + 9132, + 129543, + 114370, + 130515, + 9131, + 129542, + 114369, + 9130, + 129541, + 114368, + 129580, + 114407, + 126808, + 5424, + 31674, + 9123, + 129534, + 114361, + 126807, + 5423, + 31673, + 9122, + 129533, + 114360, + 126806, + 5422, + 122710, + 31672, + 130505, + 9121, + 129532, + 114359, + 31671, + 115192, + 9120, + 129531, + 114358, + 130404, + 129570, + 114397, + 122702, + 130497, + 9113, + 129524, + 114351, + 5413, + 122701, + 129523, + 114350, + 9111, + 129522, + 114349, + 9110, + 129521, + 114348, + 129560, + 114387, + 5404, + 9103, + 129514, + 114341, + 5403, + 9102, + 129513, + 114340, + 129842, + 114669, + 126003, + 130715, + 129881, + 114708, + 129511, + 114338, + 129550, + 114377, + 129841, + 114668, + 129880, + 114707, + 23062, + 7889, + 114100, + 23061, + 7888, + 114099, + 7887, + 114098, + 127224, + 127223, + 123010, + 31972, + 32011, + 129871, + 114698, + 127222, + 123009, + 31971, + 130665, + 129831, + 114658, + 129870, + 114697, + 31404, + 23053, + 7880, + 114091, + 31403, + 23052, + 7879, + 114090, + 31402, + 23051, + 7878, + 114089, + 31401, + 7877, + 114088, + 127216, + 127215, + 127214, + 127213, + 31962, + 129822, + 114649, + 20745, + 130695, + 129861, + 114688, + 127212, + 31961, + 129821, + 114648, + 20744, + 129860, + 114687, + 31394, + 7870, + 114081, + 31393, + 7869, + 114080, + 31392, + 7868, + 114079, + 31391, + 7867, + 114078, + 127207, + 127206, + 127205, + 127204, + 127203, + 31952, + 129812, + 114639, + 129851, + 114678, + 127202, + 31951, + 130645, + 129811, + 114638, + 129850, + 114677, + 31384, + 23033, + 7860, + 114071, + 31383, + 23032, + 7859, + 114070, + 31382, + 23031, + 7858, + 114069, + 31381, + 7857, + 114068, + 31942, + 129802, + 114629, + 31941, + 129801, + 114628, + 130674, + 115501, + 129840, + 114667, + 31374, + 23021, + 7848, + 114059, + 7847, + 114058, + 123229, + 31932, + 31931, + 130625, + 129830, + 114657, + 31364, + 123219, + 129782, + 114609, + 129781, + 114608, + 126915, + 5531, + 129820, + 114647, + 23003, + 7830, + 114041, + 23002, + 7829, + 114040, + 122390, + 129212, + 23001, + 7828, + 114039, + 129211, + 7827, + 114038, + 128085, + 112912, + 128084, + 112911, + 123209, + 123487, + 128083, + 112910, + 128082, + 112909, + 114599, + 130605, + 24394, + 114598, + 129810, + 114637, + 129203, + 7819, + 114030, + 129202, + 7818, + 114029, + 995, + 129201, + 7817, + 114028, + 124119, + 128075, + 112902, + 128074, + 112901, + 128073, + 112900, + 127154, + 128072, + 127153, + 35153, + 127152, + 35152, + 35151, + 987, + 122371, + 129193, + 7809, + 114020, + 111154, + 986, + 122370, + 129192, + 7808, + 114019, + 111153, + 985, + 129191, + 7807, + 114018, + 111152, + 111151, + 128065, + 111150, + 128064, + 111149, + 128063, + 128062, + 111145, + 129183, + 114010, + 122360, + 976, + 129182, + 114009, + 129181, + 114008, + 128055, + 128054, + 127135, + 128053, + 127134, + 128052, + 127133, + 31882, + 127132, + 111085, + 111084, + 916, + 111083, + 915, + 111082, + 111081, + 6611, + 1060231, + 119505, + 111080, + 6610, + 1060230, + 119504, + 130775, + 2013, + 9530, + 114768, + 127075, + 20864, + 6609, + 1060229, + 119503, + 127074, + 20863, + 6608, + 1060228, + 119502, + 127073, + 20862, + 122860, + 129682, + 114509, + 28122, + 24344, + 31861, + 127072, + 20861, + 28121, + 24343, + 5004, + 5003, + 5002, + 906, + 31252, + 5001, + 905, + 31251, + 130084, + 8700, + 6601, + 6600, + 123109, + 2003, + 9520, + 114758, + 127065, + 127064, + 127063, + 122850, + 129672, + 114499, + 31851, + 129711, + 114538, + 127062, + 126805, + 5421, + 28111, + 130544, + 129710, + 114537, + 111066, + 111065, + 111064, + 896, + 111063, + 895, + 111062, + 35593, + 35592, + 122830, + 129652, + 114479, + 5402, + 9141, + 122869, + 31831, + 127042, + 130524, + 9140, + 114321, + 114320, + 114319, + 119340, + 129903, + 114730, + 127037, + 32961, + 875, + 114318, + 115191, + 129530, + 114357, + 119339, + 32053, + 129913, + 114740, + 127047, + 111051, + 885, + 111052, + 886, + 111053, + 129501, + 114328, + 129540, + 114367, + 1060075, + 119349, + 111054, + 129502, + 114329, + 114330, + 127052, + 5411, + 28101, + 118305, + 129700, + 114527, + 114331, + 127053, + 122840, + 31802, + 129662, + 114489, + 5412, + 28102, + 126935, + 5551, + 118306, + 122879, + 31841, + 129701, + 114528, + 122787, + 1403, + 7947, + 114158, + 127054, + 32061, + 130755, + 9510, + 129921, + 114748, + 127055, + 32062, + 9511, + 129922, + 114749, + 127056, + 111060, + 123101, + 32063, + 129923, + 114750, + 127057, + 111061, + 124019, + 127082, + 130564, + 111086, + 127083, + 122870, + 31832, + 31871, + 111087, + 127084, + 122871, + 31833, + 31872, + 111088, + 128002, + 6618, + 9540, + 6619, + 6620, + 6621, + 122309, + 925, + 926, + 127092, + 127093, + 127094, + 128012, + 112005, + 128013, + 112006, + 128014, + 112007, + 128015, + 112008, + 935, + 122320, + 936, + 127102, + 127103, + 127104, + 112015, + 33031, + 945, + 946, + 127112, + 127113, + 31862, + 127114, + 128032, + 128033, + 128034, + 33041, + 128035, + 955, + 956, + 127122, + 127123, + 127124, + 127125, + 127126, + 127127, + 33051, + 965, + 966, + 129174, + 114001, + 130485, + 129512, + 114339, + 5401, + 7899, + 114110, + 7900, + 114111, + 129890, + 114717, + 129559, + 114386, + 9543, + 32253, + 127386, + 6002, + 5414, + 9548, + 114118, + 114119, + 114120, + 114121, + 118505, + 129862, + 114689, + 118506, + 130735, + 123301, + 127396, + 130707, + 127401, + 6017, + 129910, + 114737, + 32012, + 129872, + 114699, + 32051, + 129911, + 114738, + 1105, + 31451, + 114138, + 1106, + 31452, + 114139, + 130719, + 114140, + 114141, + 9509, + 129920, + 114747, + 29766, + 7215, + 129882, + 114709, + 130727, + 1115, + 7937, + 114148, + 127025, + 2002, + 9519, + 114757, + 111147, + 35282, + 127026, + 111148, + 35283, + 122788, + 1404, + 130739, + 118802, + 127035, + 2012, + 9529, + 114767, + 118803, + 127036, + 130022, + 24002, + 114206, + 130747, + 114168, + 114207, + 114169, + 24004, + 114208, + 114170, + 114171, + 127302, + 127045, + 9539, + 114777, + 127303, + 32052, + 9501, + 129912, + 114739, + 127046, + 127304, + 123349, + 127305, + 8005, + 114216, + 114178, + 8006, + 114217, + 114179, + 8007, + 114218, + 114180, + 114181, + 127312, + 118822, + 127313, + 118823, + 127314, + 118824, + 127315, + 118825, + 114226, + 130767, + 114227, + 114228, + 126501, + 32331, + 126502, + 129409, + 114236, + 126504, + 129410, + 114237, + 126505, + 114238, + 130779, + 126506, + 114200, + 126507, + 114201, + 126508, + 126509, + 126510, + 129419, + 114246, + 130787, + 129420, + 114247, + 114209, + 31561, + 129421, + 114248, + 114210, + 114211, + 130072, + 1501, + 114219, + 31571, + 114220, + 114221, + 127352, + 118862, + 127353, + 118863, + 127354, + 114229, + 114268, + 114230, + 114231, + 127362, + 31854, + 129714, + 114541, + 28115, + 126948, + 127363, + 28116, + 126949, + 127364, + 28117, + 126950, + 123409, + 127365, + 126851, + 5606, + 115110, + 114276, + 6503, + 114277, + 6504, + 114239, + 114278, + 6505, + 129413, + 114240, + 129414, + 114241, + 5025, + 127372, + 5026, + 127373, + 5027, + 127374, + 5028, + 123419, + 32381, + 127375, + 31562, + 9011, + 129422, + 114249, + 114288, + 31563, + 129423, + 114250, + 127382, + 127383, + 127384, + 115131, + 114297, + 31572, + 114298, + 31573, + 114260, + 127392, + 118902, + 127393, + 118903, + 127394, + 118904, + 123439, + 130122, + 127395, + 118905, + 115141, + 114307, + 6534, + 114269, + 114308, + 6535, + 114270, + 114271, + 6018, + 118912, + 118913, + 118914, + 123449, + 118915, + 115151, + 114317, + 114279, + 1060026, + 119300, + 114280, + 114281, + 21201, + 118922, + 21202, + 118923, + 21203, + 118924, + 123459, + 21204, + 118925, + 115160, + 114326, + 119308, + 115161, + 129500, + 114327, + 119309, + 114289, + 119310, + 114290, + 114291, + 5215, + 126600, + 126601, + 114337, + 6564, + 119319, + 114299, + 6565, + 119320, + 114300, + 114301, + 129520, + 114347, + 119329, + 20404, + 114309, + 119330, + 20405, + 114310, + 114311, + 123469, + 115118, + 130152, + 118942, + 123479, + 115128, + 118952, + 118953, + 118954, + 123489, + 130172, + 118955, + 118962, + 118963, + 118964, + 123499, + 115148, + 130182, + 118965, + 118972, + 123509, + 118982, + 121518, + 121520, + 118992, + 121528, + 7839, + 23012, + 121567, + 121529, + 7840, + 23013, + 121568, + 121530, + 7841, + 23014, + 121538, + 114160, + 7949, + 7849, + 114060, + 23022, + 121539, + 114161, + 7950, + 7850, + 114061, + 23023, + 121540, + 127502, + 121548, + 121549, + 121550, + 127512, + 1061770, + 121044, + 7455, + 1061771, + 121045, + 7456, + 1061772, + 121046, + 7457, + 1061773, + 121047, + 7458, + 120213, + 127522, + 7465, + 7466, + 120221, + 121570, + 7467, + 7468, + 127532, + 21321, + 1061790, + 7475, + 1061791, + 7476, + 121580, + 1061792, + 7477, + 1061793, + 7478, + 127542, + 21331, + 7485, + 7486, + 7487, + 120242, + 7488, + 127552, + 1061810, + 7495, + 7496, + 7497, + 7498, + 127562, + 1061820, + 7505, + 7506, + 7507, + 7508, + 120263, + 127572, + 1061830, + 121104, + 7515, + 120270, + 121105, + 7516, + 121106, + 7517, + 121107, + 7518, + 1061840, + 121114, + 7525, + 1061841, + 121115, + 7526, + 120281, + 121116, + 1061843, + 121117, + 1061850, + 121124, + 1061851, + 121125, + 1061852, + 121126, + 120292, + 1061853, + 121127, + 127602, + 1061860, + 121134, + 1061861, + 121135, + 121136, + 121137, + 120310, + 1061048, + 120322, + 21441, + 21442, + 21443, + 21444, + 21471, + 21472, + 21473, + 21474, + 130202, + 118985, + 116041, + 116042, + 116043, + 130243, + 115178, + 6101, + 118995, + 116051, + 130251, + 116052, + 24003, + 130214, + 116053, + 115181, + 116054, + 6507, + 116061, + 116062, + 32541, + 130224, + 116063, + 32542, + 130263, + 116071, + 130271, + 116072, + 130374, + 115201, + 130235, + 127515, + 115108, + 130281, + 6537, + 127525, + 123609, + 32571, + 123610, + 32572, + 130255, + 123611, + 32573, + 1060028, + 119302, + 127535, + 21324, + 116101, + 119303, + 119304, + 32543, + 119305, + 119312, + 127545, + 21334, + 116111, + 115138, + 130311, + 119313, + 119314, + 119315, + 6567, + 119322, + 127555, + 119323, + 119324, + 123601, + 115111, + 130284, + 115508, + 119325, + 119332, + 127565, + 116131, + 115158, + 130331, + 119333, + 116132, + 32611, + 119334, + 116133, + 32612, + 119335, + 116134, + 32613, + 119342, + 127575, + 115307, + 115168, + 130341, + 119343, + 130481, + 115308, + 119344, + 119345, + 115198, + 130371, + 32871, + 9550, + 115171, + 130344, + 6508, + 119402, + 6509, + 119403, + 6510, + 119404, + 119405, + 119412, + 119413, + 6520, + 119414, + 119415, + 119422, + 119423, + 119424, + 32921, + 119425, + 6538, + 119432, + 6539, + 119433, + 6540, + 119434, + 119435, + 32941, + 32951, + 121517, + 121527, + 121537, + 114159, + 7948, + 121547, + 7464, + 7474, + 115100, + 114266, + 115101, + 114267, + 115130, + 130303, + 114296, + 6533, + 115140, + 114306, + 115150, + 130323, + 114316, + 6563, + 119318, + 115170, + 114336, + 9503, + 119328, + 20403, + 115180, + 130353, + 129519, + 114346, + 119338, + 115190, + 130363, + 129529, + 114356, + 9523, + 1060074, + 119348, + 129539, + 114366, + 9533, + 130383, + 129549, + 114376, + 9553, + 114396, + 126812, + 5428, + 130412, + 129578, + 114405, + 129579, + 114406, + 20472, + 129588, + 8204, + 114415, + 20473, + 129589, + 8205, + 114416, + 118203, + 129598, + 8214, + 114425, + 20483, + 118204, + 129599, + 8215, + 114426, + 126703, + 129608, + 114435, + 126704, + 130443, + 129609, + 114436, + 126713, + 24241, + 129618, + 114445, + 126714, + 130453, + 24242, + 129619, + 114446, + 129628, + 114455, + 129629, + 114456, + 20522, + 129638, + 114465, + 26002, + 116206, + 20523, + 130473, + 129639, + 114466, + 26003, + 116207, + 115309, + 129648, + 114475, + 26012, + 116216, + 115310, + 129649, + 114476, + 26013, + 116217, + 126892, + 5508, + 129658, + 114485, + 26022, + 130493, + 9109, + 129659, + 114486, + 26023, + 9118, + 26032, + 9119, + 26033, + 130512, + 9128, + 129678, + 114505, + 26042, + 9129, + 129679, + 114506, + 9138, + 5400, + 5409, + 118303, + 129698, + 8314, + 114525, + 5410, + 118304, + 130533, + 129699, + 114526, + 126803, + 5419, + 28109, + 126942, + 129708, + 114535, + 126804, + 5420, + 28110, + 129709, + 114536, + 24001, + 114205, + 5429, + 28119, + 126952, + 130552, + 24341, + 5430, + 28120, + 24342, + 114215, + 126823, + 126824, + 114225, + 126833, + 20622, + 130572, + 129408, + 114235, + 126503, + 129418, + 114245, + 1500, + 126863, + 130602, + 24391, + 129438, + 114265, + 126873, + 114605, + 115109, + 114275, + 6502, + 126883, + 127022, + 5638, + 114615, + 115119, + 114285, + 6512, + 115120, + 130293, + 114286, + 6513, + 115121, + 114287, + 6514, + 126893, + 5509, + 118403, + 114625, + 115129, + 114295, + 129808, + 114635, + 129809, + 114636, + 115139, + 114305, + 6532, + 126913, + 129818, + 114645, + 126914, + 5530, + 130653, + 129819, + 114646, + 115149, + 114315, + 126923, + 129828, + 114655, + 126924, + 129829, + 114656, + 115159, + 114325, + 119307, + 126933, + 129838, + 114665, + 126934, + 129839, + 114666, + 115169, + 114335, + 6562, + 119317, + 126943, + 115509, + 129848, + 114675, + 126944, + 130683, + 115510, + 129849, + 114676, + 20402, + 115179, + 129518, + 114345, + 9502, + 119327, + 126953, + 129858, + 114685, + 129859, + 114686, + 115189, + 130501, + 9117, + 129528, + 114355, + 9512, + 119337, + 129868, + 114695, + 130703, + 129869, + 114696, + 9127, + 129538, + 114365, + 9522, + 119347, + 129878, + 114705, + 129879, + 114706, + 130521, + 9137, + 129548, + 114375, + 9532, + 129888, + 114715, + 130723, + 129889, + 114716, + 130392, + 129558, + 114385, + 9542, + 118503, + 129898, + 114725, + 126801, + 5417, + 9551, + 118504, + 129899, + 114726, + 126802, + 5418, + 114395, + 127003, + 129908, + 114735, + 127004, + 130743, + 129909, + 114736, + 127013, + 20802, + 9507, + 129918, + 114745, + 127014, + 20803, + 9508, + 129919, + 114746, + 29765, + 7214, + 127023, + 9517, + 114755, + 127024, + 130763, + 2001, + 9518, + 114756, + 127033, + 2010, + 114765, + 127034, + 2011, + 9528, + 114766, + 127043, + 9537, + 114775, + 127044, + 130783, + 9538, + 114776, + 118983, + 130239, + 118984, + 118993, + 116049, + 118994, + 116050, + 116059, + 130259, + 116060, + 127503, + 116069, + 116070, + 127513, + 127514, + 127523, + 127524, + 127533, + 21322, + 127534, + 21323, + 116100, + 127543, + 21332, + 116109, + 127544, + 21333, + 116110, + 127553, + 116119, + 127554, + 116120, + 127563, + 116129, + 127564, + 116130, + 127573, + 115305, + 127574, + 115306, + 130350, + 115186, + 130359, + 127603, + 130380, + 26001, + 116205, + 26010, + 116214, + 26011, + 116215, + 26018, + 116222, + 26019, + 116223, + 26020, + 26021, + 29767, + 128600, + 7216, + 26028, + 26029, + 26030, + 26031, + 26039, + 26040, + 26041, + 126834, + 20623, + 115401, + 122880, + 31842, + 129702, + 114529, + 31881, + 122881, + 31843, + 129703, + 114530, + 126842, + 126843, + 126844, + 126845, + 28151, + 5600, + 130584, + 28112, + 126945, + 31852, + 129712, + 114539, + 126846, + 28152, + 5601, + 9201, + 28113, + 126946, + 31853, + 129713, + 114540, + 126847, + 5602, + 28114, + 126947, + 5563, + 126852, + 5607, + 126853, + 5608, + 126854, + 5609, + 130593, + 126855, + 28161, + 5610, + 126864, + 24392, + 28131, + 5580, + 126865, + 24393, + 28132, + 5581, + 126874, + 130613, + 129779, + 114606, + 28141, + 126875, + 129780, + 114607, + 28142, + 5591, + 126884, + 126894, + 5510, + 118404, + 130633, + 114626, + 126895, + 5511, + 118405, + 129800, + 114627, + 28162, + 5611, + 7450, + 33741, + 121040, + 7451, + 1060932, + 120206, + 33742, + 121041, + 7452, + 33743, + 121042, + 7453, + 121043, + 7454, + 121048, + 7459, + 121049, + 7460, + 121050, + 7461, + 121051, + 7462, + 120217, + 121052, + 7463, + 7469, + 1061785, + 7470, + 1061786, + 7471, + 1061787, + 7472, + 120227, + 7473, + 1061794, + 7479, + 120234, + 7480, + 1061796, + 7481, + 1061797, + 7482, + 7483, + 120238, + 7484, + 7489, + 1061805, + 7490, + 1061806, + 7491, + 7492, + 7493, + 120248, + 1061809, + 7494, + 7499, + 7500, + 120255, + 7501, + 7502, + 7503, + 7504, + 120259, + 7509, + 7510, + 1061826, + 120266, + 121101, + 121102, + 1061829, + 121103, + 7514, + 121108, + 7519, + 1061000, + 120274, + 1061835, + 121109, + 7520, + 121110, + 121111, + 120277, + 121112, + 1061839, + 121113, + 7524, + 121118, + 121119, + 120285, + 33821, + 116508, + 1061846, + 121120, + 33822, + 116509, + 1061847, + 121121, + 33823, + 116510, + 1061848, + 121122, + 120288, + 1061849, + 121123, + 1061854, + 121128, + 121129, + 1061856, + 121130, + 120296, + 1061857, + 121131, + 1061858, + 121132, + 1061859, + 121133, + 120299, + 1061864, + 121138, + 1061865, + 1061866, + 120306, + 120313, + 3505, + 120316, + 3506, + 120319, + 34671, + 34672, + 34673, + 34761, + 34762, + 34763, + 110001, + 110002, + 110003, + 110011, + 110012, + 110013, + 110014, + 110021, + 110022, + 110023, + 110024, + 110042, + 110043, + 110044, + 125225, + 110052, + 125226, + 110053, + 125227, + 110054, + 125234, + 110061, + 125235, + 110062, + 125236, + 110063, + 125237, + 110064, + 125244, + 110071, + 110072, + 110073, + 34911, + 110081, + 34912, + 110082, + 34913, + 110083, + 110091, + 110092, + 110093, + 110094, + 110101, + 110102, + 110103, + 110104, + 110112, + 110113, + 110114, + 126001, + 126002, + 110032, + 125205, + 110033, + 125206, + 110034, + 125207, + 35031, + 35032, + 35033, + 111146, + 35281, + 35591, + 118301, + 20468, + 20469, + 20470, + 20471, + 5583, + 126701, + 126702, + 126719, + 5613, + 126720, + 5614, + 126999, + 5615, + 35691, + 35692, + 35693, + 35701, + 127017, + 5633, + 35702, + 127018, + 5634, + 35703, + 127019, + 5635, + 118401, + 118406, + 118407, + 5405, + 5406, + 5407, + 5408, + 126799, + 5415, + 35761, + 5416, + 35762, + 126809, + 5425, + 35771, + 127087, + 5703, + 126810, + 5426, + 35772, + 126811, + 5427, + 35773, + 7280, + 7281, + 7282, + 120037, + 7283, + 7284, + 7285, + 7286, + 120041, + 7287, + 801, + 802, + 810, + 811, + 812, + 122205, + 821, + 122211, + 827, + 122212, + 828, + 122213, + 829, + 122214, + 830, + 122215, + 831, + 122216, + 832, + 837, + 838, + 839, + 840, + 841, + 842, + 847, + 848, + 849, + 851, + 852, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 867, + 868, + 869, + 870, + 871, + 872, + 876, + 877, + 878, + 879, + 897, + 898, + 880, + 881, + 882, + 887, + 888, + 114616, + 8405, + 889, + 114617, + 8406, + 890, + 114618, + 8407, + 891, + 114619, + 8408, + 892, + 114620, + 8409, + 899, + 900, + 31253, + 907, + 31254, + 908, + 909, + 910, + 911, + 912, + 122301, + 917, + 122302, + 918, + 122303, + 919, + 122304, + 920, + 122305, + 921, + 122306, + 922, + 927, + 928, + 929, + 930, + 931, + 932, + 122321, + 937, + 122322, + 938, + 122323, + 939, + 122324, + 940, + 122325, + 941, + 122326, + 942, + 947, + 948, + 949, + 950, + 951, + 957, + 958, + 959, + 960, + 961, + 962, + 967, + 968, + 969, + 970, + 971, + 972, + 122361, + 977, + 122362, + 978, + 122363, + 979, + 122364, + 980, + 122365, + 981, + 998, + 999, + 1000, + 122391, + 122392, + 31354, + 31453, + 1107, + 31454, + 1108, + 1109, + 1110, + 1111, + 1112, + 7845, + 114056, + 7846, + 114057, + 122784, + 1400, + 7944, + 114155, + 122785, + 1401, + 7945, + 114156, + 122786, + 1402, + 7946, + 114157, + 2007, + 114762, + 114763, + 2009, + 114764, + 123485, + 123486, + 3102, + 33451, + 33452, + 33453, + 3108, + 3109, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3121, + 3122, + 3123, + 3124, + 3125, + 3126, + 3127, + 3128, + 3129, + 3130, + 3131, + 3132, + 3133, + 3134, + 3200, + 3201, + 3202, + 3207, + 3208, + 3300, + 3301, + 3302, + 33653, + 3307, + 33654, + 3308, + 3309, + 3310, + 3311, + 3312, + 33662, + 3316, + 33663, + 3317, + 33664, + 3318, + 3319, + 3320, + 3321, + 3500, + 3501, + 3502, + 3507, + 3508, + 3509, + 3510, + 3511, + 3512, + 5582, + 127005, + 5621, + 127015, + 20804, + 5631, + 127016, + 5632, + 127020, + 5636, + 5603, + 5604, + 5605, + 5612, + 127085, + 5701, + 127086, + 5702, + 110000, + 110004, + 110005, + 110006, + 110007, + 125041, + 110008, + 110009, + 110010, + 110015, + 110016, + 110017, + 125051, + 125191, + 110018, + 110019, + 110020, + 110025, + 110026, + 125061, + 125208, + 110035, + 125071, + 110045, + 34043, + 125081, + 125228, + 110055, + 110056, + 110057, + 34053, + 125091, + 125231, + 110058, + 125232, + 110059, + 125233, + 110060, + 125238, + 110065, + 125240, + 110067, + 125101, + 125241, + 110068, + 125242, + 110069, + 110070, + 110074, + 110075, + 110076, + 110077, + 34073, + 125111, + 110078, + 110079, + 110084, + 110085, + 110086, + 110087, + 34083, + 125121, + 110088, + 110089, + 110090, + 110095, + 110096, + 110097, + 125131, + 110098, + 110099, + 110100, + 110105, + 110106, + 110200, + 112000, + 112001, + 112002, + 112003, + 112004, + 112009, + 112010, + 112011, + 112012, + 112013, + 112014, + 112101, + 112102, + 112103, + 112104, + 112105, + 112106, + 112107, + 112108, + 112110, + 112111, + 112112, + 112113, + 112119, + 112120, + 127387, + 127388, + 6004, + 6015, + 127400, + 6016, + 6501, + 6506, + 6515, + 6511, + 6516, + 6531, + 6536, + 6551, + 119306, + 6561, + 119316, + 6566, + 119321, + 7001, + 119756, + 7002, + 119757, + 7003, + 119758, + 7004, + 119759, + 7005, + 119760, + 7006, + 119761, + 7007, + 119762, + 7008, + 119763, + 7009, + 119764, + 7010, + 119765, + 7011, + 119766, + 7012, + 119767, + 7013, + 119768, + 7014, + 119769, + 7015, + 119770, + 7016, + 1030151, + 119771, + 128401, + 7017, + 1030152, + 119772, + 128402, + 7018, + 1030153, + 119773, + 128403, + 7019, + 1030154, + 119774, + 7020, + 7021, + 1030157, + 119777, + 1030158, + 119778, + 128410, + 128411, + 128412, + 7028, + 128413, + 7029, + 128414, + 7030, + 128415, + 7031, + 128416, + 128417, + 7033, + 128418, + 128419, + 128420, + 7036, + 128421, + 7037, + 128422, + 7038, + 128423, + 7039, + 128425, + 7041, + 128426, + 7042, + 128427, + 7043, + 128428, + 7044, + 128429, + 7045, + 7046, + 119801, + 7047, + 119802, + 7048, + 119803, + 7051, + 119806, + 7052, + 119807, + 7053, + 119808, + 7054, + 119809, + 7055, + 119810, + 7056, + 119811, + 7057, + 119812, + 7058, + 119813, + 7059, + 119814, + 7061, + 119816, + 7062, + 119817, + 7063, + 119818, + 7064, + 119819, + 7065, + 119820, + 7071, + 119826, + 7072, + 119827, + 7073, + 7074, + 7075, + 135003, + 119830, + 135004, + 119831, + 119832, + 7079, + 119834, + 7080, + 119835, + 7081, + 7082, + 7083, + 7084, + 1060565, + 119839, + 7085, + 1060566, + 119840, + 7086, + 1060567, + 119841, + 7087, + 1060568, + 119842, + 7092, + 7093, + 7094, + 7095, + 7096, + 7097, + 7098, + 7099, + 7103, + 7104, + 7105, + 7106, + 7107, + 7108, + 7109, + 7110, + 7111, + 7112, + 7113, + 7114, + 7115, + 128500, + 7116, + 128501, + 7117, + 128502, + 7118, + 128503, + 7119, + 128505, + 7121, + 128506, + 7122, + 128507, + 7123, + 128508, + 7124, + 128511, + 7127, + 128512, + 7128, + 128513, + 7129, + 128514, + 7130, + 7131, + 128516, + 7132, + 128517, + 7133, + 128518, + 7134, + 128519, + 7135, + 128520, + 7136, + 128521, + 7137, + 128522, + 7138, + 7139, + 7140, + 128535, + 7151, + 128536, + 7152, + 128537, + 7153, + 128538, + 7154, + 128539, + 7155, + 128540, + 7156, + 128541, + 7157, + 7158, + 7159, + 7160, + 7161, + 7162, + 7163, + 7164, + 7165, + 128550, + 7166, + 128551, + 7167, + 128552, + 7168, + 128553, + 7169, + 128554, + 7170, + 128555, + 7171, + 128556, + 7172, + 128557, + 7173, + 128558, + 7174, + 128559, + 7175, + 128560, + 7176, + 128561, + 7177, + 7178, + 7179, + 7180, + 7181, + 7182, + 7183, + 7184, + 7185, + 7186, + 7187, + 7188, + 7189, + 7190, + 7191, + 7192, + 7193, + 7194, + 7195, + 7196, + 7197, + 7198, + 7199, + 7200, + 7201, + 7202, + 7203, + 7204, + 7205, + 7206, + 7207, + 7208, + 7209, + 7210, + 7211, + 7212, + 119828, + 135001, + 7213, + 119829, + 135002, + 128601, + 37563, + 7217, + 128602, + 7218, + 128603, + 7219, + 7220, + 119836, + 135009, + 128605, + 7221, + 119837, + 135010, + 128606, + 7222, + 119838, + 135011, + 128607, + 7223, + 7224, + 128609, + 7225, + 128610, + 7226, + 128611, + 7227, + 7228, + 128613, + 7229, + 128614, + 7230, + 128615, + 7231, + 128616, + 7232, + 128617, + 7233, + 128618, + 7234, + 128619, + 7235, + 128620, + 7236, + 128621, + 7237, + 128624, + 7240, + 7242, + 7243, + 119999, + 7245, + 7246, + 120001, + 7247, + 7248, + 7249, + 1060730, + 120004, + 7250, + 7251, + 7252, + 120007, + 7253, + 7254, + 7255, + 120010, + 7256, + 7257, + 7258, + 120013, + 7259, + 7260, + 7261, + 120016, + 7262, + 7263, + 7264, + 120019, + 7265, + 7266, + 7267, + 120022, + 7268, + 7269, + 7270, + 120025, + 7271, + 7272, + 7273, + 7274, + 120029, + 7275, + 7276, + 7277, + 7278, + 120033, + 7279, + 7290, + 7291, + 7292, + 120047, + 7293, + 7294, + 7295, + 120050, + 7296, + 7297, + 7298, + 120053, + 7299, + 7300, + 7301, + 120056, + 7302, + 7303, + 7304, + 120059, + 7305, + 7306, + 7307, + 120062, + 7308, + 7309, + 7310, + 120065, + 7311, + 7312, + 7313, + 7314, + 120069, + 7315, + 7316, + 7317, + 7318, + 120073, + 7319, + 7320, + 7321, + 7322, + 1060803, + 120077, + 7323, + 7324, + 7325, + 7326, + 120081, + 7327, + 7328, + 7329, + 1060810, + 120084, + 7330, + 7331, + 7332, + 1060813, + 120087, + 7333, + 7334, + 7335, + 1060816, + 120090, + 7336, + 7337, + 7338, + 1060819, + 120093, + 7339, + 7340, + 7341, + 1060822, + 120096, + 7342, + 7343, + 7344, + 1060825, + 120099, + 7345, + 7346, + 7347, + 120102, + 7348, + 7349, + 7350, + 1060831, + 120105, + 7351, + 7352, + 7353, + 7354, + 120109, + 7355, + 7356, + 7357, + 7358, + 120113, + 7359, + 7360, + 7361, + 7362, + 120117, + 7363, + 7364, + 7365, + 7366, + 120121, + 7367, + 7368, + 7369, + 120124, + 7370, + 7371, + 7372, + 120127, + 7373, + 7374, + 7375, + 120130, + 7376, + 7377, + 7378, + 120133, + 7379, + 7380, + 7381, + 120136, + 7382, + 7383, + 7384, + 120139, + 7385, + 7386, + 7387, + 120142, + 7388, + 7389, + 7390, + 120145, + 7391, + 7392, + 7393, + 7394, + 120149, + 7395, + 7396, + 7397, + 7398, + 120153, + 7399, + 7400, + 7401, + 7402, + 120157, + 7403, + 7404, + 7405, + 7406, + 120161, + 7407, + 7408, + 7409, + 7410, + 7414, + 7415, + 7416, + 1060897, + 120171, + 7417, + 7418, + 7419, + 120174, + 7420, + 7424, + 7425, + 7426, + 120181, + 7427, + 7428, + 7429, + 120184, + 7430, + 7435, + 7436, + 7437, + 7438, + 7439, + 1060920, + 120194, + 7440, + 7444, + 7445, + 1060926, + 120200, + 7446, + 7447, + 7448, + 7449, + 129688, + 114515, + 8304, + 129689, + 114516, + 8305, + 129690, + 114517, + 8306, + 129691, + 114518, + 8307, + 129692, + 114519, + 8308, + 129693, + 114520, + 8309, + 8604, + 8605, + 8606, + 8653, + 8655, + 8656, + 130042, + 8658, + 8659, + 8698, + 8699, + 129415, + 114242, + 9013, + 9014, + 9015, + 130400, + 9016, + 9104, + 129515, + 114342, + 130489, + 9105, + 129516, + 114343, + 9106, + 129517, + 114344, + 9114, + 129525, + 114352, + 9115, + 129526, + 114353, + 9116, + 129527, + 114354, + 9124, + 129535, + 114362, + 130509, + 9125, + 129536, + 114363, + 9126, + 129537, + 114364, + 9133, + 129544, + 114371, + 130518, + 9134, + 129545, + 114372, + 9135, + 129546, + 114373, + 9136, + 129547, + 114374, + 9504, + 129915, + 114742, + 9505, + 129916, + 114743, + 9506, + 129917, + 114744, + 9513, + 129924, + 114751, + 9514, + 129925, + 114752, + 9515, + 129926, + 114753, + 9516, + 129927, + 114754, + 9534, + 114772, + 9535, + 114773, + 9536, + 114774, + 9544, + 9545, + 9546, + 9547, + 9549, + 130175, + 115002, + 115003, + 115004, + 8654, + 130038, + 129175, + 114002, + 129176, + 114003, + 129177, + 114004, + 129178, + 114005, + 129179, + 114006, + 129180, + 114007, + 129184, + 114011, + 129185, + 7801, + 114012, + 129186, + 7802, + 114013, + 129187, + 7803, + 114014, + 129188, + 7804, + 114015, + 129189, + 7805, + 114016, + 129190, + 7806, + 114017, + 129194, + 7810, + 114021, + 129195, + 7811, + 114022, + 129196, + 7812, + 114023, + 129197, + 7813, + 114024, + 129198, + 7814, + 114025, + 129199, + 7815, + 114026, + 129200, + 7816, + 114027, + 129204, + 7820, + 114031, + 129205, + 7821, + 114032, + 129206, + 7822, + 114033, + 129207, + 7823, + 114034, + 129208, + 7824, + 114035, + 129209, + 7825, + 114036, + 129210, + 7826, + 114037, + 23004, + 7831, + 114042, + 7832, + 114043, + 7833, + 114044, + 7834, + 114045, + 7835, + 114046, + 7836, + 114047, + 7843, + 114054, + 7844, + 114055, + 7851, + 23024, + 114062, + 7852, + 114063, + 7853, + 114064, + 7854, + 114065, + 7855, + 114066, + 7856, + 114067, + 23034, + 7861, + 114072, + 7862, + 114073, + 7863, + 114074, + 7864, + 114075, + 7865, + 114076, + 7866, + 114077, + 7871, + 114082, + 7872, + 114083, + 7873, + 114084, + 7874, + 114085, + 7875, + 114086, + 114087, + 23054, + 7881, + 114092, + 7882, + 114093, + 7883, + 114094, + 7884, + 114095, + 7885, + 114096, + 7886, + 114097, + 23064, + 7891, + 114102, + 7892, + 114103, + 7893, + 114104, + 7894, + 114105, + 7895, + 114106, + 7896, + 114107, + 7901, + 114112, + 114113, + 114114, + 114115, + 114116, + 114117, + 114122, + 114123, + 114124, + 114125, + 7915, + 114126, + 114127, + 7920, + 114131, + 114132, + 114133, + 114134, + 114135, + 114136, + 114137, + 114142, + 114143, + 114144, + 114145, + 7935, + 114146, + 7936, + 114147, + 7940, + 114151, + 7941, + 114152, + 7942, + 114153, + 114154, + 7951, + 114162, + 7952, + 114163, + 114164, + 114165, + 114166, + 114167, + 114172, + 114173, + 114174, + 114175, + 114176, + 114177, + 114182, + 114183, + 114184, + 114185, + 114202, + 114203, + 114204, + 114212, + 8002, + 114213, + 114214, + 114222, + 114223, + 114224, + 129405, + 114232, + 129406, + 114233, + 129407, + 114234, + 129416, + 114243, + 129417, + 114244, + 129434, + 114261, + 129435, + 114262, + 129436, + 114263, + 129437, + 114264, + 114272, + 114273, + 114274, + 114282, + 114283, + 114284, + 114292, + 114293, + 114294, + 114302, + 114303, + 114304, + 114312, + 114313, + 114314, + 114322, + 114323, + 114324, + 114332, + 114333, + 114334, + 129554, + 114381, + 129555, + 114382, + 129556, + 114383, + 129557, + 114384, + 129565, + 114392, + 129566, + 114393, + 129567, + 114394, + 129575, + 114402, + 129576, + 114403, + 129577, + 114404, + 129585, + 8201, + 114412, + 129586, + 8202, + 114413, + 129587, + 8203, + 114414, + 129595, + 8211, + 114422, + 129596, + 8212, + 114423, + 129597, + 8213, + 114424, + 129604, + 114431, + 129605, + 114432, + 129606, + 114433, + 129607, + 114434, + 129614, + 114441, + 129615, + 114442, + 129616, + 114443, + 129617, + 114444, + 129624, + 114451, + 129625, + 114452, + 129626, + 114453, + 129627, + 114454, + 129634, + 114461, + 129635, + 114462, + 129636, + 114463, + 129637, + 114464, + 129644, + 114471, + 129645, + 114472, + 129646, + 114473, + 129647, + 114474, + 129654, + 114481, + 129655, + 114482, + 129656, + 114483, + 129657, + 114484, + 129664, + 114491, + 129665, + 114492, + 129674, + 114501, + 129675, + 114502, + 129676, + 114503, + 129677, + 114504, + 129685, + 8301, + 114512, + 129686, + 8302, + 114513, + 129687, + 8303, + 114514, + 129694, + 8310, + 114521, + 129695, + 8311, + 114522, + 129696, + 8312, + 114523, + 129697, + 8313, + 114524, + 129704, + 114531, + 129705, + 114532, + 129706, + 114533, + 129707, + 114534, + 114602, + 114603, + 114604, + 114611, + 8401, + 114612, + 114613, + 114614, + 114622, + 114623, + 114624, + 129804, + 114631, + 129805, + 114632, + 129806, + 114633, + 129807, + 114634, + 129815, + 114642, + 129816, + 114643, + 129817, + 114644, + 129825, + 114652, + 129826, + 114653, + 129827, + 114654, + 129835, + 114662, + 129836, + 114663, + 129837, + 114664, + 129844, + 114671, + 129845, + 114672, + 129846, + 114673, + 129847, + 114674, + 129854, + 114681, + 129855, + 114682, + 129856, + 114683, + 129857, + 114684, + 129864, + 114691, + 129865, + 114692, + 129866, + 114693, + 129867, + 114694, + 129874, + 114701, + 129875, + 114702, + 129876, + 114703, + 129877, + 114704, + 129884, + 114711, + 129885, + 8501, + 114712, + 129886, + 8502, + 114713, + 129887, + 114714, + 129894, + 114721, + 129895, + 114722, + 129896, + 114723, + 129897, + 114724, + 129904, + 114731, + 129905, + 114732, + 129906, + 114733, + 129907, + 114734, + 115103, + 130137, + 115104, + 115106, + 130140, + 115107, + 115112, + 115113, + 130148, + 115115, + 115116, + 130290, + 115117, + 115122, + 130156, + 115124, + 115125, + 130299, + 115126, + 130160, + 115127, + 115132, + 130166, + 115133, + 115135, + 130169, + 115136, + 115137, + 130315, + 115142, + 115143, + 115144, + 130178, + 115145, + 130319, + 115146, + 115147, + 115152, + 130186, + 115153, + 115155, + 115156, + 130190, + 115157, + 115163, + 115164, + 130198, + 115166, + 115167, + 115172, + 130206, + 115173, + 115175, + 115176, + 130210, + 115182, + 116202, + 116203, + 116204, + 115202, + 115203, + 115301, + 115162, + 130335, + 115302, + 115303, + 130477, + 115304, + 115165, + 130338, + 115402, + 130576, + 115403, + 115404, + 115405, + 115406, + 130580, + 115407, + 115502, + 115503, + 130677, + 115504, + 115505, + 115506, + 130680, + 115507, + 115800, + 115801, + 115901, + 115902, + 116102, + 116103, + 116104, + 116105, + 116106, + 116107, + 116112, + 116113, + 116114, + 116115, + 116116, + 116117, + 116121, + 116122, + 116123, + 116124, + 116125, + 116126, + 116127, + 116505, + 116506, + 116507, + 116611, + 116612, + 116613, + 116614, + 116615, + 116617, + 116618, + 116619, + 116620, + 116621, + 116622, + 116623, + 116624, + 116625, + 116626, + 116627, + 116631, + 116632, + 116633, + 116634, + 116635, + 116636, + 116637, + 116641, + 116642, + 116643, + 116644, + 116645, + 116646, + 116647, + 116652, + 116653, + 116654, + 116655, + 116656, + 116657, + 116662, + 116702, + 116703, + 116704, + 116705, + 116706, + 116707, + 116751, + 116752, + 116802, + 116803, + 116804, + 116805, + 116806, + 116807, + 116812, + 116813, + 116814, + 116815, + 116816, + 116817, + 116822, + 116823, + 116824, + 116825, + 116826, + 116827, + 116832, + 116833, + 116834, + 116835, + 116836, + 116837, + 116842, + 116843, + 116844, + 116845, + 116846, + 116847, + 116852, + 116853, + 116854, + 116855, + 116856, + 116857, + 116862, + 116863, + 116864, + 116865, + 116866, + 116867, + 116872, + 116873, + 116874, + 116875, + 116876, + 116877, + 116882, + 116883, + 116884, + 116885, + 116886, + 116887, + 116892, + 116893, + 116894, + 116895, + 116896, + 116897, + 116902, + 116903, + 116904, + 116905, + 117101, + 117102, + 117103, + 117104, + 117105, + 117106, + 117107, + 117112, + 117113, + 117114, + 117115, + 117116, + 117117, + 117122, + 117123, + 117124, + 117125, + 117126, + 117127, + 117132, + 117133, + 117134, + 117135, + 117136, + 117137, + 117142, + 117143, + 117144, + 117145, + 117146, + 117147, + 117152, + 117153, + 117154, + 117155, + 117156, + 117157, + 117162, + 117163, + 117164, + 117165, + 117166, + 117167, + 117168, + 117169, + 117170, + 117171, + 118302, + 118501, + 118508, + 118801, + 118820, + 118821, + 118826, + 118827, + 118828, + 118829, + 118830, + 118831, + 118858, + 118859, + 118860, + 118861, + 118951, + 118956, + 118957, + 118958, + 118959, + 118960, + 118961, + 118966, + 118967, + 118968, + 118971, + 118980, + 118981, + 118986, + 118987, + 118988, + 118989, + 118990, + 118991, + 118900, + 118901, + 118906, + 118907, + 118908, + 118909, + 118910, + 118911, + 118916, + 118917, + 118918, + 118919, + 118920, + 118921, + 118926, + 118927, + 118928, + 118929, + 118930, + 118931, + 118941, + 118996, + 118997, + 118998, + 118999, + 119000, + 1060027, + 119301, + 119311, + 119326, + 119331, + 119336, + 119341, + 119346, + 119390, + 119400, + 119406, + 119407, + 119408, + 119409, + 119410, + 119411, + 119416, + 119417, + 119418, + 119419, + 119420, + 119421, + 119426, + 119427, + 119428, + 119429, + 119430, + 119431, + 119438, + 119439, + 1060227, + 119501, + 1060232, + 119506, + 1060233, + 119507, + 1060234, + 119508, + 1060235, + 119509, + 119601, + 119602, + 119603, + 119604, + 119605, + 119606, + 119607, + 1030081, + 119701, + 1030082, + 119702, + 1030083, + 119703, + 1030084, + 119704, + 1030085, + 119705, + 1030086, + 119706, + 1030087, + 119707, + 1030088, + 119708, + 1030089, + 119709, + 1030090, + 119710, + 1030091, + 119711, + 1030092, + 119712, + 119713, + 119714, + 119715, + 119716, + 119717, + 119718, + 119719, + 119720, + 119721, + 119722, + 119723, + 119724, + 119725, + 119726, + 119727, + 119728, + 119729, + 119730, + 119731, + 119732, + 119733, + 119734, + 119735, + 119736, + 119737, + 119738, + 119739, + 119740, + 119741, + 119742, + 119743, + 119744, + 119745, + 119746, + 119747, + 119748, + 119749, + 119750, + 119751, + 119752, + 119753, + 119754, + 119755, + 119804, + 119805, + 119815, + 119821, + 119822, + 119823, + 119824, + 119825, + 119833, + 120044, + 1060894, + 120168, + 120187, + 1060923, + 120197, + 125001, + 125011, + 125021, + 33993, + 125031, + 125141, + 125151, + 110027, + 125200, + 110028, + 125201, + 110029, + 125202, + 110030, + 125203, + 110031, + 125204, + 110036, + 125209, + 110037, + 125210, + 110038, + 125211, + 110039, + 125212, + 110040, + 125213, + 110046, + 125219, + 110047, + 125220, + 110048, + 125221, + 110041, + 125214, + 110049, + 125222, + 110050, + 125223, + 110051, + 125224, + 126005, + 126006, + 126007, + 130001, + 130007, + 130010, + 130016, + 130019, + 130028, + 130031, + 130046, + 130050, + 130057, + 130060, + 130066, + 130069, + 130075, + 130078, + 130081, + 130087, + 130091, + 130095, + 130099, + 130107, + 130110, + 130116, + 130119, + 130128, + 130131, + 130218, + 130221, + 130227, + 130231, + 130247, + 130267, + 115102, + 130275, + 115105, + 130278, + 115114, + 130287, + 115123, + 130296, + 115134, + 130307, + 115154, + 130327, + 115174, + 130347, + 115183, + 130356, + 115194, + 130367, + 115204, + 130377, + 130386, + 9012, + 130396 + ] + ) diff --git a/game_server/packet/handlers/GetPhonePendantDataReq.py b/game_server/packet/handlers/GetPhonePendantDataReq.py new file mode 100644 index 0000000..b40d358 --- /dev/null +++ b/game_server/packet/handlers/GetPhonePendantDataReq.py @@ -0,0 +1,20 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetPhonePendantDataReq, + GetPhonePendantDataRsp, + PhonePendant +) + +async def handle(session: Session, msg: GetPhonePendantDataReq) -> betterproto.Message: + phone = [350005,350011,350012,350013,350014,350015,350026,350041,350044,350045,350049,350051,350053,350054,350061,350305] + return GetPhonePendantDataRsp( + retcode=0, + is_all=True, + phone_pendant_list=[ + PhonePendant( + id=id + ) + for id in phone + ] + ) diff --git a/game_server/packet/handlers/GetPhotoDataReq.py b/game_server/packet/handlers/GetPhotoDataReq.py new file mode 100644 index 0000000..3f1fa1e --- /dev/null +++ b/game_server/packet/handlers/GetPhotoDataReq.py @@ -0,0 +1,21 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetPhotoDataReq,GetPhotoDataRsp + +async def handle(session: Session, msg: GetPhotoDataReq) -> betterproto.Message: + photo_type = { + 9:[150001,150002,150003,600001,600002,600003,600004,600005,600006,600007,600008,600010,600011,600012,600013,600014,600015,600016,600018,600019,600021,600022,600023,600025,600026,600027,600028,600032,600033,600034,600035,600036,600037,600024,600029,600030,600031,600035,600036], + 13:[1310001,1310002,1310003,1310004,1310005,1310006,1310007,1310008,1310009,1330001,1330002,1330003,1330004,1330005,1330006,1330007,1330008,1330009,1330010,1330011,1330012,1330013,1330014,1330015,1330016,1330017,1330018,1330019,1330020,1330021,1330022,1330023,1330024,1330025,1330026,1330027,1330028,1330029,1330030,1330031,1330032,1340001,1340002,1340003,1340004,1340005,1340006,1340007,1340008,1340009,1340010,1340011,1340012,1340013,1340014,1340016,1340017,1340018,1340019,1340020,1340021,1340022,1340023,1340024,1340025,1340026,1340027,1340028,1340029,1340030,1340031,1340032,1340033,1340034,1340035,1340036,1340037,1340038,1340039,1340040,1340041,1340042,1340043,1340044,1340045,1340046,1340047,1340048,1340049,1340050,1340051,1340052,1340053,1340054,1340055,1340056,1340057,1340058,1340059,1340060,1340061,1340062,1340063,1340064,1340065,1340066,1340067,1340068,1340069,1340070,1340071,1340072,1340073,1340074,1340075,1340076,1340077,1340078,1340079,1340080,1340081,1340082,1340083,1340084,1340085,1340086,1340087,1340088,1340089,1340090,1340091,1340092,1340093,1340094,1340095,1340096,1340097,1340098,1340099,1340100,1340101,1340102,1340103,1340104,1340105,1340106,1340107,1340108,1340109,1340110,1340111,1340112,1340113,1340114,1340115,1340116,1340117,1340118,1340119,1340120,1340121,1340122,1340123,1340124,1340125,1340126,1340127,1340128,1340129,1340130,1340131,1340132,1340133,1340134,1360001,1360002,1360003,1360004,1360005,1360006,1360007,1420001,1420002,1420003,1420004,1420005,1420006,1420011,1420012,1420013,1420014,1420015,1420016,1440001,1440002,1440003,1440004,1440005,1440006,1450001,1450002,1450003,1450004,1450005,1450006,1460001,1460002,1460003,1460004,1460005,1460006,1460007,1460008,1460009,1460010,1460011,1460012,1460013,1470001,1470002,1470003,1470004,1470005,1470006,1470007,1470011,1470012,1470013,1470014,1470015,1470016,1470017,1470018,1470019,1470020,1470021,1470022,1470023], + 15:[1700001,1700002,1700003,1700004,1700005,1700006,1700007,1700008,1700009,1700010,1700011,1700012,1700013,1700014,1700015,1700016,1700017,1700018,1700019,1700020,1700021,1700022,1700023,1700024,1700025,1700026,1700027,1700028,1700029,1700030,1700031,1700032,1700033,1700034,1700035,1700036,1700037,1700038], + 3:[300001,300002,300029,300030,300031,300032,300033,300034,300035,300036,300037,300038,300039,300040,300041,300042,300043,300044,300052,301022,301023,301024,301025,301026,301027,301028,310001,310002,310003,310004,310005,531000,531001,531002,531003,531004,531011,531012,531013,531014,531015,531021,531022,531023,531024,531041,531042,531043,531044,700201,700202,700501,700502,700503,700504,700505,700506,700507,700508,700509,700801,700802,700803,700804,700805,700806,700807,700808,700809,700810,701401,701402,701403,701404,701405,701406,701407,701409,701410,701411,701412,701413,701414,701415,701416,1400000,1400001,1400002,1400003,1400004,1400005,1400006,1480001,1480002,1480003,1480004,1480005,1480006,1480007,1480008,1480009,1480010,1480011,1500001,1500002,1500003,1500004,1500005,1500006,1500007,1500008,1500009,1500010,1500011,1660001,1660002,1660003,1660004,1660005,1660006,1660007,1660008,1660009,1660011,1660012,1660013,1660014,1660015,1660016,1660017,1660018,1660101,1660102,1660103,1660104,1660105,1660106,1660107,1660108,1660109,1660110,1712001,1712002,1712003,1712004,1712005,1712006,1712007,1712008,1713001,1713002,1713003,1713004,1713005,1713006,1713007,1713008,1713009,1713010,1713011,1713012,1713013,1713014,1713015,1713016,1713017,1715001,1715002,1715003,1715004,1715005,1715006,1715007,1715008,1716001,1716002,1716003,1716004,1717001,1717002,1718000,1718022,1718025,1718043,1718059,1718060,1718061,1718062,1718063,1718064,1718065,1718066,1718000,1718001,1720001], + 4:[400035,400036,400037,400038,400039,400040,400041], + 5:[511038,520002,520006,520010,520014,520016,520017,520020], + 6:[11000,11001,11002,11003,11004,11007,11008,11009,11010,11011,11012,11013,11014,11015,11021,11031,11032,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044,12001,12002,12003,12004,12005,12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021,12022,12023,12024,12025,12026,12027,12028,12029,12033,12034,12035,12036,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053,12054,12055,12056,12057,12058,12059,12060,12061,12062,12063,12064,12065,12066,12067,12068,12069,12070,12071,12072,12073,12074,12075], + 14:[1610000,1610001,1610002,1610003,1610005,1610007,1610008,1610009,1610010,1610011,1610012,1610013,1610014,1610018,1610019,1610101,1610104,1610105,1610106,1610107,1610108,1610109,1610110,1620001,1620002,1620003,1630001,1630002,1630003,1630004,1630005,1630006,1630007,1630008,1630009,1630010,1630011,1630012,1630013,1630014,1630015,1630016,1630017,1630018,1630019,1630020,1630021,1640001,1640002,1640003,1640004,1640005,1640006,1640007,1640008,1640009,1640010,1640011,1640013,1640014,1640016,1640017,1640018,1640019,1640020,1640021,1640022,1640023,1640024,1640025,1640026,1640027,1640028,1640029,1640030,1640031,1650001,1650002,1650003,1650004,1650005,1650006,1650007,1650008,1650009,1650010,1650011,1650012,1650013,1650014,1650015,1650016,1650017,1650018,1650019,1650020,1650021,1650023,1650024,1650025,1650026,1650027] + } + + return GetPhotoDataRsp( + retcode=0, + type=msg.type, + photo_id_list=photo_type.get(msg.type,[]) + ) diff --git a/game_server/packet/handlers/GetPlayerCardReq.py b/game_server/packet/handlers/GetPlayerCardReq.py new file mode 100644 index 0000000..efbdf93 --- /dev/null +++ b/game_server/packet/handlers/GetPlayerCardReq.py @@ -0,0 +1,18 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetPlayerCardReq,GetPlayerCardRsp,PlayerCardType,Medal + +async def handle(session: Session, msg: GetPlayerCardReq) -> betterproto.Message: + return GetPlayerCardRsp( + retcode=0, + type=PlayerCardType.CARD_ALL.value, + elf_id_list=[0], + avatar_id_list=[0,0,0], + medal_list=[ + Medal( + id=0, + end_time=0, + extra_param=0 + ) for i in range(2) + ] + ) diff --git a/game_server/packet/handlers/GetPlayerTokenReq.py b/game_server/packet/handlers/GetPlayerTokenReq.py new file mode 100644 index 0000000..4b7b26f --- /dev/null +++ b/game_server/packet/handlers/GetPlayerTokenReq.py @@ -0,0 +1,16 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetPlayerTokenReq,GetPlayerTokenRsp + +async def handle(session: Session, msg: GetPlayerTokenReq) -> betterproto.Message: + return GetPlayerTokenRsp( + retcode=0, + uid=1337, + token=msg.token, + account_type=msg.account_type, + account_uid="1337", + user_type=4, + hoyolab_account_uid="1337", + fightserver_ip=0, + fightserver_port=0 + ) diff --git a/game_server/packet/handlers/GetPlotListReq.py b/game_server/packet/handlers/GetPlotListReq.py new file mode 100644 index 0000000..15b1261 --- /dev/null +++ b/game_server/packet/handlers/GetPlotListReq.py @@ -0,0 +1,4268 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetPlotListReq, GetPlotListRsp + +async def handle(session: Session, msg: GetPlotListReq) -> betterproto.Message: + return GetPlotListRsp( + retcode=0, + plot_list=[ + 40285, + 40287, + 40288, + 40289, + 40290, + 40291, + 40292, + 40293, + 40294, + 40295, + 40296, + 40297, + 40300, + 40301, + 40303, + 40306, + 40307, + 40308, + 40309, + 40310, + 40311, + 40312, + 40313, + 40314, + 40315, + 40316, + 40317, + 40318, + 40319, + 40321, + 40322, + 40324, + 40325, + 40326, + 40327, + 40329, + 40330, + 40331, + 40334, + 40336, + 40337, + 40338, + 40339, + 40340, + 40341, + 40342, + 40343, + 40344, + 40345, + 40346, + 40347, + 40348, + 40349, + 40350, + 40351, + 40371, + 40372, + 40373, + 40374, + 40375, + 40376, + 40377, + 40388, + 40389, + 40390, + 40391, + 40392, + 40393, + 40394, + 40395, + 40396, + 40397, + 40398, + 40399, + 40400, + 40401, + 40402, + 40403, + 40404, + 40405, + 40406, + 40420, + 40421, + 40422, + 40423, + 40424, + 40425, + 40426, + 40427, + 40428, + 40429, + 40430, + 40431, + 40432, + 40433, + 40434, + 40435, + 40436, + 40437, + 40438, + 40439, + 40440, + 40441, + 40442, + 40443, + 40444, + 40445, + 40446, + 40447, + 40448, + 40449, + 40450, + 40451, + 40452, + 40453, + 40454, + 40455, + 40456, + 40457, + 40458, + 40459, + 40460, + 40461, + 40462, + 40463, + 40480, + 40546, + 40548, + 40549, + 40550, + 40551, + 40552, + 40553, + 40554, + 40556, + 40558, + 40559, + 40560, + 40561, + 40562, + 40564, + 40565, + 40566, + 40575, + 40576, + 40577, + 40578, + 40579, + 40580, + 40581, + 40582, + 40583, + 40584, + 40585, + 40586, + 40587, + 40588, + 40589, + 40590, + 40591, + 40592, + 40594, + 40595, + 40597, + 40598, + 40602, + 40603, + 40606, + 40607, + 40608, + 40609, + 40610, + 40611, + 40612, + 40613, + 40614, + 40615, + 40616, + 40618, + 40619, + 40620, + 40621, + 40622, + 40640, + 40641, + 40645, + 40646, + 40647, + 40648, + 40649, + 40650, + 40651, + 40652, + 40654, + 40656, + 40726, + 40729, + 40730, + 40731, + 40732, + 40733, + 40736, + 40739, + 40740, + 40741, + 40742, + 40743, + 40744, + 40746, + 40747, + 40748, + 40749, + 40750, + 40752, + 40753, + 40754, + 40755, + 40756, + 40757, + 40759, + 40760, + 40761, + 40762, + 40763, + 40764, + 40797, + 40798, + 40799, + 40800, + 40801, + 40802, + 40803, + 40804, + 40805, + 40806, + 40807, + 40808, + 40809, + 40810, + 40811, + 40812, + 40813, + 40814, + 40815, + 40816, + 40817, + 40818, + 40819, + 40820, + 40821, + 40822, + 40823, + 40824, + 40825, + 40826, + 40828, + 40829, + 40830, + 40831, + 40832, + 40833, + 40863, + 40864, + 40865, + 40866, + 40867, + 40868, + 40869, + 40870, + 40871, + 40873, + 40874, + 40875, + 40876, + 40877, + 40878, + 40879, + 40880, + 40881, + 40883, + 40884, + 40885, + 40886, + 40887, + 40888, + 40889, + 40890, + 40891, + 40892, + 40893, + 40894, + 40895, + 40896, + 40897, + 40898, + 40899, + 40900, + 40901, + 40902, + 40903, + 40907, + 40908, + 40909, + 40911, + 40913, + 40914, + 40915, + 40916, + 40917, + 40918, + 40919, + 40920, + 40921, + 40922, + 40923, + 40924, + 40925, + 40926, + 40927, + 40929, + 40931, + 40933, + 40934, + 40935, + 40936, + 40938, + 40940, + 40941, + 40942, + 40943, + 40944, + 40945, + 40946, + 40947, + 40948, + 40949, + 40951, + 40955, + 40956, + 40957, + 40958, + 40959, + 40960, + 40961, + 40962, + 40963, + 40964, + 40965, + 40968, + 40969, + 40970, + 40971, + 40972, + 40973, + 40975, + 40976, + 40977, + 40978, + 40979, + 40980, + 40991, + 40992, + 48500, + 48501, + 48502, + 48504, + 48505, + 48506, + 48507, + 48510, + 48511, + 48514, + 48515, + 48518, + 48519, + 48520, + 48522, + 48523, + 48526, + 48527, + 48528, + 48529, + 48530, + 48531, + 48532, + 48533, + 48535, + 48536, + 48537, + 48538, + 48539, + 48540, + 48541, + 48542, + 48543, + 48544, + 48545, + 48546, + 48547, + 48548, + 48549, + 48550, + 48563, + 48564, + 48565, + 48566, + 48567, + 48568, + 48569, + 48570, + 48571, + 48572, + 48573, + 48574, + 48575, + 48576, + 48578, + 48579, + 48580, + 48583, + 48601, + 48602, + 48603, + 48604, + 48605, + 48606, + 48607, + 48608, + 48646, + 48649, + 48650, + 48651, + 48652, + 48653, + 48654, + 48655, + 48656, + 48657, + 48658, + 48659, + 48660, + 48661, + 48662, + 48663, + 48664, + 48665, + 48667, + 48668, + 48669, + 48670, + 48671, + 48672, + 48673, + 48674, + 48675, + 48676, + 48677, + 48678, + 48679, + 48680, + 48681, + 48682, + 48683, + 48693, + 48694, + 48698, + 48699, + 48700, + 48701, + 48702, + 48704, + 48705, + 48706, + 48707, + 48708, + 48709, + 48710, + 48711, + 48712, + 48713, + 48714, + 48715, + 48716, + 48717, + 48718, + 48719, + 48720, + 48721, + 48722, + 48723, + 48724, + 48725, + 48726, + 48727, + 48728, + 48729, + 48730, + 48731, + 48732, + 48733, + 48738, + 48740, + 48741, + 48742, + 48743, + 48744, + 48745, + 48746, + 48747, + 48749, + 48750, + 48751, + 48752, + 48753, + 48754, + 48755, + 48757, + 48758, + 48761, + 48762, + 48765, + 48766, + 48767, + 48779, + 48780, + 48781, + 48782, + 48783, + 48784, + 48785, + 48790, + 48791, + 48792, + 48793, + 48795, + 48796, + 48797, + 48798, + 48800, + 48803, + 48804, + 48805, + 48807, + 48808, + 48809, + 48810, + 48812, + 48813, + 48814, + 48815, + 48817, + 48819, + 48820, + 48821, + 48822, + 48823, + 48824, + 48825, + 48826, + 48827, + 48828, + 48830, + 48831, + 48832, + 48833, + 48834, + 48835, + 48836, + 48837, + 48838, + 48839, + 48841, + 48842, + 48847, + 48851, + 48852, + 48853, + 48856, + 48866, + 48867, + 48868, + 48869, + 48871, + 48872, + 48873, + 48874, + 48875, + 48876, + 48877, + 48878, + 48879, + 48880, + 48881, + 48882, + 48883, + 48884, + 48885, + 48886, + 48887, + 48888, + 48889, + 48890, + 48891, + 48893, + 48894, + 48895, + 48896, + 48897, + 48898, + 48899, + 48900, + 48901, + 48902, + 48903, + 48904, + 48905, + 48906, + 48907, + 48908, + 48910, + 48912, + 48913, + 48920, + 48921, + 48922, + 48923, + 48924, + 48925, + 48926, + 48928, + 48931, + 48932, + 48933, + 48934, + 48935, + 48936, + 48937, + 48938, + 48940, + 48941, + 48943, + 48944, + 48945, + 48946, + 48947, + 48948, + 48949, + 48950, + 48951, + 48952, + 48953, + 48954, + 48955, + 48956, + 48957, + 48965, + 48966, + 48967, + 48968, + 48969, + 48970, + 48971, + 48972, + 48973, + 48974, + 48975, + 48976, + 48977, + 48978, + 48980, + 48981, + 48983, + 48984, + 49002, + 49003, + 49004, + 49005, + 49007, + 49008, + 49009, + 49012, + 49013, + 49014, + 49015, + 49016, + 49017, + 49019, + 49020, + 49021, + 49022, + 49023, + 49024, + 49026, + 49027, + 49028, + 49029, + 49030, + 49032, + 49033, + 49034, + 49035, + 49036, + 49037, + 49038, + 49039, + 49040, + 49041, + 49042, + 49043, + 49044, + 49045, + 49047, + 49048, + 49051, + 49052, + 49053, + 49055, + 49056, + 49057, + 49058, + 49060, + 49068, + 49069, + 49070, + 49071, + 49072, + 49073, + 49074, + 49075, + 49076, + 49077, + 49079, + 49082, + 49083, + 49084, + 49085, + 49086, + 49087, + 49088, + 49089, + 49090, + 49091, + 49092, + 49093, + 49094, + 49096, + 49097, + 49098, + 49099, + 49100, + 49102, + 49103, + 49104, + 49105, + 49106, + 49108, + 49109, + 49110, + 49111, + 49112, + 49113, + 49120, + 49122, + 49123, + 49124, + 49125, + 49126, + 49127, + 49128, + 49129, + 49130, + 49131, + 49132, + 49133, + 49135, + 49136, + 49147, + 49148, + 49149, + 49150, + 49151, + 49152, + 49153, + 49154, + 49155, + 49156, + 49157, + 49160, + 49161, + 49162, + 49163, + 49164, + 49165, + 49166, + 49167, + 49168, + 49169, + 49170, + 49171, + 49172, + 49173, + 49174, + 49175, + 49176, + 49177, + 49178, + 49179, + 49180, + 49181, + 49182, + 49183, + 49187, + 49188, + 49190, + 49191, + 49192, + 49193, + 49194, + 49195, + 49196, + 49197, + 49198, + 49199, + 49200, + 49201, + 49204, + 49205, + 49206, + 49208, + 49210, + 49211, + 49213, + 49214, + 49215, + 49216, + 49217, + 49218, + 49219, + 49220, + 49221, + 49222, + 49231, + 49232, + 49233, + 49234, + 49235, + 49236, + 49237, + 49238, + 49239, + 49240, + 49241, + 49242, + 49243, + 49244, + 49245, + 49246, + 49247, + 49248, + 49257, + 49258, + 49290, + 49325, + 49326, + 49329, + 49331, + 49333, + 49334, + 49335, + 49337, + 49338, + 49340, + 49345, + 49346, + 49347, + 49348, + 49350, + 49351, + 49352, + 49353, + 49354, + 49355, + 49356, + 49357, + 49358, + 49359, + 49362, + 49363, + 49366, + 49367, + 49370, + 49371, + 49372, + 49373, + 49374, + 49375, + 49376, + 49377, + 49378, + 49379, + 49380, + 49381, + 49382, + 49383, + 49384, + 49385, + 49386, + 49387, + 49388, + 49389, + 49390, + 49391, + 49393, + 49394, + 49395, + 49399, + 49400, + 49401, + 49402, + 49403, + 49405, + 49406, + 49410, + 49411, + 49412, + 49414, + 49415, + 49421, + 49422, + 49423, + 49424, + 49425, + 49426, + 49427, + 49428, + 49430, + 49431, + 49432, + 49433, + 49434, + 49435, + 49436, + 49438, + 49439, + 49440, + 49441, + 49442, + 49443, + 49444, + 49445, + 49446, + 49447, + 49448, + 49449, + 49450, + 49451, + 49452, + 49453, + 49454, + 49456, + 49457, + 49458, + 49459, + 49460, + 49461, + 49462, + 49463, + 49464, + 49465, + 49466, + 49467, + 49506, + 49507, + 49508, + 49509, + 49510, + 49511, + 49512, + 49513, + 49514, + 49515, + 49516, + 49517, + 49518, + 49519, + 49520, + 49521, + 49522, + 49524, + 49525, + 49526, + 49531, + 49532, + 49533, + 49534, + 49535, + 49536, + 49537, + 49538, + 49539, + 49540, + 49541, + 49542, + 49543, + 49544, + 49545, + 49546, + 49547, + 49548, + 49549, + 49550, + 49551, + 49552, + 49553, + 49561, + 49562, + 49563, + 49567, + 49571, + 49572, + 49573, + 49580, + 49581, + 49582, + 49584, + 49585, + 49586, + 49587, + 49589, + 49590, + 49591, + 49592, + 49593, + 49594, + 49595, + 49596, + 49597, + 49598, + 49599, + 49600, + 49601, + 49602, + 49603, + 49604, + 49605, + 49606, + 49608, + 49609, + 49610, + 49611, + 49612, + 49614, + 49615, + 49616, + 49619, + 49620, + 49622, + 49623, + 49624, + 49625, + 49626, + 49627, + 49628, + 49629, + 49630, + 49631, + 49632, + 49633, + 49634, + 49635, + 49636, + 49637, + 49638, + 49639, + 49640, + 49641, + 49642, + 49643, + 49644, + 49649, + 49650, + 49651, + 49652, + 49654, + 49655, + 49656, + 49658, + 49659, + 49660, + 49661, + 49662, + 49663, + 49665, + 49666, + 49667, + 49668, + 49669, + 49671, + 49673, + 49674, + 49675, + 49676, + 49678, + 49679, + 49680, + 49681, + 49682, + 49684, + 49685, + 49686, + 49687, + 49688, + 49689, + 49691, + 49692, + 49693, + 49694, + 49695, + 49697, + 49698, + 49699, + 49700, + 49701, + 49702, + 49703, + 49704, + 49707, + 49709, + 49710, + 49711, + 49713, + 49714, + 49715, + 49716, + 49718, + 49719, + 49721, + 49724, + 49725, + 49726, + 49727, + 49728, + 49729, + 49730, + 49732, + 49733, + 49736, + 49739, + 49741, + 49742, + 49743, + 49744, + 49749, + 49750, + 49751, + 49752, + 49753, + 49754, + 49755, + 49756, + 49757, + 49758, + 49759, + 49760, + 49761, + 49763, + 49764, + 49765, + 49767, + 49768, + 49770, + 49771, + 49772, + 49773, + 49774, + 49775, + 49776, + 49777, + 49778, + 49779, + 49781, + 49782, + 49783, + 49784, + 49786, + 49788, + 49789, + 49790, + 49791, + 49792, + 49793, + 49795, + 49797, + 49798, + 49799, + 49800, + 49801, + 49802, + 49803, + 49804, + 49805, + 49806, + 49807, + 49809, + 49810, + 49811, + 49812, + 49813, + 49814, + 49815, + 49816, + 49817, + 49818, + 49819, + 49820, + 49821, + 49822, + 49823, + 49824, + 49825, + 49826, + 49827, + 49828, + 49829, + 49830, + 49831, + 49832, + 49833, + 49834, + 49840, + 49842, + 49843, + 49844, + 49845, + 49846, + 49847, + 49848, + 49849, + 49850, + 49851, + 49853, + 49854, + 49855, + 49856, + 49857, + 49858, + 49859, + 49860, + 49861, + 49862, + 49863, + 49865, + 49866, + 49867, + 49868, + 49869, + 49870, + 49871, + 49872, + 49873, + 49874, + 49876, + 49877, + 49878, + 49879, + 49880, + 49881, + 49882, + 49883, + 49884, + 49885, + 49886, + 49887, + 49888, + 49889, + 49890, + 49891, + 49892, + 49893, + 49894, + 49895, + 49896, + 49897, + 49898, + 49899, + 49900, + 49901, + 49902, + 49903, + 49904, + 49909, + 49910, + 49911, + 49912, + 49913, + 49915, + 49916, + 49917, + 49918, + 49919, + 49920, + 49921, + 49922, + 49923, + 49924, + 49926, + 49927, + 49928, + 49930, + 49931, + 49932, + 49933, + 49935, + 49938, + 49941, + 49942, + 49943, + 49944, + 49945, + 49946, + 49947, + 49948, + 49949, + 49950, + 49951, + 49953, + 49954, + 49955, + 49956, + 49957, + 49959, + 49960, + 49961, + 49962, + 49963, + 49964, + 49965, + 49966, + 49968, + 49969, + 49972, + 49976, + 49977, + 49978, + 49979, + 49981, + 49984, + 49985, + 49986, + 49988, + 49989, + 49990, + 49991, + 49992, + 49993, + 49994, + 49995, + 49997, + 50001, + 50002, + 50003, + 50004, + 50005, + 50006, + 50009, + 50010, + 50012, + 50013, + 50014, + 50015, + 50016, + 50017, + 50018, + 50019, + 50020, + 50021, + 50022, + 50023, + 50092, + 50093, + 51001, + 51002, + 51003, + 51004, + 51005, + 51006, + 51008, + 51009, + 51010, + 51011, + 51012, + 51013, + 51016, + 52022, + 52028, + 54000, + 54001, + 54002, + 54003, + 54004, + 54005, + 54006, + 54007, + 54009, + 54010, + 54011, + 54012, + 54013, + 54014, + 54015, + 54016, + 54017, + 54018, + 54019, + 54020, + 54021, + 54022, + 54023, + 54024, + 54025, + 54026, + 54027, + 54028, + 54029, + 54031, + 54032, + 54033, + 54034, + 54035, + 54036, + 54037, + 54038, + 54039, + 54041, + 54043, + 54044, + 54046, + 54048, + 54049, + 54050, + 54059, + 54060, + 54061, + 54062, + 54063, + 54064, + 54065, + 54066, + 54067, + 54068, + 54069, + 54070, + 54071, + 54072, + 54073, + 54074, + 54075, + 54076, + 54077, + 54078, + 54079, + 54080, + 54081, + 54082, + 54083, + 54084, + 54085, + 54086, + 54087, + 54088, + 54089, + 54090, + 54091, + 54092, + 54093, + 54094, + 54095, + 54096, + 54097, + 54098, + 54101, + 54102, + 54103, + 54105, + 54107, + 54108, + 54109, + 54110, + 54113, + 54114, + 54115, + 54116, + 54117, + 54118, + 54119, + 54121, + 54123, + 54124, + 54125, + 54126, + 54127, + 54131, + 54132, + 54134, + 54136, + 54137, + 54138, + 54139, + 54140, + 54142, + 54143, + 54144, + 54145, + 54147, + 54149, + 54150, + 54152, + 54154, + 54155, + 54156, + 54157, + 54158, + 54159, + 54160, + 54162, + 54165, + 54166, + 54167, + 54170, + 54171, + 54173, + 54174, + 54175, + 54176, + 54177, + 54178, + 54179, + 54180, + 54181, + 54182, + 54183, + 54184, + 54185, + 54187, + 54188, + 54193, + 54195, + 54197, + 54198, + 54199, + 54201, + 54202, + 54203, + 54204, + 54205, + 54206, + 54207, + 54211, + 54212, + 54215, + 54216, + 54217, + 54218, + 54219, + 54220, + 54221, + 54222, + 54223, + 54224, + 54226, + 54227, + 54228, + 54229, + 54230, + 54231, + 54232, + 54234, + 54241, + 54242, + 54243, + 54244, + 54245, + 54246, + 54247, + 54248, + 54249, + 54250, + 54251, + 54252, + 54253, + 54254, + 54255, + 54256, + 54257, + 54258, + 54259, + 54260, + 54261, + 54262, + 54263, + 54264, + 54265, + 54266, + 54267, + 54268, + 54269, + 54270, + 54271, + 54272, + 54273, + 54274, + 54275, + 54276, + 54277, + 54278, + 54279, + 54280, + 54281, + 54282, + 54283, + 54284, + 54285, + 54286, + 54287, + 54288, + 54289, + 54290, + 54291, + 54292, + 54293, + 54294, + 54295, + 54296, + 54297, + 54298, + 54299, + 54300, + 54301, + 54302, + 54303, + 54304, + 54305, + 54306, + 54307, + 54308, + 54309, + 54310, + 54311, + 54312, + 54313, + 54315, + 54316, + 54317, + 54318, + 54319, + 54320, + 54321, + 54322, + 54323, + 54324, + 54325, + 54326, + 54327, + 54328, + 54329, + 54330, + 54332, + 54333, + 54334, + 54335, + 54336, + 54337, + 54338, + 54339, + 54340, + 54341, + 54342, + 54343, + 54344, + 54345, + 54346, + 54347, + 54348, + 54349, + 54350, + 54351, + 54352, + 54353, + 54354, + 54355, + 54356, + 54357, + 54358, + 54359, + 54360, + 54361, + 54362, + 54363, + 54364, + 54365, + 54366, + 54367, + 54368, + 54369, + 54370, + 54371, + 54372, + 54373, + 54374, + 54375, + 54376, + 54377, + 54378, + 54379, + 54380, + 54381, + 54382, + 54383, + 54384, + 54385, + 54386, + 54387, + 54388, + 54389, + 54390, + 54391, + 54392, + 54393, + 54394, + 54395, + 54396, + 54397, + 54398, + 54399, + 54400, + 54401, + 54402, + 54403, + 54404, + 54405, + 54406, + 54407, + 54408, + 54409, + 54410, + 54411, + 54412, + 54413, + 54414, + 54415, + 54416, + 54417, + 54418, + 54419, + 54420, + 54421, + 54422, + 54423, + 54424, + 54425, + 54426, + 54427, + 54428, + 54429, + 54430, + 54431, + 54432, + 54433, + 54434, + 54435, + 54436, + 54437, + 54438, + 54439, + 54440, + 54441, + 54442, + 54443, + 54444, + 54445, + 54446, + 54447, + 54448, + 54449, + 54450, + 54451, + 54452, + 54453, + 54454, + 54455, + 54456, + 54457, + 54458, + 54459, + 54460, + 54461, + 54462, + 54463, + 54464, + 54465, + 54466, + 54467, + 54468, + 54469, + 54470, + 54471, + 54472, + 54473, + 54474, + 54475, + 54476, + 54477, + 54478, + 54479, + 54480, + 54481, + 54482, + 54483, + 54484, + 54485, + 54486, + 54487, + 54488, + 54489, + 54490, + 54491, + 54492, + 54493, + 54494, + 54495, + 54496, + 54497, + 54498, + 54499, + 54500, + 54501, + 54502, + 54503, + 54504, + 54505, + 54506, + 54507, + 54508, + 54509, + 54510, + 54511, + 54512, + 54513, + 54514, + 54515, + 54516, + 54517, + 54518, + 54519, + 54520, + 54521, + 54522, + 54523, + 54524, + 54525, + 54526, + 54527, + 54528, + 54529, + 54530, + 54531, + 54532, + 54533, + 54534, + 54535, + 54536, + 54537, + 54538, + 54539, + 54540, + 54541, + 54542, + 54543, + 54544, + 54545, + 54546, + 54547, + 54548, + 54549, + 54550, + 54551, + 54552, + 54553, + 54554, + 54555, + 54556, + 54557, + 54558, + 54559, + 54560, + 54561, + 54562, + 54563, + 54564, + 54565, + 54566, + 54567, + 54568, + 54569, + 54570, + 54571, + 54572, + 54573, + 54574, + 54575, + 54576, + 54577, + 54578, + 54579, + 54581, + 54582, + 54583, + 54584, + 54585, + 54586, + 54587, + 54588, + 54589, + 54590, + 54591, + 54593, + 54594, + 54595, + 54596, + 54597, + 54598, + 54599, + 54600, + 54601, + 54602, + 54603, + 54604, + 54605, + 54606, + 54613, + 54620, + 54621, + 54622, + 54623, + 54624, + 54625, + 54626, + 54627, + 54628, + 54629, + 54630, + 54631, + 54632, + 54633, + 54634, + 54635, + 54636, + 54637, + 54638, + 54643, + 54644, + 54645, + 54646, + 54647, + 54648, + 54649, + 54650, + 54651, + 54652, + 54653, + 54654, + 54657, + 54658, + 54660, + 54661, + 54663, + 54666, + 54667, + 54668, + 54669, + 54670, + 54671, + 54672, + 54676, + 54677, + 54678, + 54679, + 54680, + 54682, + 54683, + 54684, + 54685, + 54686, + 54687, + 54688, + 54690, + 54691, + 54692, + 54694, + 54695, + 54696, + 54697, + 54698, + 54699, + 54700, + 54701, + 54702, + 54703, + 54704, + 54705, + 54706, + 54707, + 54710, + 54711, + 54712, + 54713, + 54714, + 54715, + 54716, + 54717, + 54719, + 54720, + 54721, + 54722, + 54723, + 54724, + 54726, + 54727, + 54728, + 54729, + 54730, + 54732, + 54733, + 54734, + 54735, + 54736, + 54738, + 54740, + 54742, + 54745, + 54755, + 54756, + 54757, + 54758, + 54759, + 54781, + 54782, + 54783, + 54784, + 54785, + 54786, + 54787, + 54789, + 54790, + 54791, + 54792, + 54793, + 54794, + 54795, + 54797, + 54798, + 54799, + 54800, + 54801, + 54802, + 54803, + 54804, + 54805, + 54806, + 54807, + 54808, + 54809, + 54810, + 54811, + 54812, + 54813, + 54814, + 54815, + 54816, + 54817, + 54818, + 54819, + 54820, + 54821, + 54822, + 54823, + 54824, + 54825, + 54826, + 54827, + 54828, + 54829, + 54830, + 54831, + 54832, + 54833, + 54834, + 54835, + 54836, + 54837, + 54838, + 54843, + 54845, + 54846, + 54847, + 54852, + 54853, + 54854, + 54855, + 54856, + 54857, + 54858, + 54859, + 54860, + 54861, + 54862, + 54863, + 54864, + 54865, + 54866, + 54867, + 54868, + 54869, + 54870, + 54871, + 54873, + 54874, + 54875, + 54876, + 54877, + 54878, + 54880, + 54881, + 54882, + 54883, + 54884, + 54885, + 54886, + 54887, + 54888, + 54889, + 54890, + 54891, + 54892, + 54893, + 54894, + 54895, + 54896, + 54897, + 54898, + 55000, + 55001, + 55002, + 55006, + 55007, + 55008, + 55009, + 55010, + 55011, + 55012, + 55013, + 55014, + 55015, + 55016, + 55017, + 55018, + 55019, + 55020, + 55021, + 55023, + 55024, + 55025, + 55026, + 55027, + 55028, + 55029, + 55030, + 55031, + 55032, + 55033, + 55034, + 55035, + 55036, + 55037, + 55038, + 55041, + 55042, + 55043, + 55044, + 55045, + 55046, + 55047, + 55048, + 55049, + 55050, + 55051, + 55052, + 55053, + 55054, + 55055, + 55056, + 55058, + 55059, + 55060, + 55061, + 55062, + 55063, + 55064, + 55065, + 55066, + 55067, + 55068, + 55069, + 55070, + 55071, + 55072, + 55073, + 55074, + 55075, + 55076, + 55077, + 55078, + 55079, + 55080, + 55081, + 55082, + 55083, + 55084, + 55085, + 55086, + 55087, + 55088, + 55089, + 55090, + 55091, + 55092, + 55093, + 55094, + 55095, + 55096, + 55097, + 55098, + 55099, + 55100, + 55101, + 55102, + 55103, + 55104, + 55105, + 55106, + 55107, + 55108, + 55109, + 55110, + 55111, + 55112, + 55113, + 55114, + 55117, + 55118, + 55119, + 55120, + 55121, + 55122, + 55123, + 55124, + 55125, + 55126, + 55130, + 55131, + 55132, + 55133, + 55134, + 55135, + 55136, + 55137, + 55140, + 55141, + 55142, + 55143, + 55144, + 55145, + 55146, + 55160, + 55161, + 55162, + 55163, + 55164, + 55165, + 55166, + 55167, + 55168, + 55169, + 55170, + 55171, + 55172, + 55173, + 55174, + 55175, + 55176, + 55177, + 55178, + 55179, + 55181, + 55182, + 55183, + 55195, + 55196, + 55197, + 55198, + 55199, + 55200, + 55202, + 55203, + 55204, + 55205, + 55206, + 55208, + 55209, + 55210, + 55211, + 55212, + 55213, + 55214, + 55215, + 55216, + 55217, + 55218, + 55219, + 55220, + 55221, + 55222, + 55223, + 55224, + 55225, + 55226, + 55227, + 55228, + 55229, + 55230, + 55231, + 55232, + 55233, + 55234, + 55235, + 55236, + 55237, + 55238, + 55239, + 55240, + 55241, + 55242, + 55243, + 55244, + 55245, + 55246, + 55247, + 55248, + 55249, + 55250, + 55251, + 55252, + 55253, + 55254, + 55257, + 55258, + 55259, + 55260, + 55261, + 55262, + 55264, + 55265, + 55266, + 55267, + 55268, + 55269, + 55270, + 55271, + 55272, + 55273, + 55274, + 55275, + 55276, + 55277, + 55278, + 55279, + 55280, + 55282, + 55284, + 55286, + 55288, + 55290, + 55291, + 55292, + 55293, + 55294, + 55295, + 55296, + 55396, + 55397, + 55398, + 55399, + 55400, + 55401, + 55407, + 55408, + 55409, + 55410, + 55417, + 55418, + 55422, + 55423, + 55424, + 55425, + 55426, + 55427, + 55428, + 55429, + 55431, + 55432, + 55433, + 55434, + 55435, + 55436, + 55437, + 55439, + 55441, + 55442, + 55443, + 55444, + 55445, + 55448, + 55449, + 55450, + 55451, + 55452, + 55453, + 55455, + 55456, + 55457, + 55459, + 55460, + 55461, + 55462, + 55463, + 55464, + 55465, + 55466, + 55467, + 55468, + 55469, + 55470, + 55471, + 55472, + 55474, + 55481, + 55482, + 55483, + 55484, + 55485, + 55486, + 55487, + 55488, + 55489, + 55490, + 55491, + 55492, + 55494, + 55495, + 55496, + 55497, + 55498, + 55499, + 55500, + 55501, + 55502, + 55504, + 55505, + 55506, + 55507, + 55508, + 55509, + 55510, + 55511, + 55512, + 55513, + 55514, + 55515, + 55526, + 55527, + 55528, + 55529, + 55530, + 55531, + 55532, + 55533, + 55534, + 55535, + 55537, + 55538, + 55539, + 55540, + 55541, + 55542, + 55543, + 55544, + 55545, + 55546, + 55547, + 55548, + 55549, + 55550, + 55551, + 55552, + 55553, + 55554, + 55557, + 55558, + 55559, + 55560, + 55561, + 55562, + 55563, + 55564, + 55565, + 55566, + 55567, + 55568, + 55569, + 55570, + 55572, + 55574, + 55575, + 55576, + 55577, + 55578, + 55579, + 55580, + 55581, + 55582, + 55583, + 55584, + 55585, + 55586, + 55587, + 55588, + 55598, + 55601, + 55603, + 55604, + 55605, + 55606, + 55607, + 55608, + 55609, + 55610, + 55611, + 55612, + 55613, + 55616, + 55617, + 55618, + 55619, + 55620, + 55621, + 55622, + 55623, + 55624, + 55625, + 55626, + 55627, + 55629, + 55630, + 55631, + 55632, + 55633, + 55634, + 55635, + 55636, + 55637, + 55638, + 55639, + 55640, + 55641, + 55642, + 55643, + 55644, + 55645, + 55646, + 55647, + 55648, + 55649, + 55650, + 55651, + 55652, + 55653, + 55654, + 55655, + 55656, + 55657, + 55658, + 55659, + 55660, + 55661, + 55662, + 55663, + 55664, + 55665, + 55666, + 55667, + 55668, + 55669, + 55670, + 55671, + 55672, + 55673, + 55674, + 55675, + 55676, + 55677, + 55678, + 55679, + 55680, + 55681, + 55682, + 55683, + 55684, + 55685, + 55686, + 55687, + 55688, + 55689, + 55690, + 55691, + 55692, + 55693, + 55694, + 55695, + 55696, + 55697, + 55698, + 55699, + 55700, + 55701, + 55702, + 55703, + 55704, + 55705, + 55706, + 55707, + 55708, + 55709, + 55710, + 55711, + 55712, + 55713, + 55714, + 55715, + 55716, + 55717, + 55718, + 55719, + 55720, + 55721, + 55722, + 55723, + 55724, + 55725, + 55726, + 55727, + 55728, + 55729, + 55730, + 55731, + 55732, + 55733, + 55734, + 55735, + 55736, + 55737, + 55738, + 55739, + 55740, + 55741, + 55742, + 55743, + 55744, + 55745, + 55746, + 55748, + 55749, + 55750, + 55751, + 55752, + 55753, + 55755, + 55756, + 55757, + 55758, + 55759, + 55760, + 55761, + 55762, + 55763, + 55764, + 55765, + 55766, + 55767, + 55768, + 55769, + 55770, + 55771, + 55772, + 55773, + 55774, + 55775, + 55776, + 55777, + 55778, + 55779, + 55780, + 55781, + 55782, + 55783, + 55784, + 55785, + 55786, + 55787, + 55788, + 55789, + 55790, + 55791, + 55794, + 55795, + 55796, + 55797, + 55798, + 55799, + 55800, + 55801, + 55802, + 55803, + 55804, + 55805, + 55806, + 55807, + 55808, + 55809, + 55810, + 55811, + 55812, + 55813, + 55814, + 55815, + 55816, + 55817, + 55818, + 55819, + 55820, + 55821, + 55822, + 55823, + 55824, + 55825, + 55826, + 55827, + 55828, + 55829, + 55830, + 55831, + 55832, + 55833, + 55834, + 55835, + 55836, + 55837, + 55838, + 55839, + 55840, + 55841, + 55842, + 55843, + 55844, + 55845, + 55846, + 55847, + 55848, + 55849, + 55850, + 55851, + 55852, + 55853, + 55854, + 55855, + 55856, + 55857, + 55858, + 55859, + 55860, + 55861, + 55862, + 55863, + 55864, + 55865, + 55866, + 55867, + 55868, + 55869, + 55870, + 55871, + 55872, + 55873, + 55874, + 55875, + 55876, + 55877, + 55878, + 55879, + 55880, + 55881, + 55882, + 55883, + 55884, + 55885, + 55886, + 55887, + 55888, + 55889, + 55890, + 55891, + 55892, + 55893, + 55894, + 55895, + 55896, + 55897, + 55898, + 55899, + 55900, + 55901, + 55903, + 55904, + 55905, + 55906, + 55907, + 55908, + 55909, + 55910, + 55911, + 55912, + 55913, + 55918, + 55919, + 55926, + 55927, + 55929, + 55930, + 55931, + 55932, + 55933, + 55934, + 55935, + 55936, + 55937, + 55943, + 55944, + 55945, + 55946, + 55947, + 55951, + 55952, + 55953, + 55954, + 55955, + 55956, + 55957, + 55958, + 55959, + 55960, + 55961, + 55962, + 55963, + 55964, + 55965, + 55966, + 55967, + 55968, + 55969, + 55970, + 55971, + 55972, + 55973, + 55974, + 55975, + 55976, + 55977, + 55978, + 55979, + 55981, + 55982, + 55983, + 55984, + 55985, + 55986, + 55988, + 55989, + 55990, + 55991, + 55992, + 55993, + 55994, + 55995, + 56012, + 56013, + 56014, + 56015, + 56016, + 56017, + 56018, + 56019, + 56020, + 56024, + 56025, + 56028, + 56037, + 56038, + 56039, + 56045, + 56046, + 56048, + 56049, + 56051, + 56053, + 56055, + 56057, + 56058, + 56059, + 56086, + 56100, + 56109, + 56110, + 56111, + 56112, + 56113, + 56114, + 56115, + 56116, + 56117, + 56118, + 56119, + 56120, + 56121, + 56122, + 56123, + 56124, + 56125, + 56126, + 56127, + 56128, + 56129, + 56130, + 56131, + 56132, + 56133, + 56134, + 56135, + 56136, + 56137, + 56138, + 56139, + 56140, + 56141, + 56142, + 56143, + 56144, + 56145, + 56146, + 56147, + 56161, + 56162, + 56163, + 56164, + 56165, + 56166, + 56167, + 56168, + 56169, + 56170, + 56171, + 56172, + 56173, + 56174, + 56175, + 56176, + 56177, + 56178, + 56179, + 56180, + 56181, + 56182, + 56183, + 56184, + 56185, + 56187, + 56188, + 56189, + 56190, + 56191, + 56192, + 56193, + 56194, + 56195, + 56196, + 56197, + 56198, + 56199, + 56200, + 56201, + 56202, + 56203, + 56204, + 56205, + 56206, + 56207, + 56208, + 56209, + 56211, + 56212, + 56213, + 56214, + 56215, + 56216, + 56217, + 56218, + 56219, + 56220, + 56222, + 56223, + 56224, + 56225, + 56226, + 56227, + 56228, + 56229, + 56231, + 56232, + 56233, + 56234, + 56235, + 56236, + 56237, + 56238, + 56239, + 56240, + 56241, + 56242, + 56243, + 56244, + 56245, + 56246, + 56247, + 56255, + 56256, + 56257, + 56258, + 56259, + 56260, + 56261, + 56262, + 56263, + 56264, + 56265, + 56267, + 56268, + 56269, + 56270, + 56271, + 56272, + 56273, + 56274, + 56275, + 56277, + 56278, + 56279, + 56280, + 56281, + 56282, + 56283, + 56284, + 56306, + 56307, + 56308, + 56309, + 56310, + 56311, + 56312, + 56313, + 56314, + 56315, + 56316, + 56317, + 56318, + 56319, + 56320, + 56321, + 56322, + 56323, + 56324, + 56325, + 56326, + 56327, + 56328, + 56329, + 56330, + 56331, + 56332, + 56333, + 56334, + 56336, + 56337, + 56338, + 56340, + 56341, + 56342, + 56343, + 56344, + 56345, + 56346, + 56347, + 56348, + 56349, + 56350, + 56351, + 56353, + 56354, + 56355, + 56356, + 56357, + 56358, + 56359, + 56360, + 56361, + 56362, + 56376, + 56377, + 56378, + 56379, + 56380, + 56381, + 56382, + 56384, + 56385, + 56386, + 56387, + 56388, + 56389, + 56390, + 56391, + 56392, + 56393, + 56394, + 56395, + 56396, + 56397, + 56398, + 56399, + 56400, + 56401, + 56402, + 56403, + 56404, + 56405, + 56416, + 56417, + 56418, + 56419, + 56420, + 56421, + 56422, + 56423, + 56424, + 56425, + 56426, + 56427, + 56428, + 56429, + 56430, + 56431, + 56432, + 56433, + 56435, + 56436, + 56437, + 56438, + 56439, + 56440, + 56441, + 56442, + 56443, + 56444, + 56445, + 56446, + 56447, + 56448, + 56449, + 56452, + 56455, + 56456, + 56457, + 56458, + 56459, + 56460, + 56461, + 56462, + 56463, + 56464, + 56465, + 56466, + 56467, + 56468, + 56469, + 56470, + 56471, + 56472, + 56473, + 56474, + 56475, + 56476, + 56477, + 56478, + 56479, + 56480, + 56481, + 56482, + 56483, + 56484, + 56485, + 56486, + 56487, + 56488, + 56491, + 56492, + 56493, + 56494, + 56495, + 56496, + 56497, + 56498, + 56499, + 56500, + 56501, + 56502, + 56503, + 56504, + 56505, + 56506, + 56507, + 56508, + 56509, + 56510, + 56511, + 56512, + 56513, + 56514, + 56515, + 56516, + 56517, + 56518, + 56519, + 56520, + 56521, + 56522, + 56523, + 56524, + 56525, + 56526, + 56527, + 56528, + 56529, + 56530, + 56532, + 56533, + 56534, + 56535, + 56536, + 56596, + 56597, + 56598, + 56599, + 56600, + 56601, + 56602, + 56603, + 56604, + 56605, + 56606, + 56607, + 56608, + 56612, + 56613, + 56614, + 56615, + 56616, + 56617, + 56618, + 56619, + 56620, + 56621, + 56622, + 56623, + 56624, + 56625, + 56626, + 56627, + 56628, + 56629, + 56630, + 56631, + 56632, + 56633, + 56634, + 56635, + 56636, + 56637, + 56638, + 56639, + 56640, + 56641, + 56642, + 56643, + 56644, + 56645, + 56646, + 56647, + 56648, + 56649, + 56650, + 56651, + 56652, + 56653, + 56654, + 56655, + 56656, + 56657, + 56658, + 56659, + 56663, + 56664, + 56665, + 56666, + 56667, + 56668, + 56669, + 56670, + 56671, + 56672, + 56673, + 56674, + 56675, + 56676, + 56677, + 56678, + 56679, + 56680, + 56681, + 56682, + 56683, + 56684, + 56685, + 56686, + 56687, + 56688, + 56689, + 56690, + 56691, + 56692, + 56693, + 56694, + 56695, + 56696, + 56697, + 56698, + 56699, + 56700, + 56701, + 56702, + 56703, + 56704, + 56705, + 56706, + 56708, + 56722, + 56723, + 56725, + 56772, + 56773, + 56774, + 56775, + 56776, + 56777, + 56778, + 56780, + 56781, + 56782, + 56870, + 56871, + 56872, + 56874, + 56875, + 56876, + 56877, + 56878, + 56879, + 56880, + 56881, + 56882, + 56883, + 56884, + 56885, + 56886, + 56887, + 56888, + 56889, + 56890, + 56891, + 56892, + 56893, + 56894, + 56895, + 56896, + 56897, + 56898, + 56899, + 56900, + 56901, + 56903, + 56904, + 56905, + 56906, + 56907, + 56908, + 56909, + 56910, + 56911, + 56912, + 56913, + 56914, + 56915, + 56916, + 56917, + 56918, + 56919, + 56920, + 56921, + 56922, + 56923, + 56924, + 56925, + 56926, + 56927, + 56928, + 56929, + 56930, + 56931, + 56933, + 56934, + 56935, + 56936, + 56937, + 56938, + 56939, + 56940, + 56941, + 56942, + 56944, + 56961, + 56963, + 56971, + 56972, + 56973, + 56974, + 56975, + 56976, + 56977, + 56978, + 56979, + 56980, + 56981, + 56982, + 56983, + 56984, + 56985, + 56987, + 56988, + 56989, + 56990, + 56991, + 56992, + 56993, + 56994, + 56995, + 56996, + 56997, + 56998, + 56999, + 57001, + 57002, + 57003, + 57004, + 57005, + 57006, + 57007, + 57009, + 57010, + 57012, + 57015, + 57016, + 57017, + 57018, + 57019, + 57020, + 57021, + 57022, + 57023, + 57024, + 57025, + 57026, + 57027, + 57028, + 57029, + 57030, + 57031, + 57032, + 57033, + 57034, + 57035, + 57036, + 57037, + 57038, + 57039, + 57040, + 57041, + 57042, + 57043, + 57044, + 57045, + 57046, + 57047, + 57048, + 57049, + 57050, + 57051, + 57052, + 57053, + 57054, + 57055, + 57056, + 57057, + 57058, + 57059, + 57063, + 57064, + 57065, + 57066, + 57067, + 57072, + 57073, + 57074, + 57075, + 57076, + 57077, + 57078, + 57079, + 57080, + 57081, + 57082, + 57084, + 57085, + 57086, + 57087, + 57088, + 57089, + 57090, + 57091, + 57092, + 57093, + 57094, + 57095, + 57096, + 57097, + 57098, + 57099, + 57100, + 57101, + 57102, + 57103, + 57104, + 57105, + 57106, + 57107, + 57108, + 57109, + 57110, + 57111, + 57112, + 57113, + 57115, + 57116, + 57131, + 57132, + 57133, + 57134, + 57137, + 57138, + 57139, + 57140, + 57141, + 57142, + 57143, + 57144, + 57145, + 57146, + 57147, + 57148, + 57149, + 57150, + 57151, + 57152, + 57153, + 57154, + 57155, + 57156, + 57157, + 57158, + 57159, + 57160, + 57161, + 57162, + 57163, + 57164, + 57165, + 57166, + 57167, + 57168, + 57173, + 57174, + 57175, + 57176, + 57177, + 57178, + 57179, + 57180, + 57181, + 57182, + 57183, + 57184, + 57185, + 57187, + 57188, + 57189, + 57190, + 57191, + 57192, + 57193, + 57194, + 57195, + 57196, + 57197, + 57198, + 57199, + 57200, + 57201, + 57202, + 57204, + 57205, + 57206, + 57207, + 57210, + 57211, + 57212, + 57213, + 57214, + 57215, + 57216, + 57217, + 57218, + 57219, + 57221, + 57222, + 57223, + 57224, + 57225, + 57226, + 57227, + 57228, + 57229, + 57230, + 57231, + 57232, + 57233, + 57234, + 57236, + 57252, + 57256, + 57257, + 57258, + 57260, + 57261, + 57262, + 57272, + 57273, + 57274, + 57275, + 57276, + 57277, + 57278, + 57279, + 57280, + 57281, + 57282, + 57283, + 57284, + 57285, + 57286, + 57287, + 57288, + 57289, + 57290, + 57291, + 57292, + 57293, + 57294, + 57295, + 57296, + 57297, + 57298, + 57299, + 57300, + 57301, + 57302, + 57303, + 57304, + 57305, + 57306, + 57307, + 57308, + 57311, + 57321, + 57322, + 57323, + 57324, + 57325, + 57326, + 57327, + 57328, + 57329, + 57330, + 57331, + 57333, + 57334, + 57335, + 57336, + 57337, + 57338, + 57339, + 57340, + 57341, + 57342, + 57343, + 57344, + 57345, + 57346, + 57347, + 57348, + 57349, + 57350, + 57351, + 57352, + 57353, + 57354, + 57355, + 57356, + 57357, + 57358, + 57359, + 57360, + 57361, + 57362, + 57363, + 57364, + 57365, + 57366, + 57367, + 57368, + 57369, + 57370, + 57371, + 57372, + 57373, + 57374, + 57376, + 57377, + 57378, + 57379, + 57380, + 57381, + 57382, + 57383, + 57384, + 57385, + 57386, + 57387, + 57388, + 57389, + 57390, + 57391, + 57392, + 57393, + 57394, + 57395, + 57396, + 57397, + 57398, + 57399, + 57400, + 57401, + 57402, + 57403, + 57404, + 57405, + 57406, + 57407, + 57426, + 57427, + 57428, + 57429, + 57430, + 57431, + 57432, + 57433, + 57434, + 57435, + 57436, + 57437, + 57438, + 57439, + 57440, + 57441, + 57442, + 57443, + 57444, + 57445, + 57446, + 57447, + 57448, + 57449, + 57450, + 57451, + 57452, + 57453, + 57454, + 57455, + 57456, + 57457, + 57458, + 57459, + 57460, + 57461, + 57462, + 57463, + 57464, + 57465, + 57466, + 57467, + 57468, + 57469, + 57470, + 57471, + 57472, + 57473, + 57474, + 57475, + 57476, + 57477, + 57478, + 57479, + 57480, + 57481, + 57482, + 57483, + 57484, + 57485, + 57486, + 57487, + 57488, + 57489, + 57490, + 57491, + 57492, + 57493, + 57494, + 57495, + 57496, + 57497, + 57498, + 57499, + 57500, + 57501, + 57502, + 57503, + 57504, + 57505, + 57506, + 57507, + 57508, + 57511, + 57525, + 57526, + 57527, + 57528, + 57529, + 57530, + 57531, + 57532, + 57533, + 57534, + 57535, + 57536, + 57537, + 57538, + 57539, + 57540, + 57541, + 57542, + 57543, + 57544, + 57545, + 57546, + 57547, + 57548, + 57549, + 57550, + 57551, + 57552, + 57553, + 57554, + 57555, + 57557, + 57558, + 57559, + 57560, + 57561, + 57562, + 57563, + 57564, + 57565, + 57566, + 57567, + 57568, + 57577, + 57578, + 57579, + 57580, + 57581, + 57582, + 57583, + 57584, + 57585, + 57586, + 57587, + 57588, + 57589, + 57590, + 57591, + 57592, + 57593, + 57594, + 57595, + 57596, + 57597, + 57598, + 57599, + 57600, + 57601, + 57602, + 57603, + 57604, + 57605, + 57606, + 57607, + 57608, + 57609, + 57627, + 57628, + 57629, + 57630, + 57631, + 57632, + 57633, + 57645, + 57646, + 57647, + 57648, + 57649, + 57650, + 57651, + 57652, + 57653, + 57654, + 57655, + 57656, + 57657, + 57658, + 57659, + 57660, + 57661, + 57662, + 57663, + 57664, + 57665, + 57666, + 57667, + 57668, + 57669, + 57670, + 57671, + 57672, + 57673, + 57674, + 57675, + 57676, + 57677, + 57678, + 57679, + 57680, + 57681, + 57682, + 57683, + 57684, + 57685, + 57686, + 57687, + 57688, + 57689, + 57690, + 57691, + 57692, + 57693, + 57694, + 57695, + 57696, + 57697, + 57698, + 57699, + 57700, + 57701, + 57702, + 57703, + 57704, + 57705, + 57706, + 57707, + 57708, + 57709, + 57710, + 57711, + 57712, + 57713, + 57714, + 57715, + 57716, + 57717, + 57718, + 57719, + 57720, + 57721, + 57722, + 57723, + 57724, + 57725, + 57726, + 57727, + 57728, + 57729, + 57730, + 57731, + 57732, + 57733, + 57734, + 57735, + 57736, + 57737, + 57738, + 57739, + 57740, + 57741, + 57742, + 57743, + 57744, + 57745, + 57746, + 57747, + 57748, + 57749, + 57750, + 57751, + 57752, + 57764, + 57891, + 58129, + 58493, + 58494, + 58546, + 58556, + 58557, + 58803, + 58806, + 58807, + 58808, + 58811, + 58814, + 58818, + 58819, + 59011, + 59012, + 59013, + 59016, + 59020, + 59022, + 59023, + 59024, + 59025, + 59026, + 60001, + 60002, + 60003, + 60004, + 60011, + 60012, + 60013, + 60014, + 60015, + 60016, + 80062, + 301041, + 301051, + 301061, + 301062, + 301081, + 301082, + 301101, + 301111, + 301121, + 301131, + 301132, + 301141, + 301151, + 302011, + 302012, + 302013, + 302021, + 302025, + 302026, + 302031, + 302032, + 302033, + 302034, + 302041, + 302051, + 302052, + 302061, + 302062, + 302071, + 302081, + 302091, + 302101, + 302111, + 302121, + 302122, + 302123, + 302124, + 302131, + 302132, + 302141, + 302142, + 302151, + 302152, + 302161, + 302162, + 302171, + 302172, + 302181, + 500260, + 500271, + 500281, + 500291, + 500301, + 500311, + 500330, + 500341, + 500351, + 500361, + 500370, + 500381, + 500390, + 500401, + 500430, + 500440, + 500451, + 500461, + 500471, + 500481, + 500491, + 500501, + 500521, + 500741, + 500750, + 500761, + 500770, + 500781, + 501511, + 502191, + 543300, + 543310, + 543320, + 543330, + 543340, + 543350, + 543360, + 543370, + 543380, + 543390, + 543400, + 543420, + 543430, + 543440, + 543450, + 543470, + 543480, + 543490, + 543500, + 543510, + 543520, + 543530, + 543540, + 543550, + 543560, + 543570, + 543580, + 543590, + 543600, + 543620, + 543630, + 543640, + 543650, + 543660, + 543670, + 543680 + ] + ) diff --git a/game_server/packet/handlers/GetPrivilegeInfoReq.py b/game_server/packet/handlers/GetPrivilegeInfoReq.py new file mode 100644 index 0000000..eee050e --- /dev/null +++ b/game_server/packet/handlers/GetPrivilegeInfoReq.py @@ -0,0 +1,78 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetPrivilegeInfoReq, + GetPrivilegeInfoRsp, + PrivilegeInfo, + PrivilegeRightInfo +) + +async def handle(session: Session, msg: GetPrivilegeInfoReq) -> betterproto.Message: + return GetPrivilegeInfoRsp( + retcode=0, + privilege_list=[ + PrivilegeInfo( + expire_time=1734001367, + privilege_id=6, + right_info_list=[ + PrivilegeRightInfo( + max_use_times=10, + next_auto_refresh_time=1730145600, + right_id=4, + type=1 + ) + ] + ), + PrivilegeInfo( + expire_time=1668139199, + privilege_id=19, + right_info_list=[ + PrivilegeRightInfo( + max_use_times=10, + next_auto_refresh_time=1730145600, + right_id=17, + total_used_times=10, + type=4 + ) + ] + ), + PrivilegeInfo( + expire_time=1685678400, + privilege_id=23, + right_info_list=[ + PrivilegeRightInfo( + max_use_times=10, + next_auto_refresh_time=1730145600, + right_id=21, + total_used_times=10, + type=4 + ) + ] + ), + PrivilegeInfo( + expire_time=1700798399, + privilege_id=25, + right_info_list=[ + PrivilegeRightInfo( + max_use_times=10, + next_auto_refresh_time=1730145600, + right_id=23, + total_used_times=10, + type=4 + ) + ] + ), + PrivilegeInfo( + expire_time=1731643200, + privilege_id=34, + right_info_list=[ + PrivilegeRightInfo( + max_use_times=10, + next_auto_refresh_time=1730145600, + right_id=32, + type=4 + ) + ] + ), + ] + ) diff --git a/game_server/packet/handlers/GetProductListReq.py b/game_server/packet/handlers/GetProductListReq.py new file mode 100644 index 0000000..47dc365 --- /dev/null +++ b/game_server/packet/handlers/GetProductListReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from game_server.utils import get_unix_in_seconds +from lib.proto import GetProductListReq,GetProductListRsp + +async def handle(session: Session, msg: GetProductListReq) -> betterproto.Message: + return GetProductListRsp( + retcode=0, + next_random_box_product_refresh_time=int(get_unix_in_seconds() + 3600 * 24), + next_limit_product_refresh_time=int(get_unix_in_seconds() + 3600 * 24) + ) diff --git a/game_server/packet/handlers/GetProductRecommendListReq.py b/game_server/packet/handlers/GetProductRecommendListReq.py new file mode 100644 index 0000000..71e6bac --- /dev/null +++ b/game_server/packet/handlers/GetProductRecommendListReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetProductRecommendListReq, GetProductRecommendListRsp + +async def handle(session: Session, msg: GetProductRecommendListReq) -> betterproto.Message: + return GetProductRecommendListRsp( + retcode=0, + recommend_list=[16301720] + ) diff --git a/game_server/packet/handlers/GetRaffleActivityReq.py b/game_server/packet/handlers/GetRaffleActivityReq.py new file mode 100644 index 0000000..fe0f64c --- /dev/null +++ b/game_server/packet/handlers/GetRaffleActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRaffleActivityReq,GetRaffleActivityRsp + +async def handle(session: Session, msg: GetRaffleActivityReq) -> betterproto.Message: + return GetRaffleActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetRankScheduleDataReq.py b/game_server/packet/handlers/GetRankScheduleDataReq.py new file mode 100644 index 0000000..7fa292d --- /dev/null +++ b/game_server/packet/handlers/GetRankScheduleDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRankScheduleDataReq,GetRankScheduleDataRsp + +async def handle(session: Session, msg: GetRankScheduleDataReq) -> betterproto.Message: + return GetRankScheduleDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetRecommendFriendListReq.py b/game_server/packet/handlers/GetRecommendFriendListReq.py new file mode 100644 index 0000000..12a1c0e --- /dev/null +++ b/game_server/packet/handlers/GetRecommendFriendListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRecommendFriendListReq, GetRecommendFriendListRsp + +async def handle(session: Session, msg: GetRecommendFriendListReq) -> betterproto.Message: + return GetRecommendFriendListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetRecommendGoodsReq.py b/game_server/packet/handlers/GetRecommendGoodsReq.py new file mode 100644 index 0000000..ee5095c --- /dev/null +++ b/game_server/packet/handlers/GetRecommendGoodsReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRecommendGoodsReq, GetRecommendGoodsRsp + +async def handle(session: Session, msg: GetRecommendGoodsReq) -> betterproto.Message: + return GetRecommendGoodsRsp(retcode=0) diff --git a/game_server/packet/handlers/GetRecommendMissionPanelListReq.py b/game_server/packet/handlers/GetRecommendMissionPanelListReq.py new file mode 100644 index 0000000..85666c0 --- /dev/null +++ b/game_server/packet/handlers/GetRecommendMissionPanelListReq.py @@ -0,0 +1,24 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.recommend_panel import RecommendPanelData +from lib.proto import ( + GetRecommendMissionPanelListReq, + GetRecommendMissionPanelListRsp, + RecommendMissionPanel +) + +async def handle(session: Session, msg: GetRecommendMissionPanelListReq) -> betterproto.Message: + panel_list : RecommendMissionPanel = [ + RecommendMissionPanel( + panel_id=panel.PanelID, + is_panel_show=True, + mission_begin_time=0 + ) + for panel in ResourceManager.instance().values(RecommendPanelData) + ] + + return GetRecommendMissionPanelListRsp( + retcode=0, + recommend_mission_panel_list=panel_list + ) diff --git a/game_server/packet/handlers/GetRegionUidRangeReq.py b/game_server/packet/handlers/GetRegionUidRangeReq.py new file mode 100644 index 0000000..044b8ea --- /dev/null +++ b/game_server/packet/handlers/GetRegionUidRangeReq.py @@ -0,0 +1,20 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetRegionUidRangeReq, + GetRegionUidRangeRsp, + RegionUidRange +) + +async def handle(session: Session, msg: GetRegionUidRangeReq) -> betterproto.Message: + return GetRegionUidRangeRsp( + retcode=0, + local_region_name="overseas01", + region_uid_range_list=[ + RegionUidRange( + end_uid=50000000, + region_name="overseas01", + start_uid=1000 + ) + ] + ) diff --git a/game_server/packet/handlers/GetRewardLineActivityReq.py b/game_server/packet/handlers/GetRewardLineActivityReq.py new file mode 100644 index 0000000..b7e9c84 --- /dev/null +++ b/game_server/packet/handlers/GetRewardLineActivityReq.py @@ -0,0 +1,168 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetRewardLineActivityReq, + GetRewardLineActivityRsp, + RewardLineActivity +) + +async def handle(session: Session, msg: GetRewardLineActivityReq) -> betterproto.Message: + return GetRewardLineActivityRsp( + retcode=0, + reward_line_activity_list=[ + RewardLineActivity( + id=10 + ), + RewardLineActivity( + id=11 + ), + RewardLineActivity( + id=12 + ), + RewardLineActivity( + id=13 + ), + RewardLineActivity( + id=14 + ), + RewardLineActivity( + id=15 + ), + RewardLineActivity( + id=16 + ), + RewardLineActivity( + id=23 + ), + RewardLineActivity( + id=24 + ), + RewardLineActivity( + id=25 + ), + RewardLineActivity( + id=26 + ), + RewardLineActivity( + id=27 + ), + RewardLineActivity( + id=28 + ), + RewardLineActivity( + id=29 + ), + RewardLineActivity( + id=30 + ), + RewardLineActivity( + id=31 + ), + RewardLineActivity( + id=32 + ), + RewardLineActivity( + id=33 + ), + RewardLineActivity( + id=34 + ), + RewardLineActivity( + id=35 + ), + RewardLineActivity( + id=36 + ), + RewardLineActivity( + id=37 + ), + RewardLineActivity( + id=38 + ), + RewardLineActivity( + id=39 + ), + RewardLineActivity( + id=45 + ), + RewardLineActivity( + id=46 + ), + RewardLineActivity( + id=47 + ), + RewardLineActivity( + id=48 + ), + RewardLineActivity( + id=49 + ), + RewardLineActivity( + id=50 + ), + RewardLineActivity( + id=51 + ), + RewardLineActivity( + id=52 + ), + RewardLineActivity( + id=53 + ), + RewardLineActivity( + id=54 + ), + RewardLineActivity( + id=55 + ), + RewardLineActivity( + id=56 + ), + RewardLineActivity( + id=57 + ), + RewardLineActivity( + id=58 + ), + RewardLineActivity( + id=59 + ), + RewardLineActivity( + id=60 + ), + RewardLineActivity( + id=61 + ), + RewardLineActivity( + id=62 + ), + RewardLineActivity( + id=64 + ), + RewardLineActivity( + id=65 + ), + RewardLineActivity( + id=66 + ), + RewardLineActivity( + id=67 + ), + RewardLineActivity( + id=68 + ), + RewardLineActivity( + id=69 + ), + RewardLineActivity( + id=70 + ), + RewardLineActivity( + id=71 + ), + RewardLineActivity( + id=72 + ) + ] + ) + diff --git a/game_server/packet/handlers/GetRoomDataReq.py b/game_server/packet/handlers/GetRoomDataReq.py new file mode 100644 index 0000000..38cc4c7 --- /dev/null +++ b/game_server/packet/handlers/GetRoomDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRoomDataReq,GetRoomDataRsp + +async def handle(session: Session, msg: GetRoomDataReq) -> betterproto.Message: + return GetRoomDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetRpgTaleReq.py b/game_server/packet/handlers/GetRpgTaleReq.py new file mode 100644 index 0000000..21172b2 --- /dev/null +++ b/game_server/packet/handlers/GetRpgTaleReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetRpgTaleReq,GetRpgTaleRsp + +async def handle(session: Session, msg: GetRpgTaleReq) -> betterproto.Message: + return GetRpgTaleRsp(retcode=0) diff --git a/game_server/packet/handlers/GetScratchTicketReq.py b/game_server/packet/handlers/GetScratchTicketReq.py new file mode 100644 index 0000000..d59788d --- /dev/null +++ b/game_server/packet/handlers/GetScratchTicketReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetScratchTicketReq,GetScratchTicketRsp + +async def handle(session: Session, msg: GetScratchTicketReq) -> betterproto.Message: + return GetScratchTicketRsp(retcode=0) diff --git a/game_server/packet/handlers/GetSecurityPasswordReq.py b/game_server/packet/handlers/GetSecurityPasswordReq.py new file mode 100644 index 0000000..366c05d --- /dev/null +++ b/game_server/packet/handlers/GetSecurityPasswordReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetSecurityPasswordReq, GetSecurityPasswordRsp + +async def handle(session: Session, msg: GetSecurityPasswordReq) -> betterproto.Message: + return GetSecurityPasswordRsp(retcode=0) diff --git a/game_server/packet/handlers/GetShopListReq.py b/game_server/packet/handlers/GetShopListReq.py new file mode 100644 index 0000000..28abc0e --- /dev/null +++ b/game_server/packet/handlers/GetShopListReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetShopListReq,GetShopListRsp + +async def handle(session: Session, msg: GetShopListReq) -> betterproto.Message: + return GetShopListRsp( + retcode=0, + is_all=True + ) diff --git a/game_server/packet/handlers/GetShoppingMallListReq.py b/game_server/packet/handlers/GetShoppingMallListReq.py new file mode 100644 index 0000000..e2dc44d --- /dev/null +++ b/game_server/packet/handlers/GetShoppingMallListReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetShoppingMallListReq, GetShoppingMallListRsp + +async def handle(session: Session, msg: GetShoppingMallListReq) -> betterproto.Message: + return GetShoppingMallListRsp(retcode=0) diff --git a/game_server/packet/handlers/GetStageActDifficultyReq.py b/game_server/packet/handlers/GetStageActDifficultyReq.py new file mode 100644 index 0000000..96a4bbe --- /dev/null +++ b/game_server/packet/handlers/GetStageActDifficultyReq.py @@ -0,0 +1,22 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.act_challenge_data import ActChallengeData +from lib.proto import ( + GetStageActDifficultyReq, + GetStageActDifficultyRsp, + StageActDifficultyInfo +) + +async def handle(session: Session, msg: GetStageActDifficultyReq) -> betterproto.Message: + return GetStageActDifficultyRsp( + retcode=0, + act_difficulty_list=[ + StageActDifficultyInfo( + act_id=act.actId, + difficulty=act.difficulty, + has_take_challenge_num_index=[1,2,3] + ) + for act in ResourceManager.instance().values(ActChallengeData) + ] + ) diff --git a/game_server/packet/handlers/GetStageChapterReq.py b/game_server/packet/handlers/GetStageChapterReq.py new file mode 100644 index 0000000..6ad6b0e --- /dev/null +++ b/game_server/packet/handlers/GetStageChapterReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetStageChapterReq,GetStageChapterRsp + +async def handle(session: Session, msg: GetStageChapterReq) -> betterproto.Message: + return GetStageChapterRsp(retcode=0) diff --git a/game_server/packet/handlers/GetStageDataReq.py b/game_server/packet/handlers/GetStageDataReq.py new file mode 100644 index 0000000..379ac6c --- /dev/null +++ b/game_server/packet/handlers/GetStageDataReq.py @@ -0,0 +1,37 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.stage_data_main import StageDataMain +from lib.proto import ( + GetStageDataReq, + GetStageDataRsp, + Stage, + StageEventData +) + +async def handle(session: Session, msg: GetStageDataReq) -> betterproto.Message: + stage_list : Stage = [ + Stage( + id=stage.levelId, + progress=1, + challenge_index_list=[0,1,2] if len(stage.challengeList) == 3 else [0], + is_done=True, + max_rank=1 + ) + for stage in ResourceManager.instance().values(StageDataMain) + ] + + return GetStageDataRsp( + retcode=0, + is_all=True, + stage_list=stage_list, + finished_chapter_list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,36,43], + event_data_list=[ + StageEventData( + begin_time=1729108800, + end_time=1990911600, + chapter_id=200, + unlock_level=30 + ) + ] + ) diff --git a/game_server/packet/handlers/GetStageDropDisplayReq.py b/game_server/packet/handlers/GetStageDropDisplayReq.py new file mode 100644 index 0000000..fa863e4 --- /dev/null +++ b/game_server/packet/handlers/GetStageDropDisplayReq.py @@ -0,0 +1,18 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetStageDropDisplayReq, + GetStageDropDisplayRsp, + StageDropDisplayInfo +) + +async def handle(session: Session, msg: GetStageDropDisplayReq) -> betterproto.Message: + return GetStageDropDisplayRsp( + retcode=0, + stage_drop_list=[ + StageDropDisplayInfo( + stage_id=id + ) + for id in msg.stage_id_list + ] + ) diff --git a/game_server/packet/handlers/GetStageRecommendAvatarReq.py b/game_server/packet/handlers/GetStageRecommendAvatarReq.py new file mode 100644 index 0000000..04addbe --- /dev/null +++ b/game_server/packet/handlers/GetStageRecommendAvatarReq.py @@ -0,0 +1,19 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetStageRecommendAvatarReq, + GetStageRecommendAvatarRsp, + StageRecommendAvatar +) + +async def handle(session: Session, msg: GetStageRecommendAvatarReq) -> betterproto.Message: + return GetStageRecommendAvatarRsp( + retcode=0, + stage_recommend_avatar_list=[ + StageRecommendAvatar( + id=f"{id}", + type=msg.type + ) + for id in msg.id_list + ] + ) diff --git a/game_server/packet/handlers/GetSupportActivityReq.py b/game_server/packet/handlers/GetSupportActivityReq.py new file mode 100644 index 0000000..852edb5 --- /dev/null +++ b/game_server/packet/handlers/GetSupportActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetSupportActivityReq,GetSupportActivityRsp + +async def handle(session: Session, msg: GetSupportActivityReq) -> betterproto.Message: + return GetSupportActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetSurveyDataReq.py b/game_server/packet/handlers/GetSurveyDataReq.py new file mode 100644 index 0000000..142a489 --- /dev/null +++ b/game_server/packet/handlers/GetSurveyDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetSurveyDataReq, GetSurveyDataRsp + +async def handle(session: Session, msg: GetSurveyDataReq) -> betterproto.Message: + return GetSurveyDataRsp(retcode=0) diff --git a/game_server/packet/handlers/GetThemeDataReq.py b/game_server/packet/handlers/GetThemeDataReq.py new file mode 100644 index 0000000..0af1a60 --- /dev/null +++ b/game_server/packet/handlers/GetThemeDataReq.py @@ -0,0 +1,22 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.theme_data_avatar import ThemeDataAvatar +from lib.proto import ( + GetThemeDataReq, + GetThemeDataRsp, + ThemeData +) + +async def handle(session: Session, msg: GetThemeDataReq) -> betterproto.Message: + return GetThemeDataRsp( + retcode=0, + theme_list=[ + ThemeData( + begin_time=1583373600, + end_time=2080843200, + theme_id=theme.AvatarData + ) + for theme in ResourceManager.instance().values(ThemeDataAvatar) + ] + ) diff --git a/game_server/packet/handlers/GetThemeWantedReq.py b/game_server/packet/handlers/GetThemeWantedReq.py new file mode 100644 index 0000000..b31a64e --- /dev/null +++ b/game_server/packet/handlers/GetThemeWantedReq.py @@ -0,0 +1,37 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetThemeWantedReq, + GetThemeWantedRsp, + ThemeWantedActivity, + ThemeWantedStageGroupInfo +) + +async def handle(session: Session, msg: GetThemeWantedReq) -> betterproto.Message: + return GetThemeWantedRsp( + retcode=0, + theme_wanted_activity=ThemeWantedActivity( + activity_id=11105, + open_stage_group_id_list=[17,18,19,20], + schedule_id=5, + stage_group_info_list=[ + ThemeWantedStageGroupInfo( + progress=8, + stage_group_id=17 + ), + ThemeWantedStageGroupInfo( + not_pass_progress_list=[7], + progress=7, + stage_group_id=18 + ), + ThemeWantedStageGroupInfo( + progress=8, + stage_group_id=19 + ), + ThemeWantedStageGroupInfo( + progress=8, + stage_group_id=20 + ) + ] + ) + ) diff --git a/game_server/packet/handlers/GetTowerRaidActivityReq.py b/game_server/packet/handlers/GetTowerRaidActivityReq.py new file mode 100644 index 0000000..a319352 --- /dev/null +++ b/game_server/packet/handlers/GetTowerRaidActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetTowerRaidActivityReq,GetTowerRaidActivityRsp + +async def handle(session: Session, msg: GetTowerRaidActivityReq) -> betterproto.Message: + return GetTowerRaidActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetTradingCardActivityReq.py b/game_server/packet/handlers/GetTradingCardActivityReq.py new file mode 100644 index 0000000..9c46132 --- /dev/null +++ b/game_server/packet/handlers/GetTradingCardActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetTradingCardActivityReq, GetTradingCardActivityRsp + +async def handle(session: Session, msg: GetTradingCardActivityReq) -> betterproto.Message: + return GetTradingCardActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetTrialAvatarReq.py b/game_server/packet/handlers/GetTrialAvatarReq.py new file mode 100644 index 0000000..a521b34 --- /dev/null +++ b/game_server/packet/handlers/GetTrialAvatarReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetTrialAvatarReq,GetTrialAvatarRsp + +async def handle(session: Session, msg: GetTrialAvatarReq) -> betterproto.Message: + return GetTrialAvatarRsp( + retcode=0, + is_all_update=True + ) diff --git a/game_server/packet/handlers/GetTvtActivityReq.py b/game_server/packet/handlers/GetTvtActivityReq.py new file mode 100644 index 0000000..ab7994a --- /dev/null +++ b/game_server/packet/handlers/GetTvtActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetTvtActivityReq,GetTvtActivityRsp + +async def handle(session: Session, msg: GetTvtActivityReq) -> betterproto.Message: + return GetTvtActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetVipRewardDataReq.py b/game_server/packet/handlers/GetVipRewardDataReq.py new file mode 100644 index 0000000..1280e64 --- /dev/null +++ b/game_server/packet/handlers/GetVipRewardDataReq.py @@ -0,0 +1,285 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetVipRewardDataReq, + GetVipRewardDataRsp, + VipReward +) + +async def handle(session: Session, msg: GetVipRewardDataReq) -> betterproto.Message: + return GetVipRewardDataRsp( + retcode=0, + total_pay_hcoin=17185, + vip_reward_list=[ + VipReward( + is_special_shine_list=[ + 1 + ], + pay_hcoin=10, + reward_batch=1, + reward_id_list=[ + 2101, + 2201 + ], + special_reward_id_list=[ + 2101 + ], + taken_reward_id_list=[ + 2101, + 2201, + 2251 + ], + vip_level=1 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=300, + reward_batch=1, + reward_id_list=[ + 2002, + 2102, + 2302 + ], + special_reward_id_list=[ + 2102, + 2302 + ], + taken_reward_id_list=[ + 2002, + 2102, + 2252, + 2302 + ], + vip_level=2 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=500, + reward_batch=1, + reward_id_list=[ + 2103, + 2203, + 2303 + ], + special_reward_id_list=[ + 2103, + 2303 + ], + taken_reward_id_list=[ + 2103, + 2203, + 2253, + 2303 + ], + vip_level=3 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=1000, + reward_batch=1, + reward_id_list=[ + 2004, + 2104, + 2304 + ], + special_reward_id_list=[ + 2104, + 2304 + ], + taken_reward_id_list=[ + 2004, + 2104, + 2254, + 2304 + ], + vip_level=4 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=2000, + reward_batch=1, + reward_id_list=[ + 2105, + 2205, + 2305 + ], + special_reward_id_list=[ + 2105, + 2305 + ], + taken_reward_id_list=[ + 2105, + 2205, + 2255, + 2305 + ], + vip_level=5 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=5000, + reward_batch=1, + reward_id_list=[ + 2006, + 2106, + 2306 + ], + special_reward_id_list=[ + 2106, + 2306 + ], + taken_reward_id_list=[ + 2006, + 2106, + 2256, + 2306 + ], + vip_level=6 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=10000, + reward_batch=1, + reward_id_list=[ + 2107, + 2207, + 2257, + 2307 + ], + special_reward_id_list=[ + 2107, + 2307 + ], + taken_reward_id_list=[ + 2107, + 2207, + 2257, + 2307 + ], + vip_level=7 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=20000, + reward_batch=1, + reward_id_list=[ + 2108, + 2208, + 2258, + 2308 + ], + special_reward_id_list=[ + 2108, + 2308 + ], + vip_level=8 + ), + VipReward( + is_special_shine_list=[ + 1, + 1 + ], + pay_hcoin=50000, + reward_batch=1, + reward_id_list=[ + 2109, + 2209, + 2309 + ], + special_reward_id_list=[ + 2109, + 2309 + ], + vip_level=9 + ), + VipReward( + is_special_shine_list=[ + 1, + 1, + 1 + ], + pay_hcoin=100000, + reward_batch=1, + reward_id_list=[ + 2110, + 2210, + 2310 + ], + special_reward_id_list=[ + 2110, + 2310 + ], + vip_level=10 + ), + VipReward( + is_special_shine_list=[ + 1, + 1, + 1 + ], + pay_hcoin=150000, + reward_batch=1, + reward_id_list=[ + 2261, + 2311 + ], + special_reward_id_list=[ + 2311 + ], + vip_level=11 + ), + VipReward( + is_special_shine_list=[ + 1, + 1, + 1 + ], + pay_hcoin=200000, + reward_batch=1, + reward_id_list=[ + 2262, + 2312 + ], + special_reward_id_list=[ + 2312 + ], + vip_level=12 + ), + VipReward( + is_special_shine_list=[ + 1 + ], + pay_hcoin=250000, + reward_batch=1, + reward_id_list=[ + 2263, + 2313 + ], + special_reward_id_list=[ + 2313 + ], + vip_level=13 + ) + ] + ) diff --git a/game_server/packet/handlers/GetVirtualAvatarGroupDetailReq.py b/game_server/packet/handlers/GetVirtualAvatarGroupDetailReq.py new file mode 100644 index 0000000..a74ac26 --- /dev/null +++ b/game_server/packet/handlers/GetVirtualAvatarGroupDetailReq.py @@ -0,0 +1,35 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetVirtualAvatarGroupDetailReq, + GetVirtualAvatarGroupDetailRsp, + VirtualAvatarGroup, + VirtualAvatar +) + +async def handle(session: Session, msg: GetVirtualAvatarGroupDetailReq) -> betterproto.Message: + rsp = GetVirtualAvatarGroupDetailRsp(retcode=0) + if msg.group_id == 114: + rsp.virtual_avatar_group = VirtualAvatarGroup( + group_id=114, + virtual_avatar_list=[ + VirtualAvatar( + virtual_avatar_id=300001 + ), + VirtualAvatar( + virtual_avatar_id=300003 + ), + ], + virtual_avatar_team_list=[300001,300003] + ) + if msg.group_id == 111: + rsp.virtual_avatar_group = VirtualAvatarGroup( + group_id=114, + virtual_avatar_list=[ + VirtualAvatar( + virtual_avatar_id=300001 + ) + ], + virtual_avatar_team_list=[300001] + ) + return rsp \ No newline at end of file diff --git a/game_server/packet/handlers/GetWarshipDataReq.py b/game_server/packet/handlers/GetWarshipDataReq.py new file mode 100644 index 0000000..91a4e64 --- /dev/null +++ b/game_server/packet/handlers/GetWarshipDataReq.py @@ -0,0 +1,35 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.entry_theme_data import EntryThemeData +from lib.proto import ( + GetWarshipDataReq, + GetWarshipDataRsp, + WarshipThemeData, + WarshipComponent +) + +async def handle(session: Session, msg: GetWarshipDataReq) -> betterproto.Message: + + warship = [] + for theme in ResourceManager.instance().values(EntryThemeData): + ship = WarshipThemeData( + warship_id=theme.SpaceShipConfigID, + bgm_play_mode=1, + is_weather_fixed=True + ) + + if theme.ThemeBGMConfigList: + ship.component_list = WarshipComponent( + component_id=theme.ThemeBGMConfigList[0], + type=2 + ) + if theme.ThemeTagList: + ship.weather_idx = theme.ThemeTagList[0] + warship.append(ship) + + return GetWarshipDataRsp( + retcode=0, + is_all=True, + warship_list=warship + ) diff --git a/game_server/packet/handlers/GetWarshipItemDataReq.py b/game_server/packet/handlers/GetWarshipItemDataReq.py new file mode 100644 index 0000000..8637e77 --- /dev/null +++ b/game_server/packet/handlers/GetWarshipItemDataReq.py @@ -0,0 +1,15 @@ +import betterproto +from game_server.net.session import Session +from game_server.resource import ResourceManager +from game_server.resource.configdb.entry_theme_item_data import EntryThemeItemData +from lib.proto import GetWarshipItemDataReq, GetWarshipItemDataRsp + +async def handle(session: Session, msg: GetWarshipItemDataReq) -> betterproto.Message: + return GetWarshipItemDataRsp( + retcode=0, + is_all=True, + warship_item_id_list=[ + theme.ThemeItemID + for theme in ResourceManager.instance().values(EntryThemeItemData) + ] + ) diff --git a/game_server/packet/handlers/GetWarshipTrialDataReq.py b/game_server/packet/handlers/GetWarshipTrialDataReq.py new file mode 100644 index 0000000..e647ead --- /dev/null +++ b/game_server/packet/handlers/GetWarshipTrialDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetWarshipTrialDataReq, GetWarshipTrialDataRsp + +async def handle(session: Session, msg: GetWarshipTrialDataReq) -> betterproto.Message: + return GetWarshipTrialDataRsp(retcode=0,is_all=True) diff --git a/game_server/packet/handlers/GetWebActivityInfoReq.py b/game_server/packet/handlers/GetWebActivityInfoReq.py new file mode 100644 index 0000000..8f9c157 --- /dev/null +++ b/game_server/packet/handlers/GetWebActivityInfoReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetWebActivityInfoReq,GetWebActivityInfoRsp + +async def handle(session: Session, msg: GetWebActivityInfoReq) -> betterproto.Message: + return GetWebActivityInfoRsp( + retcode=0, + web_activity_list=[] + ) diff --git a/game_server/packet/handlers/GetWeekDayActivityDataReq.py b/game_server/packet/handlers/GetWeekDayActivityDataReq.py new file mode 100644 index 0000000..da96467 --- /dev/null +++ b/game_server/packet/handlers/GetWeekDayActivityDataReq.py @@ -0,0 +1,24 @@ +import betterproto +from game_server.net.session import Session +from game_server.utils import get_unix_in_seconds +from lib.proto import ( + GetWeekDayActivityDataReq, + GetWeekDayActivityDataRsp, + WeekDayActivity +) + +async def handle(session: Session, msg: GetWeekDayActivityDataReq) -> betterproto.Message: + return GetWeekDayActivityDataRsp( + retcode=0, + activity_list=[ + WeekDayActivity( + activity_id=1003, + stage_id_list=[101302, 101303, 101304, 101305], + enter_times=1, + begin_time=0, + end_time=get_unix_in_seconds() + 3600 * 24 * 7, + activity_begin_time=int(get_unix_in_seconds() * (10 / 8)), + force_open_time=0 + ) + ] + ) diff --git a/game_server/packet/handlers/GetWeeklyRoutineActivityReq.py b/game_server/packet/handlers/GetWeeklyRoutineActivityReq.py new file mode 100644 index 0000000..6484efb --- /dev/null +++ b/game_server/packet/handlers/GetWeeklyRoutineActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetWeeklyRoutineActivityReq,GetWeeklyRoutineActivityRsp + +async def handle(session: Session, msg: GetWeeklyRoutineActivityReq) -> betterproto.Message: + return GetWeeklyRoutineActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/GetWikiDataReq.py b/game_server/packet/handlers/GetWikiDataReq.py new file mode 100644 index 0000000..78630f4 --- /dev/null +++ b/game_server/packet/handlers/GetWikiDataReq.py @@ -0,0 +1,10 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GetWikiDataReq, GetWikiDataRsp + +async def handle(session: Session, msg: GetWikiDataReq) -> betterproto.Message: + return GetWikiDataRsp( + retcode=0, + has_take_activity_suit_reward_list=[132], + has_take_rating_reward_list=[1,2,3,4,5,6] + ) diff --git a/game_server/packet/handlers/GetWorldMapDataReq.py b/game_server/packet/handlers/GetWorldMapDataReq.py new file mode 100644 index 0000000..df33c52 --- /dev/null +++ b/game_server/packet/handlers/GetWorldMapDataReq.py @@ -0,0 +1,176 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetWorldMapDataReq, + GetWorldMapDataRsp, + WorldMapData +) + +async def handle(session: Session, msg: GetWorldMapDataReq) -> betterproto.Message: + return GetWorldMapDataRsp( + retcode=0, + world_map_list=[ + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=1, + world_map_id=1 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=2, + world_map_id=2 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + high_light_max_level=30, + high_light_min_level=25, + id=3, + world_map_id=3 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=5, + weight=1, + world_map_id=5 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + high_light_max_level=88, + high_light_min_level=15, + id=6, + weight=1, + world_map_id=6 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + high_light_max_level=40, + high_light_min_level=30, + id=7, + weight=1, + world_map_id=7 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=8, + weight=1, + world_map_id=8 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=9, + weight=1, + world_map_id=9 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=10, + weight=1, + world_map_id=10 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=11, + weight=1, + world_map_id=11 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=49, + weight=1, + world_map_id=12 + ), + WorldMapData( + advance_time=1563069600, + begin_time=1563069600, + end_time=2060107199, + high_light_max_level=99, + high_light_min_level=20, + id=121, + weight=205, + world_map_id=2107 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + high_light_max_level=99, + high_light_min_level=50, + id=286, + weight=1, + world_map_id=18 + ), + WorldMapData( + advance_time=1611712800, + begin_time=1611712800, + end_time=2060107199, + high_light_max_level=88, + high_light_min_level=15, + id=307, + weight=1, + world_map_id=2221 + ), + WorldMapData( + advance_time=1705716000, + begin_time=1705716000, + end_time=2060107199, + id=1004, + weight=1, + world_map_id=1004 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + id=445, + weight=1000, + world_map_id=2313 + ), + WorldMapData( + advance_time=1300046400, + begin_time=1300046400, + end_time=2060107199, + high_light_max_level=30, + high_light_min_level=25, + id=451, + world_map_id=19 + ), + WorldMapData( + advance_time=1730080800, + begin_time=1730080800, + end_time=1880308800, + id=452, + weight=1301, + world_map_id=2317 + ), + WorldMapData( + advance_time=1729108800, + begin_time=1729108800, + end_time=1880308800, + id=458, + weight=122, + world_map_id=2320 + ) + ] + ) diff --git a/game_server/packet/handlers/GetWorldMapRecommendReq.py b/game_server/packet/handlers/GetWorldMapRecommendReq.py new file mode 100644 index 0000000..3f67083 --- /dev/null +++ b/game_server/packet/handlers/GetWorldMapRecommendReq.py @@ -0,0 +1,76 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + GetWorldMapRecommendReq, + GetWorldMapRecommendRsp, + WorldMapRecommend +) + + +async def handle(session: Session, msg: GetWorldMapRecommendReq) -> betterproto.Message: + return GetWorldMapRecommendRsp( + retcode=0, + activity_recommend_list=[ + WorldMapRecommend( + weight=110, + world_map_id=2317 + ), + WorldMapRecommend( + weight=100, + world_map_id=2321 + ) + ], + permanent_recommend_list=[ + WorldMapRecommend( + active_condition_list=[ + 201 + ], + weight=2, + world_map_id=9 + ), + WorldMapRecommend( + weight=100, + world_map_id=7 + ), + WorldMapRecommend( + active_condition_list=[ + 207 + ], + weight=-100, + world_map_id=7 + ), + WorldMapRecommend( + weight=86, + world_map_id=8 + ), + WorldMapRecommend( + active_condition_list=[ + 214, + 215 + ], + weight=1, + world_map_id=11 + ), + WorldMapRecommend( + active_condition_list=[ + 216 + ], + weight=45, + world_map_id=18 + ), + WorldMapRecommend( + weight=60, + world_map_id=1 + ), + WorldMapRecommend( + weight=50, + world_map_id=2107 + ), + WorldMapRecommend( + weight=70, + world_map_id=1004 + ) + ] + ) + + diff --git a/game_server/packet/handlers/GrandKeyActivateSkillReq.py b/game_server/packet/handlers/GrandKeyActivateSkillReq.py new file mode 100644 index 0000000..e7ce20d --- /dev/null +++ b/game_server/packet/handlers/GrandKeyActivateSkillReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import GrandKeyActivateSkillReq,GrandKeyActivateSkillRsp + +async def handle(session: Session, msg: GrandKeyActivateSkillReq) -> betterproto.Message: + return GrandKeyActivateSkillRsp(retcode=0) diff --git a/game_server/packet/handlers/LoginWishGetMainDataReq.py b/game_server/packet/handlers/LoginWishGetMainDataReq.py new file mode 100644 index 0000000..a0970dd --- /dev/null +++ b/game_server/packet/handlers/LoginWishGetMainDataReq.py @@ -0,0 +1,22 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + LoginWishGetMainDataReq, + LoginWishGetMainDataRsp, + LoginWishActivity +) + +async def handle(session: Session, msg: LoginWishGetMainDataReq) -> betterproto.Message: + return LoginWishGetMainDataRsp( + retcode=0, + activity_list=[ + LoginWishActivity( + activity_id=19, + begin_time=1729540800, + end_time=1880308800, + login_days=1, + show_begin_time=1729454400, + show_end_time=1880308800 + ) + ] + ) diff --git a/game_server/packet/handlers/MassiveWarGetActivityReq.py b/game_server/packet/handlers/MassiveWarGetActivityReq.py new file mode 100644 index 0000000..0345ecc --- /dev/null +++ b/game_server/packet/handlers/MassiveWarGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import MassiveWarGetActivityReq, MassiveWarGetActivityRsp + +async def handle(session: Session, msg: MassiveWarGetActivityReq) -> betterproto.Message: + return MassiveWarGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/OpenworldGetMechaTeamReq.py b/game_server/packet/handlers/OpenworldGetMechaTeamReq.py new file mode 100644 index 0000000..a2ae6f9 --- /dev/null +++ b/game_server/packet/handlers/OpenworldGetMechaTeamReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import OpenworldGetMechaTeamReq, OpenworldGetMechaTeamRsp + +async def handle(session: Session, msg: OpenworldGetMechaTeamReq) -> betterproto.Message: + return OpenworldGetMechaTeamRsp(retcode=0) diff --git a/game_server/packet/handlers/OpenworldHuntActivityGetDataReq.py b/game_server/packet/handlers/OpenworldHuntActivityGetDataReq.py new file mode 100644 index 0000000..91bda3d --- /dev/null +++ b/game_server/packet/handlers/OpenworldHuntActivityGetDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import OpenworldHuntActivityGetDataReq,OpenworldHuntActivityGetDataRsp + +async def handle(session: Session, msg: OpenworldHuntActivityGetDataReq) -> betterproto.Message: + return OpenworldHuntActivityGetDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetAchievementDataReq.py b/game_server/packet/handlers/PjmsGetAchievementDataReq.py new file mode 100644 index 0000000..4857882 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetAchievementDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import PjmsGetAchievementDataReq,PjmsGetAchievementDataRsp + +async def handle(session: Session, msg: PjmsGetAchievementDataReq) -> betterproto.Message: + return PjmsGetAchievementDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetActivityPanelReq.py b/game_server/packet/handlers/PjmsGetActivityPanelReq.py new file mode 100644 index 0000000..72a7f2f --- /dev/null +++ b/game_server/packet/handlers/PjmsGetActivityPanelReq.py @@ -0,0 +1,50 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + PjmsGetActivityPanelReq, + PjmsGetActivityPanelRsp, + PjmsActivityPanel +) + +async def handle(session: Session, msg: PjmsGetActivityPanelReq) -> betterproto.Message: + return PjmsGetActivityPanelRsp( + retcode=0, + activity_panel_list=[ + PjmsActivityPanel( + activity_id=1001, + advance_begin_time=1712800800, + advance_end_time=1716494399, + begin_time=1712800800, + end_time=4294967295, + is_resident=True, + min_level=30 + ), + PjmsActivityPanel( + activity_id=1002, + advance_begin_time=1718848800, + advance_end_time=1721851199, + begin_time=1718848800, + end_time=4294967295, + is_resident=True, + min_level=30 + ), + PjmsActivityPanel( + activity_id=1003, + advance_begin_time=1718157600, + advance_end_time=1725479999, + begin_time=1712887200, + end_time=4294967295, + is_resident=True, + min_level=30 + ), + PjmsActivityPanel( + activity_id=1004, + advance_begin_time=1726452000, + advance_end_time=1729108799, + begin_time=1726452000, + end_time=4294967295, + is_resident=True, + min_level=30 + ) + ] + ) diff --git a/game_server/packet/handlers/PjmsGetChapterDataReq.py b/game_server/packet/handlers/PjmsGetChapterDataReq.py new file mode 100644 index 0000000..dcb9292 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetChapterDataReq.py @@ -0,0 +1,145 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + PjmsGetChapterDataReq, + PjmsGetChapterDataRsp, + PjmsChapter, + ChapterShadowLake, + PjmsFormation, + PjmsUnitInfo, + PjmsAuxiliaryUnit, + PjmsCoreUnit, + PjmsUnitSet, + PjmsUnitSetSlot +) + +async def handle(session: Session, msg: PjmsGetChapterDataReq) -> betterproto.Message: + return PjmsGetChapterDataRsp( + retcode=0, + is_all=True, + cur_chapter_id=100, + chapter_list=[ + PjmsChapter( + chapter_id=100, + chapter_shadowlake=ChapterShadowLake( + energy_num=2, + max_energy_num=5 + ), + cur_track_series_id=1022, + exp=530, + formation=[ + PjmsFormation( + avatar_id_list=[150], + elf_id=4224, + is_elf_mode=True + ) + ], + last_take_chapter_reward_level=7, + last_take_chapter_reward_material_num=1000, + level=7, + playing_bgm_id=19, + talent_level=7, + unit_info=PjmsUnitInfo( + auxiliary_unit_list=[ + PjmsAuxiliaryUnit( + exp=170, + level=2, + unique_id=1000, + unit_id=301 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=101, + unit_id=301 + ), + PjmsAuxiliaryUnit( + exp=10, + level=2, + unique_id=1002, + unit_id=201 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1003, + unit_id=205 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1004, + unit_id=302 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1005, + unit_id=302 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1006, + unit_id=303 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1007, + unit_id=207 + ), + PjmsAuxiliaryUnit( + level=1, + unique_id=1008, + unit_id=303 + ), + ], + core_unit_list=[ + PjmsCoreUnit( + level=1, + unit_id=1 + ), + PjmsCoreUnit( + level=2, + unit_id=2 + ), + PjmsCoreUnit( + level=1, + unit_id=3 + ), + ], + cur_unit_set_id=1, + unit_set_list=[ + PjmsUnitSet( + set_id=1, + slot_list=[ + PjmsUnitSetSlot( + id=2, + slot_id=10 + ), + PjmsUnitSetSlot( + id=1002, + slot_id=100 + ), + PjmsUnitSetSlot( + id=1004, + slot_id=110 + ), + PjmsUnitSetSlot( + id=1006, + slot_id=120 + ) + ] + ), + PjmsUnitSet( + set_id=2 + ), + PjmsUnitSet( + set_id=3 + ), + PjmsUnitSet( + set_id=4 + ), + PjmsUnitSet( + set_id=5 + ) + ] + ) + ) + ] + ) diff --git a/game_server/packet/handlers/PjmsGetConditionDataReq.py b/game_server/packet/handlers/PjmsGetConditionDataReq.py new file mode 100644 index 0000000..fd472b9 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetConditionDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import PjmsGetConditionDataReq,PjmsGetConditionDataRsp + +async def handle(session: Session, msg: PjmsGetConditionDataReq) -> betterproto.Message: + return PjmsGetConditionDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetCurWorldReq.py b/game_server/packet/handlers/PjmsGetCurWorldReq.py new file mode 100644 index 0000000..bc01deb --- /dev/null +++ b/game_server/packet/handlers/PjmsGetCurWorldReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import (PjmsGetCurWorldReq,PjmsGetCurWorldRsp) + +async def handle(session: Session, msg: PjmsGetCurWorldReq) -> betterproto.Message: + return PjmsGetCurWorldRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetMainDataReq.py b/game_server/packet/handlers/PjmsGetMainDataReq.py new file mode 100644 index 0000000..9d8ed14 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetMainDataReq.py @@ -0,0 +1,10 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import ( + PjmsGetMainDataReq, + PjmsGetMainDataRsp +) + +async def handle(session: Session, msg: PjmsGetMainDataReq) -> betterproto.Message: + return PjmsGetMainDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetResidentStageDataReq.py b/game_server/packet/handlers/PjmsGetResidentStageDataReq.py new file mode 100644 index 0000000..ca4cb40 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetResidentStageDataReq.py @@ -0,0 +1,10 @@ + +import betterproto +from game_server.net.session import Session +from lib.proto import ( + PjmsGetResidentStageDataReq, + PjmsGetResidentStageDataRsp +) + +async def handle(session: Session, msg: PjmsGetResidentStageDataReq) -> betterproto.Message: + return PjmsGetResidentStageDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PjmsGetStoryDataReq.py b/game_server/packet/handlers/PjmsGetStoryDataReq.py new file mode 100644 index 0000000..4c63659 --- /dev/null +++ b/game_server/packet/handlers/PjmsGetStoryDataReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import PjmsGetStoryDataReq,PjmsGetStoryDataRsp + +async def handle(session: Session, msg: PjmsGetStoryDataReq) -> betterproto.Message: + return PjmsGetStoryDataRsp(retcode=0) diff --git a/game_server/packet/handlers/PlayerLoginReq.py b/game_server/packet/handlers/PlayerLoginReq.py new file mode 100644 index 0000000..8c4c40c --- /dev/null +++ b/game_server/packet/handlers/PlayerLoginReq.py @@ -0,0 +1,67 @@ +import betterproto +import traceback +from database import mongo +from game_server.net.session import Session +from game_server.game.player import Player,WarshipAvatar +from game_server.game.avatar.avatar_manager import AvatarTeamManager +from lib.proto import ( + PlayerLoginReq, + PlayerLoginRsp, + GetMpDataRsp, + MpDataType, + CGType, + GetMpDataRspOpType +) + +async def handle(session: Session, msg: PlayerLoginReq) -> betterproto.Message: + try: + data = mongo.find_documents("players")[0] + session.player = Player( + uid=data['UID'], + name=data['Name'], + level=data['Level'], + exp=data['Exp'], + hcoin=data['HCoin'], + stamina=data['Stamina'], + signature=data['Sign'], + head_photo=data['HeadPhoto'], + head_frame=data['HeadFrame'], + warship_id=data['WarshipId'], + assistant_avatar_id=data['AssistantAvatarId'], + birth_date=data['BirthDate'], + warship_avatar=WarshipAvatar( + warship_first_avatar_id=data['WarshipAvatar']['WarshipFirstAvatarId'], + warship_second_avatar_id=data['WarshipAvatar']['WarshipSecondAvatarId'] + ) + ) + + for team_id,team in data['CustomAvatarTeamList'].items(): + session.player.custom_avatar_team_list[int(team_id)] = AvatarTeamManager( + team_id=int(team_id), + name=team['Name'], + astral_mate_id=team['astraMateId'], + is_using_astra_mate=team['isUsingAstraMate'], + elf_id_list=team['elfIdList'], + avatar_id_list=team['AvatarIdLists'] + ) + + + session.player.init_default() + session.pending_notify(GetMpDataRsp( + retcode=0, + data_type=MpDataType.MP_DATA_PUNISH_TIME.value, + op_type=GetMpDataRspOpType.UPDATE_DATA.value, + punish_end_time=0 + )) + return PlayerLoginRsp( + retcode=0, + is_first_login=False, + region_name="overseas01", + cg_type=CGType.CG_SEVEN_CHAPTER.value, + region_id=248, + login_session_token=1, + psycho_key=0 + ) + except: + traceback.print_exc() + return diff --git a/game_server/packet/handlers/RaidReplaceGetDataReq.py b/game_server/packet/handlers/RaidReplaceGetDataReq.py new file mode 100644 index 0000000..6405840 --- /dev/null +++ b/game_server/packet/handlers/RaidReplaceGetDataReq.py @@ -0,0 +1,28 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + RaidReplaceGetDataReq, + RaidReplaceGetDataRsp, + RaidReplaceActivity +) + +async def handle(session: Session, msg: RaidReplaceGetDataReq) -> betterproto.Message: + return RaidReplaceGetDataRsp( + retcode=0, + activity_list=[ + RaidReplaceActivity( + activity_id=7042, + opened_stage_list=[ + 431016, + 431020, + 432013, + 433024, + 433027, + 434003, + 436016 + ], + reward_line_id=30001 + ) + ], + schedule_id=7005 + ) diff --git a/game_server/packet/handlers/RefreshAvatarSkillReq.py b/game_server/packet/handlers/RefreshAvatarSkillReq.py new file mode 100644 index 0000000..6a510b4 --- /dev/null +++ b/game_server/packet/handlers/RefreshAvatarSkillReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + RefreshAvatarSkillReq, + RefreshAvatarSkillRsp +) + +async def handle(session: Session, msg: RefreshAvatarSkillReq) -> betterproto.Message: + return RefreshAvatarSkillRsp(retcode=0) diff --git a/game_server/packet/handlers/RefreshGodWarTicketReq.py b/game_server/packet/handlers/RefreshGodWarTicketReq.py new file mode 100644 index 0000000..33ce9d3 --- /dev/null +++ b/game_server/packet/handlers/RefreshGodWarTicketReq.py @@ -0,0 +1,9 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import (RefreshGodWarTicketReq,RefreshGodWarTicketRsp) + +async def handle(session: Session, msg: RefreshGodWarTicketReq) -> betterproto.Message: + return RefreshGodWarTicketRsp( + retcode=0, + god_war_id=msg.god_war_id + ) \ No newline at end of file diff --git a/game_server/packet/handlers/ReportClientDataVersionReq.py b/game_server/packet/handlers/ReportClientDataVersionReq.py new file mode 100644 index 0000000..63f17ca --- /dev/null +++ b/game_server/packet/handlers/ReportClientDataVersionReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ReportClientDataVersionReq,ReportClientDataVersionRsp + +async def handle(session: Session, msg: ReportClientDataVersionReq) -> betterproto.Message: + return ReportClientDataVersionRsp(server_version=msg.version) diff --git a/game_server/packet/handlers/ReunionCookGetActivityReq.py b/game_server/packet/handlers/ReunionCookGetActivityReq.py new file mode 100644 index 0000000..ced3690 --- /dev/null +++ b/game_server/packet/handlers/ReunionCookGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ReunionCookGetActivityReq,ReunionCookGetActivityRsp + +async def handle(session: Session, msg: ReunionCookGetActivityReq) -> betterproto.Message: + return ReunionCookGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/SanctuaryGetMainInfoReq.py b/game_server/packet/handlers/SanctuaryGetMainInfoReq.py new file mode 100644 index 0000000..37c4737 --- /dev/null +++ b/game_server/packet/handlers/SanctuaryGetMainInfoReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import SanctuaryGetMainInfoReq, SanctuaryGetMainInfoRsp + +async def handle(session: Session, msg: SanctuaryGetMainInfoReq) -> betterproto.Message: + return SanctuaryGetMainInfoRsp(retcode=0) diff --git a/game_server/packet/handlers/SetClientDataReq.py b/game_server/packet/handlers/SetClientDataReq.py new file mode 100644 index 0000000..3e46cbd --- /dev/null +++ b/game_server/packet/handlers/SetClientDataReq.py @@ -0,0 +1,18 @@ +import betterproto +from game_server.net.session import Session +from database import mongo +from lib.proto import SetClientDataReq,SetClientDataRsp + +async def handle(session: Session, msg: SetClientDataReq) -> betterproto.Message: + client_data = list(mongo.find_documents_by_key_values("clientdata", {"ID": msg.client_data.id, "Type":msg.client_data.type})) + if not client_data: + mongo.insert_document("clientdata",{ + "ID":msg.client_data.id, + "Type":msg.client_data.type, + "Data":msg.client_data.data + }) + return SetClientDataRsp( + retcode=0, + id=msg.client_data.id, + type=msg.client_data.type + ) diff --git a/game_server/packet/handlers/SetDressReq.py b/game_server/packet/handlers/SetDressReq.py new file mode 100644 index 0000000..16009bf --- /dev/null +++ b/game_server/packet/handlers/SetDressReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import SetDressReq,SetDressRsp + +async def handle(session: Session, msg: SetDressReq) -> betterproto.Message: + avatar = session.player.avatars.get(msg.avatar_id) + avatar.dress_id = msg.dress_id + mongo.save(session,DataType.AVATAR,[msg.avatar_id]) + return SetDressRsp(retcode=0) diff --git a/game_server/packet/handlers/SetWarshipAvatarReq.py b/game_server/packet/handlers/SetWarshipAvatarReq.py new file mode 100644 index 0000000..8c727a0 --- /dev/null +++ b/game_server/packet/handlers/SetWarshipAvatarReq.py @@ -0,0 +1,26 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import ( + SetWarshipAvatarReq, + SetWarshipAvatarRsp, + GetMainDataRsp, + WarshipAvatarData +) + +async def handle(session: Session, msg: SetWarshipAvatarReq) -> betterproto.Message: + await session.send(session.create_packet( + GetMainDataRsp( + retcode=0, + warship_avatar=WarshipAvatarData( + warship_first_avatar_id=msg.first_avatar_id, + warship_second_avatar_id=0 + ), + type_list=[35] + ) + ) + ) + session.player.warship_avatar.warship_first_avatar_id = msg.first_avatar_id + mongo.save(session,DataType.PLAYER) + return SetWarshipAvatarRsp(retcode=0) diff --git a/game_server/packet/handlers/SetWarshipReq.py b/game_server/packet/handlers/SetWarshipReq.py new file mode 100644 index 0000000..ef3034b --- /dev/null +++ b/game_server/packet/handlers/SetWarshipReq.py @@ -0,0 +1,25 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import ( + SetWarshipReq, + SetWarshipRsp, + GetMainDataRsp, + WarshipThemeData +) + +async def handle(session: Session, msg: SetWarshipReq) -> betterproto.Message: + await session.send(session.create_packet( + GetMainDataRsp( + retcode=0, + warship_theme=WarshipThemeData( + warship_id=msg.warship_id + ), + type_list=[35] + ) + ) + ) + session.player.warship_id = msg.warship_id + mongo.save(session,DataType.PLAYER) + return SetWarshipRsp(retcode=0) diff --git a/game_server/packet/handlers/SimplifiedGodWarGetActivityReq.py b/game_server/packet/handlers/SimplifiedGodWarGetActivityReq.py new file mode 100644 index 0000000..d71e674 --- /dev/null +++ b/game_server/packet/handlers/SimplifiedGodWarGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import SimplifiedGodWarGetActivityReq,SimplifiedGodWarGetActivityRsp + +async def handle(session: Session, msg: SimplifiedGodWarGetActivityReq) -> betterproto.Message: + return SimplifiedGodWarGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/StageBeginReq.py b/game_server/packet/handlers/StageBeginReq.py new file mode 100644 index 0000000..b75673b --- /dev/null +++ b/game_server/packet/handlers/StageBeginReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import StageBeginReq,StageBeginRsp + +async def handle(session: Session, msg: StageBeginReq) -> betterproto.Message: + return StageBeginRsp( + retcode=0, + stage_id=msg.stage_id, + progress=0, + is_collect_cheat_data=False + ) diff --git a/game_server/packet/handlers/StageEndReq.py b/game_server/packet/handlers/StageEndReq.py new file mode 100644 index 0000000..adeada9 --- /dev/null +++ b/game_server/packet/handlers/StageEndReq.py @@ -0,0 +1,17 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + StageEndReq, + StageEndRsp, + StageEndReqBody +) + +async def handle(session: Session, msg: StageEndReq) -> betterproto.Message: + ms = memoryview(b"".join(msg.body)) + req = StageEndReqBody() + req.parse(ms.tobytes()) + return StageEndRsp( + retcode=0, + stage_id=req.stage_id, + end_status=req.end_status + ) diff --git a/game_server/packet/handlers/StageInnerDataReportReq.py b/game_server/packet/handlers/StageInnerDataReportReq.py new file mode 100644 index 0000000..e7c1ddd --- /dev/null +++ b/game_server/packet/handlers/StageInnerDataReportReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import StageInnerDataReportReq,StageInnerDataReportRsp + +async def handle(session: Session, msg: StageInnerDataReportReq) -> betterproto.Message: + return StageInnerDataReportRsp(retcode=0) diff --git a/game_server/packet/handlers/SusannaTrialGetActivityReq.py b/game_server/packet/handlers/SusannaTrialGetActivityReq.py new file mode 100644 index 0000000..8f1a04b --- /dev/null +++ b/game_server/packet/handlers/SusannaTrialGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import SusannaTrialGetActivityReq,SusannaTrialGetActivityRsp + +async def handle(session: Session, msg: SusannaTrialGetActivityReq) -> betterproto.Message: + return SusannaTrialGetActivityRsp(retcode=0) diff --git a/game_server/packet/handlers/SyncTimeReq.py b/game_server/packet/handlers/SyncTimeReq.py new file mode 100644 index 0000000..2f3584d --- /dev/null +++ b/game_server/packet/handlers/SyncTimeReq.py @@ -0,0 +1,11 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import SyncTimeReq,SyncTimeRsp +from game_server.utils import get_unix_in_seconds + +async def handle(session: Session, msg: SyncTimeReq) -> betterproto.Message: + return SyncTimeRsp( + retcode=0, + cur_time=get_unix_in_seconds(), + seq=msg.seq + ) diff --git a/game_server/packet/handlers/TakeGalInteractTriggerEventReq.py b/game_server/packet/handlers/TakeGalInteractTriggerEventReq.py new file mode 100644 index 0000000..524b59a --- /dev/null +++ b/game_server/packet/handlers/TakeGalInteractTriggerEventReq.py @@ -0,0 +1,11 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import TakeGalInteractTriggerEventReq,TakeGalInteractTriggerEventRsp + +async def handle(session: Session, msg: TakeGalInteractTriggerEventReq) -> betterproto.Message: + return TakeGalInteractTriggerEventRsp( + retcode=0, + avatar_id=msg.avatar_id, + event_id=msg.event_id + ) diff --git a/game_server/packet/handlers/ThemeWantedRefreshTicketReq.py b/game_server/packet/handlers/ThemeWantedRefreshTicketReq.py new file mode 100644 index 0000000..57663cb --- /dev/null +++ b/game_server/packet/handlers/ThemeWantedRefreshTicketReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ThemeWantedRefreshTicketReq, ThemeWantedRefreshTicketRsp + +async def handle(session: Session, msg: ThemeWantedRefreshTicketReq) -> betterproto.Message: + return ThemeWantedRefreshTicketRsp(retcode=0) diff --git a/game_server/packet/handlers/TvtCardGetDataReq.py b/game_server/packet/handlers/TvtCardGetDataReq.py new file mode 100644 index 0000000..d94fa20 --- /dev/null +++ b/game_server/packet/handlers/TvtCardGetDataReq.py @@ -0,0 +1,71 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import ( + TvtCardGetDataReq, + TvtCardGetDataRsp, + TvtCard, + TvtCardSuite +) + +async def handle(session: Session, msg: TvtCardGetDataReq) -> betterproto.Message: + return TvtCardGetDataRsp( + retcode=0, + card_list=[ + TvtCard( + card_id=25, + card_level=1 + ), + TvtCard( + card_id=26, + card_level=1 + ), + TvtCard( + card_id=27, + card_level=1 + ), + TvtCard( + card_id=28, + card_level=1 + ), + TvtCard( + card_id=29, + card_level=1 + ), + TvtCard( + card_id=30, + card_level=1 + ), + TvtCard( + card_id=31, + card_level=1 + ), + TvtCard( + card_id=32, + card_level=1 + ), + TvtCard( + card_id=33, + card_level=1 + ), + TvtCard( + card_id=34, + card_level=1 + ), + TvtCard( + card_id=35, + card_level=1 + ), + TvtCard( + card_id=36, + card_level=1 + ) + ], + is_take_season_return=True, + suite_list=[ + TvtCardSuite( + card_id_list=[ + 25,26,27,31 + ] + ) + ] + ) diff --git a/game_server/packet/handlers/UltraEndlessEnterSiteReq.py b/game_server/packet/handlers/UltraEndlessEnterSiteReq.py new file mode 100644 index 0000000..5d270cf --- /dev/null +++ b/game_server/packet/handlers/UltraEndlessEnterSiteReq.py @@ -0,0 +1,13 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import ( + UltraEndlessEnterSiteReq, + UltraEndlessEnterSiteRsp, +) + +async def handle(session: Session, msg: UltraEndlessEnterSiteReq) -> betterproto.Message: + return UltraEndlessEnterSiteRsp( + retcode=0, + site_id=msg.site_id + ) diff --git a/game_server/packet/handlers/UltraEndlessGetMainDataReq.py b/game_server/packet/handlers/UltraEndlessGetMainDataReq.py new file mode 100644 index 0000000..66dca31 --- /dev/null +++ b/game_server/packet/handlers/UltraEndlessGetMainDataReq.py @@ -0,0 +1,172 @@ +import betterproto +import json +from game_server.net.session import Session +from lib.proto import ( + UltraEndlessGetMainDataReq, + UltraEndlessGetMainDataRsp, + UltraEndlessMainData, + UltraEndlessPlayer, + UltraEndlessSettleInfo, + UltraEndlessFloor, + UltraEndlessSite, + PlayerFriendBriefData +) + +async def handle(session: Session, msg: UltraEndlessGetMainDataReq) -> betterproto.Message: + with open("Endless.json", "r") as file: + data = json.load(file) + + site = data.get("area1",781009) + return UltraEndlessGetMainDataRsp( + retcode=0, + dynamic_hard_level=458, + cup_num=1275, + endless_player_list=[ + UltraEndlessPlayer( + cup_num=1275, + group_level=7, + uid=1337 + ) + ], + group_level=7, + last_settle_info=UltraEndlessSettleInfo( + cup_num=1275, + cup_num_after_schedule_settle=1275, + cup_num_after_season_settle=975, + cup_num_before=1275, + cup_num_before_season_settle=975, + group_level=7, + group_member_num=20, + max_stage_score=21792, + mmr_score=1618, + rank=9, + schedule_id=3365 + ), + main_data=UltraEndlessMainData( + begin_time=1730098800, + close_time=1880308800, + cur_season_id=119, + effect_time=1880308800, + end_time=1880308800, + last_schedule_id=3366, + last_settle_top_rank_schedule_id=3366, + schedule_id=3366, + site_list=[ + UltraEndlessSite( + floor_list=[ + UltraEndlessFloor( + floor=1, + max_score=1000 + ), + UltraEndlessFloor( + floor=2, + max_score=1000 + ), + UltraEndlessFloor( + floor=3, + max_score=1000 + ), + UltraEndlessFloor( + floor=4, + max_score=1000 + ), + UltraEndlessFloor( + floor=5, + max_score=2000 + ) + ], + max_score_cost_time=87, + site_id=site + ), + UltraEndlessSite( + floor_list=[ + UltraEndlessFloor( + floor=1, + max_score=1000 + ), + UltraEndlessFloor( + floor=2, + max_score=1000 + ), + UltraEndlessFloor( + floor=3, + max_score=1000 + ), + UltraEndlessFloor( + floor=4, + max_score=1000 + ), + UltraEndlessFloor( + floor=5, + max_score=2000 + ) + ], + max_score_cost_time=119, + site_id=site+1 + ), + UltraEndlessSite( + floor_list=[ + UltraEndlessFloor( + floor=1, + max_score=1000 + ), + UltraEndlessFloor( + floor=2, + max_score=2826 + ) + ], + max_score_cost_time=52, + site_id=site+2 + ), + UltraEndlessSite( + floor_list=[ + UltraEndlessFloor( + floor=1, + max_score=1000 + ), + UltraEndlessFloor( + floor=2, + max_score=1000 + ), + UltraEndlessFloor( + floor=3, + max_score=1000 + ), + UltraEndlessFloor( + floor=4, + max_score=1000 + ), + UltraEndlessFloor( + floor=5, + max_score=2000 + ) + ], + max_score_cost_time=113, + site_id=site+3 + ) + ] + ), + schedule_id=3366, + top_group_level=9, + brief_data_list=[ + PlayerFriendBriefData( + uid=1337, + nickname="Miku", + avatar_id=3101, + avatar_level=80, + avatar_star=3, + comfort_value=217, + custom_head_id=161099, + dress_id=50217, + frame_id=200080, + house_level=1, + is_allow_visit=True, + last_login_time=1730263760, + last_logout_time=1730264009, + level=88, + online_status=3, + show_house=101, + visit_avatar=101 + ) + ] + ) diff --git a/game_server/packet/handlers/UltraEndlessGetTopRankReq.py b/game_server/packet/handlers/UltraEndlessGetTopRankReq.py new file mode 100644 index 0000000..7f30846 --- /dev/null +++ b/game_server/packet/handlers/UltraEndlessGetTopRankReq.py @@ -0,0 +1,29 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import ( + UltraEndlessGetTopRankReq, + UltraEndlessGetTopRankRsp, + RankShowData, + UserRankData +) + +async def handle(session: Session, msg: UltraEndlessGetTopRankReq) -> betterproto.Message: + return UltraEndlessGetTopRankRsp( + retcode=0, + schedule_id=3363, + rank_data=RankShowData( + rank_list=[ + UserRankData( + avatar_id=205, + custom_head_id=161100, + frame_id=200001, + nick_name="Miku", + rank=1, + score=5021766, + uid=1337, + ultra_endless_group_level=9 + ) + ] + ) + ) diff --git a/game_server/packet/handlers/UltraEndlessReportSiteFloorReq.py b/game_server/packet/handlers/UltraEndlessReportSiteFloorReq.py new file mode 100644 index 0000000..230d0ea --- /dev/null +++ b/game_server/packet/handlers/UltraEndlessReportSiteFloorReq.py @@ -0,0 +1,12 @@ +import betterproto +import random +from game_server.net.session import Session +from lib.proto import (UltraEndlessReportSiteFloorReq,UltraEndlessReportSiteFloorRsp,) + +async def handle(session: Session, msg: UltraEndlessReportSiteFloorReq) -> betterproto.Message: + return UltraEndlessReportSiteFloorRsp( + retcode=0, + floor=msg.floor, + site_id=msg.site_id + ) + diff --git a/game_server/packet/handlers/UpdateCustomAvatarTeamReq.py b/game_server/packet/handlers/UpdateCustomAvatarTeamReq.py new file mode 100644 index 0000000..ea04605 --- /dev/null +++ b/game_server/packet/handlers/UpdateCustomAvatarTeamReq.py @@ -0,0 +1,43 @@ +import betterproto +from game_server.net.session import Session +from game_server.game.avatar.avatar_manager import AvatarTeamManager +from game_server.game.enum.data_type import DataType +from database import mongo +from lib.proto import ( + UpdateCustomAvatarTeamReq, + UpdateCustomAvatarTeamRsp, + GetAvatarTeamDataRsp, + CustomAvatarTeam +) + +async def handle(session: Session, msg: UpdateCustomAvatarTeamReq) -> betterproto.Message: + + team = msg.team + + session.player.custom_avatar_team_list[team.team_id] = AvatarTeamManager( + team_id=team.team_id, + name=team.name, + avatar_id_list=team.avatar_id_list, + elf_id_list=team.elf_id_list, + astral_mate_id=team.astra_mate_id, + is_using_astra_mate=team.is_using_astra_mate + ) + + await session.send(session.create_packet(GetAvatarTeamDataRsp( + retcode=0, + custom_avatar_team_list=[ + CustomAvatarTeam( + team_id=team.team_id, + name=team.name, + avatar_id_list=team.avatar_id_list, + elf_id_list=team.elf_id_list, + astra_mate_id=team.astral_mate_id, + is_using_astra_mate=team.is_using_astra_mate + ) + for team_id,team in session.player.custom_avatar_team_list.items() + ] + ))) + + mongo.save(session,DataType.PLAYER) + + return UpdateCustomAvatarTeamRsp(retcode=0) diff --git a/game_server/packet/handlers/UpdateMissionProgressReq.py b/game_server/packet/handlers/UpdateMissionProgressReq.py new file mode 100644 index 0000000..0c96b4b --- /dev/null +++ b/game_server/packet/handlers/UpdateMissionProgressReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import UpdateMissionProgressReq,UpdateMissionProgressRsp + +async def handle(session: Session, msg: UpdateMissionProgressReq) -> betterproto.Message: + return UpdateMissionProgressRsp(retcode=0) diff --git a/game_server/packet/handlers/WaveRushGetActivityReq.py b/game_server/packet/handlers/WaveRushGetActivityReq.py new file mode 100644 index 0000000..a05844a --- /dev/null +++ b/game_server/packet/handlers/WaveRushGetActivityReq.py @@ -0,0 +1,6 @@ +import betterproto +from game_server.net.session import Session +from lib.proto import WaveRushGetActivityReq, WaveRushGetActivityRsp + +async def handle(session: Session, msg: WaveRushGetActivityReq) -> betterproto.Message: + return WaveRushGetActivityRsp(retcode=0) diff --git a/game_server/protocol/cmd_id.py b/game_server/protocol/cmd_id.py new file mode 100644 index 0000000..39efb9b --- /dev/null +++ b/game_server/protocol/cmd_id.py @@ -0,0 +1,3031 @@ +from enum import IntEnum + +class CmdID(IntEnum): + GetScratchTicketReq = 4150 + GetScratchTicketRsp = 4151 + ScratchReq = 4152 + ScratchRsp = 4153 + ResetScratchTicketPlateReq = 4154 + ResetScratchTicketPlateRsp = 4155 + AddOnActivityRewardNotify = 4156 + GetBingoActivityDataReq = 4157 + GetBingoActivityDataRsp = 4158 + BingoActivityFlopCardReq = 4159 + BingoActivityFlopCardRsp = 4160 + BingoActivityResetBingoReq = 4161 + BingoActivityResetBingoRsp = 4162 + GetBulletinScoreActivityReq = 4163 + GetBulletinScoreActivityRsp = 4164 + TakeBulletinScoreActivityRewardReq = 4165 + TakeBulletinScoreActivityRewardRsp = 4166 + GetContinuousRechargeActivityReq = 4167 + GetContinuousRechargeActivityRsp = 4168 + TakeContinuousRechargeRewardReq = 4169 + TakeContinuousRechargeRewardRsp = 4170 + GetFlopActivityDataReq = 4173 + GetFlopActivityDataRsp = 4174 + TakeFlopRewardReq = 4171 + TakeFlopRewardRsp = 4172 + FlopActivityFlopCardReq = 4175 + FlopActivityFlopCardRsp = 4176 + GetLotteryActivityReq = 4177 + GetLotteryActivityRsp = 4178 + LotteryUseBoxReq = 4179 + LotteryUseBoxRsp = 4180 + LotteryDrawNumberReq = 4181 + LotteryDrawNumberRsp = 4182 + LotteryTakeRewardReq = 4183 + LotteryTakeRewardRsp = 4184 + GetTowerRaidActivityReq = 4185 + GetTowerRaidActivityRsp = 4186 + TakeTowerRaidRewardReq = 4187 + TakeTowerRaidRewardRsp = 4188 + UpdateTowerRaidBossReq = 4189 + UpdateTowerRaidBossRsp = 4190 + TowerRaidLockAvatarNotify = 4191 + GetLoginActivityReq = 4192 + GetLoginActivityRsp = 4193 + TakeLoginActivityRewardReq = 4194 + TakeLoginActivityRewardRsp = 4195 + GetChapterActivityDataReq = 4200 + GetChapterActivityDataRsp = 4201 + TakeChapterActivityLevelRewardReq = 4202 + TakeChapterActivityLevelRewardRsp = 4203 + SyncChapterActivityDataNotify = 4204 + ResetChapterActivityExclusiveStageReq = 4386 + ResetChapterActivityExclusiveStageRsp = 4387 + ResetChapterActivityTalentReq = 4388 + ResetChapterActivityTalentRsp = 4389 + ReportChapterActivityStageReq = 4390 + ReportChapterActivityStageRsp = 4391 + GetMissionThemeDataReq = 4205 + GetMissionThemeDataRsp = 4206 + UpgradeMissionThemeReq = 4207 + UpgradeMissionThemeRsp = 4208 + TakeMissionThemeRewardReq = 4209 + TakeMissionThemeRewardRsp = 4210 + GetOfflineResourceDataReq = 4211 + GetOfflineResourceDataRsp = 4212 + TakeOfflineResourceBoxReq = 4213 + TakeOfflineResourceBoxRsp = 4214 + GetOverlapActivityDataReq = 4215 + GetOverlapActivityDataRsp = 4216 + TakeOverlapActivityRewardReq = 4217 + TakeOverlapActivityRewardRsp = 4218 + OverlapActivitySummonReq = 4219 + OverlapActivitySummonRsp = 4220 + OverlapActivityMoveReq = 4221 + OverlapActivityMoveRsp = 4222 + GetWeeklyRoutineActivityReq = 4229 + GetWeeklyRoutineActivityRsp = 4230 + TakeWeeklyRoutineRewardReq = 4231 + TakeWeeklyRoutineRewardRsp = 4232 + GetRankScheduleDataReq = 4233 + GetRankScheduleDataRsp = 4234 + GetRankScheduleRankReq = 4235 + GetRankScheduleRankRsp = 4236 + GetSurveyDataReq = 4241 + GetSurveyDataRsp = 4242 + FinishSurveyNotify = 4243 + GetThemeDataReq = 4244 + GetThemeDataRsp = 4245 + SyncThemeDataNotify = 4246 + GrantOuterRewardNotify = 4247 + GetNewbieActivityReq = 4248 + GetNewbieActivityRsp = 4249 + GetBbqActivityDataReq = 4250 + GetBbqActivityDataRsp = 4251 + BbqActivityCookReq = 4252 + BbqActivityCookRsp = 4253 + BbqActivityTakeLevelUpRewardReq = 4254 + BbqActivityTakeLevelUpRewardRsp = 4255 + GetTradingCardActivityReq = 4262 + GetTradingCardActivityRsp = 4263 + TakeTradingCardRewardReq = 4264 + TakeTradingCardRewardRsp = 4265 + GetPictureActivityReq = 4266 + GetPictureActivityRsp = 4267 + PictureActivityChooseReq = 4268 + PictureActivityChooseRsp = 4269 + PictureActivityShareReq = 4270 + PictureActivityShareRsp = 4271 + SyncPictureActivityScoreNotify = 4272 + GetJigsawActivityReq = 4273 + GetJigsawActivityRsp = 4274 + JigsawExchangePieceReq = 4275 + JigsawExchangePieceRsp = 4276 + JigsawMoveWaitingPieceReq = 4277 + JigsawMoveWaitingPieceRsp = 4278 + JigsawMovePieceInJigsawAreaReq = 4279 + JigsawMovePieceInJigsawAreaRsp = 4280 + JigsawTakeGroupRewardReq = 4281 + JigsawTakeGroupRewardRsp = 4282 + JigsawTakeFinishRewardReq = 4283 + JigsawTakeFinishRewardRsp = 4284 + GetGardenActivityReq = 4287 + GetGardenActivityRsp = 4288 + GardenHarvestReq = 4289 + GardenHarvestRsp = 4290 + GardenSpeedUpWithMaterialReq = 4291 + GardenSpeedUpWithMaterialRsp = 4292 + GardenRefreshSiteReq = 4293 + GardenRefreshSiteRsp = 4294 + GetGardenScheduleReq = 4295 + GetGardenScheduleRsp = 4296 + GetDropLimitActivityReq = 4297 + GetDropLimitActivityRsp = 4298 + GetLoginMissionActivityReq = 4299 + GetLoginMissionActivityRsp = 4300 + TakeLoginMissionRewardReq = 4301 + TakeLoginMissionRewardRsp = 4302 + SanctuaryGetMainInfoReq = 4305 + SanctuaryGetMainInfoRsp = 4306 + SanctuaryTakeLevelRewardReq = 4307 + SanctuaryTakeLevelRewardRsp = 4308 + SanctuaryTakeProductReq = 4309 + SanctuaryTakeProductRsp = 4310 + SanctuaryStartNotify = 4311 + GetActivityRewardStatisticDataReq = 4312 + GetActivityRewardStatisticDataRsp = 4313 + SanctuaryStageEndNotify = 4314 + GetSlotMachineMainInfoReq = 4315 + GetSlotMachineMainInfoRsp = 4316 + StartSlotMachineReq = 4317 + StartSlotMachineRsp = 4318 + TakeSlotMachineProgressRewardReq = 4319 + TakeSlotMachineProgressRewardRsp = 4320 + GetBulletinActivityMissionReq = 4321 + GetBulletinActivityMissionRsp = 4322 + GetExaminationActivityReq = 4323 + GetExaminationActivityRsp = 4324 + FinishExaminationReq = 4325 + FinishExaminationRsp = 4326 + StartNextRoundExaminationReq = 4327 + StartNextRoundExaminationRsp = 4328 + EvaluateExaminationReq = 4329 + EvaluateExaminationRsp = 4330 + ChapterActivityDailyRewardNotify = 4331 + GetSupportActivityReq = 4332 + GetSupportActivityRsp = 4333 + SupportActivitySupportReq = 4334 + SupportActivitySupportRsp = 4335 + SupportActivityTakeShareRewardReq = 4336 + SupportActivityTakeShareRewardRsp = 4337 + SupportActivityTakeGlobalRewardReq = 4338 + SupportActivityTakeGlobalRewardRsp = 4339 + GetMosaicActivityReq = 4340 + GetMosaicActivityRsp = 4341 + TakeMosaicActivityRewardReq = 4342 + TakeMosaicActivityRewardRsp = 4343 + GetMissionGroupMainInfoReq = 4346 + GetMissionGroupMainInfoRsp = 4347 + TakeMissionGroupRewardReq = 4348 + TakeMissionGroupRewardRsp = 4349 + ChapterActivityTakeDailyRewardReq = 4350 + ChapterActivityTakeDailyRewardRsp = 4351 + ReunionCookGetActivityReq = 4380 + ReunionCookGetActivityRsp = 4381 + ReunionCookMakeDinnerReq = 4382 + ReunionCookMakeDinnerRsp = 4383 + ReunionCookTakeScoreRewardReq = 4384 + ReunionCookTakeScoreRewardRsp = 4385 + DreamGetActivityReq = 5750 + DreamGetActivityRsp = 5751 + DreamOpenDreamReq = 5752 + DreamOpenDreamRsp = 5753 + DreamGiveUpDreamReq = 5754 + DreamGiveUpDreamRsp = 5755 + DreamExchangeScoreReq = 5756 + DreamExchangeScoreRsp = 5757 + DreamTakeRewardReq = 5758 + DreamTakeRewardRsp = 5759 + GetThemeWantedReq = 5790 + GetThemeWantedRsp = 5791 + ThemeWantedRefreshTicketReq = 5794 + ThemeWantedRefreshTicketRsp = 5795 + GlobalPollingGetDataReq = 5811 + GlobalPollingGetDataRsp = 5812 + GlobalPollingSupportReq = 5813 + GlobalPollingSupportRsp = 5814 + GlobalPollingVoteReq = 5815 + GlobalPollingVoteRsp = 5816 + GetCollaborationScheduleReq = 5831 + GetCollaborationScheduleRsp = 5832 + RanchGetActivityReq = 5833 + RanchGetActivityRsp = 5834 + RanchSynthesisMonsterReq = 5835 + RanchSynthesisMonsterRsp = 5836 + RanchFreeMonsterReq = 5837 + RanchFreeMonsterRsp = 5838 + RanchAssignMonsterReq = 5839 + RanchAssignMonsterRsp = 5840 + RanchFireMonsterReq = 5841 + RanchFireMonsterRsp = 5842 + RanchTakeProductReq = 5843 + RanchTakeProductRsp = 5844 + RanchGetMonsterWikiReq = 5845 + RanchGetMonsterWikiRsp = 5846 + RanchSyncMonsterNotify = 5847 + RanchDelMonsterNotify = 5848 + RanchLockMonsterSkillReq = 5849 + RanchLockMonsterSkillRsp = 5850 + RanchSetBattleMonsterReq = 5851 + RanchSetBattleMonsterRsp = 5852 + GetRestaurantActivityReq = 5860 + GetRestaurantActivityRsp = 5861 + LevelUpRestaurantFacilityReq = 5862 + LevelUpRestaurantFacilityRsp = 5863 + AssignRestaurantWorkReq = 5864 + AssignRestaurantWorkRsp = 5865 + CancelRestaurantWorkReq = 5866 + CancelRestaurantWorkRsp = 5867 + TakeRestaurantOrderReq = 5868 + TakeRestaurantOrderRsp = 5869 + DeliverRestaurantQuestReq = 5870 + DeliverRestaurantQuestRsp = 5871 + AccelerateRestaurantWorkReq = 5872 + AccelerateRestaurantWorkRsp = 5873 + NewbieLevelRushPurchaseReq = 5881 + NewbieLevelRushPurchaseRsp = 5882 + NewbieLevelRushTakeRewardReq = 5883 + NewbieLevelRushTakeRewardRsp = 5884 + GetRewardLineActivityReq = 5890 + GetRewardLineActivityRsp = 5891 + TakeRewardLineActivityRewardReq = 5892 + TakeRewardLineActivityRewardRsp = 5893 + MonsterCardGetActivityReq = 5920 + MonsterCardGetActivityRsp = 5921 + MonsterCardLevelUpReq = 5922 + MonsterCardLevelUpRsp = 5923 + MonsterCardStarUpReq = 5924 + MonsterCardStarUpRsp = 5925 + MonsterCardLearnRandomTalentReq = 5926 + MonsterCardLearnRandomTalentRsp = 5927 + MonsterCardConfirmRandomTalentReq = 5933 + MonsterCardConfirmRandomTalentRsp = 5934 + MonsterCardSyncCardNotify = 5928 + MonsterCardGetTowerRankReq = 5929 + MonsterCardGetTowerRankRsp = 5930 + MonsterCardGetBossRankReq = 5931 + MonsterCardGetBossRankRsp = 5932 + MonsterCardFragmentOverflowNotify = 5935 + BuffAssistGetActivityReq = 5941 + BuffAssistGetActivityRsp = 5942 + BuffAssistRefreshWaitSelectBuffPoolReq = 5943 + BuffAssistRefreshWaitSelectBuffPoolRsp = 5944 + BuffAssistSelectBuffReq = 5945 + BuffAssistSelectBuffRsp = 5946 + BuffAssistPublishBuffPoolReq = 5947 + BuffAssistPublishBuffPoolRsp = 5948 + BuffAssistStageEndNotify = 5949 + BuffAssistRecvStageAssistInfoNotify = 5950 + WaveRushGetActivityReq = 5961 + WaveRushGetActivityRsp = 5962 + WaveRushGetRankReq = 5963 + WaveRushGetRankRsp = 5964 + WaveRushLevelUpBuffReq = 5965 + WaveRushLevelUpBuffRsp = 5966 + WaveRushUpdateBuffSuiteReq = 5967 + WaveRushUpdateBuffSuiteRsp = 5968 + WaveRushActiveBuffSuiteReq = 5969 + WaveRushActiveBuffSuiteRsp = 5970 + MiniMonopolyGetDataReq = 5981 + MiniMonopolyGetDataRsp = 5982 + MiniMonopolyThrowDiceReq = 5983 + MiniMonopolyThrowDiceRsp = 5984 + MiniMonopolyUseItemReq = 5985 + MiniMonopolyUseItemRsp = 5986 + AvatarCultivateGetActivityReq = 5991 + AvatarCultivateGetActivityRsp = 5992 + ThemeTowerGetActivityReq = 7070 + ThemeTowerGetActivityRsp = 7071 + ThemeTowerGetRankReq = 7072 + ThemeTowerGetRankRsp = 7073 + ThemeTowerLevelUpSectionReq = 7074 + ThemeTowerLevelUpSectionRsp = 7075 + ShigureKiraAddConcertProgressReq = 7062 + ShigureKiraAddConcertProgressRsp = 7063 + ShigureKiraGetActivityReq = 7060 + ShigureKiraGetActivityRsp = 7061 + SusannaTrialGetActivityReq = 7050 + SusannaTrialGetActivityRsp = 7051 + SusannaTrialTakeMentorProgressRewardReq = 7052 + SusannaTrialTakeMentorProgressRewardRsp = 7053 + SusannaTrialTakePlotRewardReq = 7054 + SusannaTrialTakePlotRewardRsp = 7055 + GetPonMachineActivityReq = 7100 + GetPonMachineActivityRsp = 7101 + StartPonMachineReq = 7102 + StartPonMachineRsp = 7103 + CarnivalLotteryBetReq = 7111 + CarnivalLotteryBetRsp = 7112 + CarnivalLotteryGetInfoReq = 7113 + CarnivalLotteryGetInfoRsp = 7114 + CarnivalLotteryTakeSpecialRewardReq = 7115 + CarnivalLotteryTakeSpecialRewardRsp = 7116 + CarnivalLotteryOpenRewardReq = 7117 + CarnivalLotteryOpenRewardRsp = 7118 + TiledGameLunaTrapReq = 7121 + TiledGameLunaTrapRsp = 7122 + GetTiledGameLunaReq = 7123 + GetTiledGameLunaRsp = 7124 + TiledGameLunaBattleReq = 7125 + TiledGameLunaBattleRsp = 7126 + TiledGameLunaHealReq = 7129 + TiledGameLunaHealRsp = 7130 + MinionClashGetActivityReq = 7141 + MinionClashGetActivityRsp = 7142 + MinionClashGetGachaInfoReq = 7143 + MinionClashGetGachaInfoRsp = 7144 + MinionClashDoGachaReq = 7145 + MinionClashDoGachaRsp = 7146 + MinionClashLevelUpTalentReq = 7147 + MinionClashLevelUpTalentRsp = 7148 + MinionClashReportStageBeginReq = 7149 + MinionClashReportStageBeginRsp = 7150 + MinionClashUpdateBuildReq = 7151 + MinionClashUpdateBuildRsp = 7152 + MinionClashStarUpCardReq = 7153 + MinionClashStarUpCardRsp = 7154 + ThelemaActivityGetActivityReq = 7161 + ThelemaActivityGetActivityRsp = 7162 + ThelemaActivityFinishQuestionReq = 7163 + ThelemaActivityFinishQuestionRsp = 7164 + MatchThreePlusGetActivityReq = 7171 + MatchThreePlusGetActivityRsp = 7172 + MatchThreePlusRoleLevelUpReq = 7173 + MatchThreePlusRoleLevelUpRsp = 7174 + MatchThreePlusGachaDisplayReq = 7175 + MatchThreePlusGachaDisplayRsp = 7176 + MatchThreePlusGachaReq = 7177 + MatchThreePlusGachaRsp = 7178 + MatchThreePlusRoomBeginReq = 7179 + MatchThreePlusRoomBeginRsp = 7180 + MatchThreePlusRoomEndReq = 7181 + MatchThreePlusRoomEndRsp = 7182 + MatchThreePlusGetRankReq = 7183 + MatchThreePlusGetRankRsp = 7184 + MatchThreePlusUpdateCombinationReq = 7185 + MatchThreePlusUpdateCombinationRsp = 7186 + MatchThreePlusSyncAutoUnlockNotify = 7187 + TiledGameSrpgGetActivityReq = 7191 + TiledGameSrpgGetActivityRsp = 7192 + TiledGameSrpgAvatarLevelUpReq = 7193 + TiledGameSrpgAvatarLevelUpRsp = 7194 + TiledGameSrpgBattleBeginReq = 7195 + TiledGameSrpgBattleBeginRsp = 7196 + TiledGameSrpgBattleEndReq = 7197 + TiledGameSrpgBattleEndRsp = 7198 + TiledGameSrpgTakeBpRewardReq = 7199 + TiledGameSrpgTakeBpRewardRsp = 7200 + GameRoomActivityGetActivityReq = 7211 + GameRoomActivityGetActivityRsp = 7212 + GameRoomActivityGetRankReq = 7213 + GameRoomActivityGetRankRsp = 7214 + QRtsActivityGetActivityReq = 7221 + QRtsActivityGetActivityRsp = 7222 + QRtsActivityFinishRoundReq = 7223 + QRtsActivityFinishRoundRsp = 7224 + QRtsActivityResetRoundReq = 7225 + QRtsActivityResetRoundRsp = 7226 + QRtsActivityBuildReq = 7227 + QRtsActivityBuildRsp = 7228 + QRtsActivitySelectTalentReq = 7229 + QRtsActivitySelectTalentRsp = 7230 + QRtsActivitySyncGameNotify = 7231 + QRtsActivitySweepReq = 7232 + QRtsActivitySweepRsp = 7233 + QRtsActivityUpgradeBuffReq = 7234 + QRtsActivityUpgradeBuffRsp = 7235 + QRtsActivityClearGameReq = 7236 + QRtsActivityClearGameRsp = 7237 + QRtsActivityWishReq = 7238 + QRtsActivityWishRsp = 7239 + GetBurdenAlleviationV2Req = 7241 + GetBurdenAlleviationV2Rsp = 7242 + TriggerBurdenAlleviationV2Req = 7243 + TriggerBurdenAlleviationV2Rsp = 7244 + FutariBattleActivityGetActivityReq = 7245 + FutariBattleActivityGetActivityRsp = 7246 + FutariBattleActivityGetRankReq = 7247 + FutariBattleActivityGetRankRsp = 7248 + FutariBattleActivityPassStageFloorReq = 7249 + FutariBattleActivityPassStageFloorRsp = 7250 + ReActivityGetDataReq = 7251 + ReActivityGetDataRsp = 7252 + ReActivityTileBeginReq = 7253 + ReActivityTileBeginRsp = 7254 + ReActivityTileEndReq = 7255 + ReActivityTileEndRsp = 7256 + ResidentActivityGetDataReq = 7260 + ResidentActivityGetDataRsp = 7261 + ResidentActivityUnlockActivityReq = 7262 + ResidentActivityUnlockActivityRsp = 7263 + QRtsActivityGetRankReq = 7270 + QRtsActivityGetRankRsp = 7271 + MonsterCardPvpGetActivityReq = 7275 + MonsterCardPvpGetActivityRsp = 7276 + MonsterCardPvpSelectInitCardVecReq = 7277 + MonsterCardPvpSelectInitCardVecRsp = 7278 + MonsterCardPvpStarUpCardReq = 7279 + MonsterCardPvpStarUpCardRsp = 7280 + MonsterCardPvpOpenSkillPackReq = 7281 + MonsterCardPvpOpenSkillPackRsp = 7282 + MonsterCardPvpSelectNewSkillReq = 7283 + MonsterCardPvpSelectNewSkillRsp = 7284 + MonsterCardPvpGetPvpOpponentReq = 7285 + MonsterCardPvpGetPvpOpponentRsp = 7286 + MonsterCardPvpFinishCombatReq = 7287 + MonsterCardPvpFinishCombatRsp = 7288 + MonsterCardPvpUpdatePlayerInfoReq = 7289 + MonsterCardPvpUpdatePlayerInfoRsp = 7290 + MonsterCardPvpGetDefendDataReq = 7291 + MonsterCardPvpGetDefendDataRsp = 7292 + MonsterCardPvpGetPvpRankReq = 7293 + MonsterCardPvpGetPvpRankRsp = 7294 + MonsterCardPvpTakeProductRewardReq = 7295 + MonsterCardPvpTakeProductRewardRsp = 7296 + MonsterCardPvpGetGachaDisplayReq = 7297 + MonsterCardPvpGetGachaDisplayRsp = 7298 + MonsterCardPvpGachaReq = 7299 + MonsterCardPvpGachaRsp = 7300 + GetAdventureGroupReq = 3900 + GetAdventureGroupRsp = 3901 + SelectAdventureQuestReq = 3902 + SelectAdventureQuestRsp = 3903 + TakeAdventureQuestRewardReq = 3904 + TakeAdventureQuestRewardRsp = 3905 + ClaimScoinReq = 3910 + ClaimScoinRsp = 3911 + AdventureStorySweepReq = 3912 + AdventureStorySweepRsp = 3913 + GetAdventureStorySweepInfoReq = 3914 + GetAdventureStorySweepInfoRsp = 3915 + TakeAdventureStorySweepRewardReq = 3916 + TakeAdventureStorySweepRewardRsp = 3917 + TakeAdventureCompensationReq = 3918 + TakeAdventureCompensationRsp = 3919 + EditAdventureRoomReq = 3920 + EditAdventureRoomRsp = 3921 + CancelAdventureQuestReq = 3922 + CancelAdventureQuestRsp = 3923 + ResetAdventureQuestReq = 3924 + ResetAdventureQuestRsp = 3925 + AiCyberGetActivityReq = 6650 + AiCyberGetActivityRsp = 6651 + AiCyberTakePuzzleRewardReq = 6652 + AiCyberTakePuzzleRewardRsp = 6653 + AiCyberAddRepairProgressReq = 6654 + AiCyberAddRepairProgressRsp = 6655 + AiCyberSetBlessReq = 6656 + AiCyberSetBlessRsp = 6657 + AiCyberRefreshTicketReq = 6658 + AiCyberRefreshTicketRsp = 6659 + AiCyberUpdateClientSettingReq = 6660 + AiCyberUpdateClientSettingRsp = 6661 + GetArmadaDataReq = 2601 + GetArmadaDataRsp = 2602 + CreateArmadaReq = 2603 + CreateArmadaRsp = 2604 + SearchArmadaReq = 2605 + SearchArmadaRsp = 2606 + ApplyJoinArmadaReq = 2607 + ApplyJoinArmadaRsp = 2608 + DealArmadaApplyReq = 2609 + DealArmadaApplyRsp = 2610 + GetArmadaManageDataReq = 2611 + GetArmadaManageDataRsp = 2612 + SetArmadaApplyReq = 2613 + SetArmadaApplyRsp = 2614 + SetArmadaBulletinReq = 2615 + SetArmadaBulletinRsp = 2616 + GetRecommendArmadaReq = 2617 + GetRecommendArmadaRsp = 2618 + TransferArmadaLeaderReq = 2619 + TransferArmadaLeaderRsp = 2620 + SetArmadaPositionReq = 2621 + SetArmadaPositionRsp = 2622 + KickArmadaMemberReq = 2623 + KickArmadaMemberRsp = 2624 + DissolveArmadaReq = 2625 + DissolveArmadaRsp = 2626 + QuitArmadaReq = 2627 + QuitArmadaRsp = 2628 + CancelApplyArmadaReq = 2629 + CancelApplyArmadaRsp = 2630 + LevelUpArmadaCabinReq = 2631 + LevelUpArmadaCabinRsp = 2632 + CancelLevelUpArmadaCabinReq = 2633 + CancelLevelUpArmadaCabinRsp = 2634 + MoveArmadaCabinReq = 2635 + MoveArmadaCabinRsp = 2636 + GetConsignedOrderDataReq = 2639 + GetConsignedOrderDataRsp = 2640 + ChooseConsignedOrderReq = 2641 + ChooseConsignedOrderRsp = 2642 + FinishConsignedOrderReq = 2643 + FinishConsignedOrderRsp = 2644 + ResetConsignedOrderReq = 2645 + ResetConsignedOrderRsp = 2646 + GetWareHouseDataReq = 2647 + GetWareHouseDataRsp = 2648 + PostWareHouseDemandReq = 2649 + PostWareHouseDemandRsp = 2650 + CancelWareHouseDemandReq = 2651 + CancelWareHouseDemandRsp = 2652 + DonateWareHouseItemReq = 2653 + DonateWareHouseItemRsp = 2654 + GetWareHouseItemReq = 2655 + GetWareHouseItemRsp = 2656 + EnterArmadaChatroomReq = 2657 + EnterArmadaChatroomRsp = 2658 + SendArmadaSystemChatMsgNotify = 2661 + RecvArmadaSystemChatMsgNotify = 2662 + DonateWareHouseNotify = 2677 + ArmadaBuildNotify = 2678 + ArmadaBulletinNotify = 2679 + ArmadaManageNotify = 2680 + ArmadaPlayerNotify = 2681 + ArmadaApplyNotify = 2682 + CancelDissolveArmadaReq = 2683 + CancelDissolveArmadaRsp = 2684 + GetArmadaBuildOwnershipReq = 2685 + GetArmadaBuildOwnershipRsp = 2686 + ReleaseArmadaBuildOwnershipReq = 2687 + ReleaseArmadaBuildOwnershipRsp = 2688 + ArmadaSendMailReq = 2689 + ArmadaSendMailRsp = 2690 + ChangeArmadaNameReq = 2691 + ChangeArmadaNameRsp = 2692 + JoinArmadaElectionReq = 2693 + JoinArmadaElectionRsp = 2694 + ArmadaLogoutNotify = 2731 + QuickApplyJoinArmadaReq = 2732 + QuickApplyJoinArmadaRsp = 2733 + OpenArmadaStageReq = 2799 + OpenArmadaStageRsp = 2800 + TakeArmadaAchievementReq = 2801 + TakeArmadaAchievementRsp = 2802 + GetRecommendArmadaMemberListReq = 2803 + GetRecommendArmadaMemberListRsp = 2804 + JoinQuitArmadaNotify = 2805 + ArmadaPlayerContributionSyncNotify = 2806 + GetArmadaStageScoreActivityReq = 2821 + GetArmadaStageScoreActivityRsp = 2822 + TakeArmadaStageScoreActivityRewardReq = 2823 + TakeArmadaStageScoreActivityRewardRsp = 2824 + GetArmadaActivityListReq = 2825 + GetArmadaActivityListRsp = 2826 + GetArmadaReunionActivityReq = 2834 + GetArmadaReunionActivityRsp = 2835 + ArmadaReunionRewardNotify = 2836 + TakeArmadaReunionRewardReq = 2837 + TakeArmadaReunionRewardRsp = 2838 + SetArmadaLabelReq = 2840 + SetArmadaLabelRsp = 2841 + GetArmadaStageScoreRankReq = 2842 + GetArmadaStageScoreRankRsp = 2843 + GetAvatarMissionActivityReq = 3000 + GetAvatarMissionActivityRsp = 3001 + ChooseAvatarMissionAvatarReq = 3002 + ChooseAvatarMissionAvatarRsp = 3003 + TakeAvatarMissionDailyRewardReq = 3004 + TakeAvatarMissionDailyRewardRsp = 3005 + TakeAvatarMissionPhaseRewardReq = 3006 + TakeAvatarMissionPhaseRewardRsp = 3007 + ResetAvatarMissionAvatarReq = 3008 + ResetAvatarMissionAvatarRsp = 3009 + GetBattlePassReq = 3750 + GetBattlePassRsp = 3751 + BuyBattlePassTicketReq = 3752 + BuyBattlePassTicketRsp = 3753 + TakeBattlePassLevelRewardReq = 3754 + TakeBattlePassLevelRewardRsp = 3755 + BuyBattlePassLevelReq = 3756 + BuyBattlePassLevelRsp = 3757 + TakeBattlePassPhaseExpReq = 3758 + TakeBattlePassPhaseExpRsp = 3759 + GetBattlePassThemeReq = 3760 + GetBattlePassThemeRsp = 3761 + TakeBattlePassThemeLevelRewardReq = 3762 + TakeBattlePassThemeLevelRewardRsp = 3763 + BuyBattlePassThemeLevelReq = 3764 + BuyBattlePassThemeLevelRsp = 3765 + BattlePassThemeExpTransformNotify = 3766 + GetBattlePassMissionPanelReq = 3767 + GetBattlePassMissionPanelRsp = 3768 + ChapterArkGetDataReq = 7950 + ChapterArkGetDataRsp = 7951 + ChapterArkRoleLevelUpReq = 7952 + ChapterArkRoleLevelUpRsp = 7953 + ChapterArkSkillUnlockReq = 7954 + ChapterArkSkillUnlockRsp = 7955 + ChapterArkSkillLevelUpReq = 7956 + ChapterArkSkillLevelUpRsp = 7957 + ChapterArkTakeRewardLineRewardReq = 7958 + ChapterArkTakeRewardLineRewardRsp = 7959 + ChapterArkGetRankReq = 7960 + ChapterArkGetRankRsp = 7961 + ChapterArkFinishOpeningReq = 7962 + ChapterArkFinishOpeningRsp = 7963 + ChapterArkSyncAutoUnlockNotify = 7964 + ChapterArkSupSkillLevelUpReq = 7965 + ChapterArkSupSkillLevelUpRsp = 7966 + ChapterArkSettleTowerReq = 7967 + ChapterArkSettleTowerRsp = 7968 + ChapterArkReportTowerFloorReq = 7969 + ChapterArkReportTowerFloorRsp = 7970 + ArkPlusActivityGetDataReq = 7971 + ArkPlusActivityGetDataRsp = 7972 + ArkPlusActivityFinishRoomReq = 7973 + ArkPlusActivityFinishRoomRsp = 7974 + ArkPlusActivityResetChallengeReq = 7975 + ArkPlusActivityResetChallengeRsp = 7976 + ArkPlusActivityGetRankReq = 7977 + ArkPlusActivityGetRankRsp = 7978 + ArkPlusActivityAddLiftMaterialReq = 7979 + ArkPlusActivityAddLiftMaterialRsp = 7980 + ChapterBwWorldGetDataReq = 7650 + ChapterBwWorldGetDataRsp = 7651 + ChapterBwWorldUpdateEquipRuneReq = 7652 + ChapterBwWorldUpdateEquipRuneRsp = 7653 + ChapterBwWorldRuneLevelUpReq = 7654 + ChapterBwWorldRuneLevelUpRsp = 7655 + ChapterBwWorldRuneSynthesisReq = 7656 + ChapterBwWorldRuneSynthesisRsp = 7657 + ChapterBwWorldGetRankReq = 7658 + ChapterBwWorldGetRankRsp = 7659 + ChapterBwWorldTakeRewardLineRewardReq = 7660 + ChapterBwWorldTakeRewardLineRewardRsp = 7661 + ChapterBwWorldSyncRuneNotify = 7662 + ChapterBwWorldTowerStageReportFloorReq = 7663 + ChapterBwWorldTowerStageReportFloorRsp = 7664 + ChapterBwWorldRefreshTicketReq = 7665 + ChapterBwWorldRefreshTicketRsp = 7666 + BwWorldCampActivityGetDataReq = 7671 + BwWorldCampActivityGetDataRsp = 7672 + BwWorldCampActivitySelectCampReq = 7673 + BwWorldCampActivitySelectCampRsp = 7674 + BwWorldCampActivityPublishRuneReq = 7675 + BwWorldCampActivityPublishRuneRsp = 7676 + BwWorldCampActivityRefreshWaitSelectRuneReq = 7677 + BwWorldCampActivityRefreshWaitSelectRuneRsp = 7678 + BwWorldCampActivityTakeAssistContributionReq = 7679 + BwWorldCampActivityTakeAssistContributionRsp = 7680 + BwWorldCampActivityAddAssistContributionNotify = 7681 + BwWorldCampActivityGetRankReq = 7682 + BwWorldCampActivityGetRankRsp = 7683 + BwWorldCampActivitySelectStageRuneReq = 7684 + BwWorldCampActivitySelectStageRuneRsp = 7685 + ChapterKnightRichManGetDataReq = 8350 + ChapterKnightRichManGetDataRsp = 8351 + ChapterKnightRichManGetRankReq = 8352 + ChapterKnightRichManGetRankRsp = 8353 + ChapterKnightRichManGetMapReq = 8354 + ChapterKnightRichManGetMapRsp = 8355 + ChapterKnightRichManBeginMapReq = 8356 + ChapterKnightRichManBeginMapRsp = 8357 + ChapterKnightRichManEndMapReq = 8358 + ChapterKnightRichManEndMapRsp = 8359 + ChapterKnightRichManThrowDiceReq = 8360 + ChapterKnightRichManThrowDiceRsp = 8361 + ChapterKnightRichManFinishGameReq = 8362 + ChapterKnightRichManFinishGameRsp = 8363 + ChapterKnightRichManRefreshShopReq = 8364 + ChapterKnightRichManRefreshShopRsp = 8365 + ChapterKnightRichManBuyShopGoodsReq = 8366 + ChapterKnightRichManBuyShopGoodsRsp = 8367 + ChapterKnightRichManFinishSiteReq = 8368 + ChapterKnightRichManFinishSiteRsp = 8369 + ChapterKnightRichManUseCardReq = 8370 + ChapterKnightRichManUseCardRsp = 8371 + ChapterKnightRichManLevelUpBuffReq = 8372 + ChapterKnightRichManLevelUpBuffRsp = 8373 + ChapterKnightRichManSelectItemReq = 8374 + ChapterKnightRichManSelectItemRsp = 8375 + ChapterKnightRichManTriggerEventReq = 8376 + ChapterKnightRichManTriggerEventRsp = 8377 + ChapterKnightRichManGetItemNotify = 8378 + ChapterKnightRichManRefreshWaitSelectItemReq = 8379 + ChapterKnightRichManRefreshWaitSelectItemRsp = 8380 + ChapterKnightRichManGetShopReq = 8381 + ChapterKnightRichManGetShopRsp = 8382 + ChapterKnightRichManSelectInitBuffReq = 8383 + ChapterKnightRichManSelectInitBuffRsp = 8384 + CreateChatgroupReq = 2200 + CreateChatgroupRsp = 2201 + InviteChatgroupReq = 2202 + InviteChatgroupRsp = 2203 + GetChatgroupListReq = 2204 + GetChatgroupListRsp = 2205 + SetChatgroupReq = 2206 + SetChatgroupRsp = 2207 + LeaveChatgroupReq = 2208 + LeaveChatgroupRsp = 2209 + ChatgroupSystemNotify = 2211 + KickChatgroupMemberReq = 2212 + KickChatgroupMemberRsp = 2213 + DealChatgroupInviteReq = 2214 + DealChatgroupInviteRsp = 2215 + InviteToMultiChatgroupReq = 2216 + InviteToMultiChatgroupRsp = 2217 + GetChatgroupHistoryChatMsgReq = 2218 + GetChatgroupHistoryChatMsgRsp = 2219 + EnterWorldChatroomReq = 2231 + EnterWorldChatroomRsp = 2232 + LeaveChatroomNotify = 2233 + SendChatMsgNotify = 2234 + RecvChatMsgNotify = 2235 + RecvOfflinePrivateChatMsgNotify = 2236 + GetPrivateHistoryChatMsgReq = 2237 + GetPrivateHistoryChatMsgRsp = 2238 + ChatCloseNotify = 2239 + EnterCommonChatworldReq = 2400 + EnterCommonChatworldRsp = 2401 + LeaveCommonChatworldReq = 2402 + LeaveCommonChatworldRsp = 2403 + SendCommonChatworldMsgNotify = 2404 + RecvCommonChatworldMsgNotify = 2405 + ChatworldUseItemReq = 2407 + ChatworldUseItemRsp = 2408 + ChatworldChangeAvatarReq = 2409 + ChatworldChangeAvatarRsp = 2410 + GetChatworldListReq = 2411 + GetChatworldListRsp = 2412 + ChatworldInteractReq = 2413 + ChatworldInteractRsp = 2414 + GetChatworldTreasureDataReq = 2415 + GetChatworldTreasureDataRsp = 2416 + OpenChatworldTreasureReq = 2417 + OpenChatworldTreasureRsp = 2418 + ChatworldTreasureRewardNotify = 2419 + ChatworldSkillDamageJudgeReq = 2420 + ChatworldSkillDamageJudgeRsp = 2421 + ChatworldBattleUseItemReq = 2422 + ChatworldBattleUseItemRsp = 2423 + ChatworldPosResetNotify = 2424 + ChatworldBattleCollectItemReq = 2425 + ChatworldBattleCollectItemRsp = 2426 + ChatworldGetActivityScheduleReq = 2427 + ChatworldGetActivityScheduleRsp = 2428 + ChatworldFishJoinSpotReq = 2429 + ChatworldFishJoinSpotRsp = 2430 + ChatworldFishLeaveSpotReq = 2431 + ChatworldFishLeaveSpotRsp = 2432 + ChatworldFishStartReq = 2433 + ChatworldFishStartRsp = 2434 + ChatworldFishEndReq = 2435 + ChatworldFishEndRsp = 2436 + ChatworldFishAssistReq = 2437 + ChatworldFishAssistRsp = 2438 + ChatworldFishLikeReq = 2439 + ChatworldFishLikeRsp = 2440 + ChatworldFishRewardNotify = 2441 + ChatworldFishCancelWaitAssistReq = 2442 + ChatworldFishCancelWaitAssistRsp = 2443 + ChatworldFishKickPlayerNotify = 2444 + ChatworldFishGetActivityInfoReq = 2445 + ChatworldFishGetActivityInfoRsp = 2446 + ChatworldGetPrayInfoReq = 2451 + ChatworldGetPrayInfoRsp = 2452 + ChatworldPrayReq = 2453 + ChatworldPrayRsp = 2454 + ChatworldGrantRewardNotify = 2455 + ChatworldGetDishInfoReq = 2456 + ChatworldGetDishInfoRsp = 2457 + ChatworldTakeDishRewardReq = 2458 + ChatworldTakeDishRewardRsp = 2459 + ChatworldBeastAddResultNotify = 2460 + ChatworldBeastChallengeReq = 2461 + ChatworldBeastChallengeRsp = 2462 + ChatworldBeastSyncReq = 2463 + ChatworldBeastSyncRsp = 2464 + ChatworldBeastGetActivityReq = 2465 + ChatworldBeastGetActivityRsp = 2466 + ChatworldBoxGetDataReq = 2467 + ChatworldBoxGetDataRsp = 2468 + ChatworldBoxTakeRewardReq = 2469 + ChatworldBoxTakeRewardRsp = 2470 + ChatworldBeastTakeTreasureReq = 2471 + ChatworldBeastTakeTreasureRsp = 2472 + ChatworldBeastAbandonChallengeReq = 2473 + ChatworldBeastAbandonChallengeRsp = 2474 + ChatworldGetCinemaInfoReq = 2475 + ChatworldGetCinemaInfoRsp = 2476 + ChatworldWoodenBoyEnterReq = 2477 + ChatworldWoodenBoyEnterRsp = 2478 + ChatworldWoodenBoyLeaveReq = 2479 + ChatworldWoodenBoyLeaveRsp = 2480 + ChatworldWoodenBoyStartNotify = 2481 + ChatworldWoodenBoySettleNotify = 2482 + ChatworldWoodenBoyUpdateStatusReq = 2483 + ChatworldWoodenBoyUpdateStatusRsp = 2484 + ChatworldQuestionSettleNotify = 2485 + ChatWorldGetWishInfoReq = 2486 + ChatWorldGetWishInfoRsp = 2487 + ChatWorldDoWishReq = 2488 + ChatWorldDoWishRsp = 2489 + ChatWorldExchangeGoodsReq = 2492 + ChatWorldExchangeGoodsRsp = 2493 + ChatworldChangeEnterEffectReq = 2494 + ChatworldChangeEnterEffectRsp = 2495 + ChatworldQCandyActivityGetReq = 2496 + ChatworldQCandyActivityGetRsp = 2497 + CreditReportDataReq = 6000 + CreditReportDataRsp = 6001 + CreditAccountGetReq = 6002 + CreditAccountGetRsp = 6003 + DevilAutoChessGetActivityReq = 8200 + DevilAutoChessGetActivityRsp = 8201 + DevilAutoChessRoleLevelUpReq = 8202 + DevilAutoChessRoleLevelUpRsp = 8203 + DevilAutoChessBeginGameReq = 8204 + DevilAutoChessBeginGameRsp = 8205 + DevilAutoChessGetGameReq = 8206 + DevilAutoChessGetGameRsp = 8207 + DevilAutoChessEndGameReq = 8208 + DevilAutoChessEndGameRsp = 8209 + DevilAutoChessRemoveCardReq = 8210 + DevilAutoChessRemoveCardRsp = 8211 + DevilAutoChessRefreshTreasurePoolReq = 8212 + DevilAutoChessRefreshTreasurePoolRsp = 8213 + DevilAutoChessRefreshCardPoolReq = 8214 + DevilAutoChessRefreshCardPoolRsp = 8215 + DevilAutoChessPromoteCardReq = 8216 + DevilAutoChessPromoteCardRsp = 8217 + DevilAutoChessSelectTreasureReq = 8218 + DevilAutoChessSelectTreasureRsp = 8219 + DevilAutoChessSelectCardReq = 8220 + DevilAutoChessSelectCardRsp = 8221 + DevilAutoChessFinishWaveReq = 8222 + DevilAutoChessFinishWaveRsp = 8223 + DevilAutoChessTriggerEventReq = 8224 + DevilAutoChessTriggerEventRsp = 8225 + DevilAutoChessSweepChallengeReq = 8226 + DevilAutoChessSweepChallengeRsp = 8227 + DevilAutoChessGetSpecialRankReq = 8228 + DevilAutoChessGetSpecialRankRsp = 8229 + DevilAutoChessGetWikiReq = 8230 + DevilAutoChessGetWikiRsp = 8231 + DevilAutoChessUnlockAchievementReq = 8232 + DevilAutoChessUnlockAchievementRsp = 8233 + DevilAutoChessUnlockBondReq = 8234 + DevilAutoChessUnlockBondRsp = 8235 + DiceyDungeonActivityGetDataReq = 6500 + DiceyDungeonActivityGetDataRsp = 6501 + DiceyDungeonActivityRoleLevelUpReq = 6502 + DiceyDungeonActivityRoleLevelUpRsp = 6503 + DiceyDungeonActivityDungeonBeginReq = 6504 + DiceyDungeonActivityDungeonBeginRsp = 6505 + DiceyDungeonActivityDungeonEndReq = 6506 + DiceyDungeonActivityDungeonEndRsp = 6507 + DiceyDungeonActivityRoomBeginReq = 6508 + DiceyDungeonActivityRoomBeginRsp = 6509 + DiceyDungeonActivityRoomEndReq = 6510 + DiceyDungeonActivityRoomEndRsp = 6511 + DiceyDungeonActivityGetWeaponGachaDisplayReq = 6512 + DiceyDungeonActivityGetWeaponGachaDisplayRsp = 6513 + DiceyDungeonActivityWeaponGachaReq = 6514 + DiceyDungeonActivityWeaponGachaRsp = 6515 + DiceyDungeonActivitySelectOrnamentReq = 6516 + DiceyDungeonActivitySelectOrnamentRsp = 6517 + DiceyDungeonActivityRefreshOrnamentReq = 6518 + DiceyDungeonActivityRefreshOrnamentRsp = 6519 + DiceyDungeonActivityGetDailyScoreRankReq = 6520 + DiceyDungeonActivityGetDailyScoreRankRsp = 6521 + GetDLCReq = 3550 + GetDLCRsp = 3551 + LevelUpDLCAvatarTalentReq = 3552 + LevelUpDLCAvatarTalentRsp = 3553 + EquipDLCAvatarTalentReq = 3554 + EquipDLCAvatarTalentRsp = 3555 + SyncDLCAvatarNotify = 3556 + ModifyDLCNameReq = 3557 + ModifyDLCNameRsp = 3558 + GetDLCAvatarReq = 3559 + GetDLCAvatarRsp = 3560 + TakeDLCLevelRewardReq = 3561 + TakeDLCLevelRewardRsp = 3562 + DLCTowerStageBeginReq = 3563 + DLCTowerStageBeginRsp = 3564 + DLCTowerStageEndReq = 3565 + DLCTowerStageEndRsp = 3566 + DLCAvatarReviveReq = 3569 + DLCAvatarReviveRsp = 3570 + GetDLCTowerRankReq = 3571 + GetDLCTowerRankRsp = 3572 + TakeDLCTowerRankRewardNotify = 3573 + GetDLCTowerReq = 3574 + GetDLCTowerRsp = 3575 + ResetDLCTowerProgressReq = 3576 + ResetDLCTowerProgressRsp = 3577 + FinishDLCDialogReq = 3578 + FinishDLCDialogRsp = 3579 + RefreshDLCTalentAffixReq = 3580 + RefreshDLCTalentAffixRsp = 3581 + SelectDLCTalentAffixReq = 3584 + SelectDLCTalentAffixRsp = 3585 + UnlockDLCPhotoReq = 3586 + UnlockDLCPhotoRsp = 3587 + SwitchDLCAvatarTalentReq = 3588 + SwitchDLCAvatarTalentRsp = 3589 + ReportDLCDropItemReq = 3590 + ReportDLCDropItemRsp = 3591 + GetElfDataReq = 2100 + GetElfDataRsp = 2101 + SyncElfDataNotify = 2102 + SyncElfFragmentNotify = 2103 + ElfStarUpReq = 2105 + ElfStarUpRsp = 2106 + AddElfExpByMaterialReq = 2107 + AddElfExpByMaterialRsp = 2108 + ElfFragmentTransformReq = 2121 + ElfFragmentTransformRsp = 2122 + ElfSkillLevelUpReq = 2123 + ElfSkillLevelUpRsp = 2124 + ElfTakeCompensationReq = 2125 + ElfTakeCompensationRsp = 2126 + GetLastEndlessRewardDataReq = 3406 + GetLastEndlessRewardDataRsp = 3407 + TakeEndlessBaseRewardReq = 3417 + TakeEndlessBaseRewardRsp = 3418 + GetOpenworldEndlessDataReq = 3419 + GetOpenworldEndlessDataRsp = 3420 + OpenworldEndlessItemUpdateNotify = 3421 + UseOpenworldEndlessItemReq = 3422 + UseOpenworldEndlessItemRsp = 3423 + FinishOpenworldEndlessMonsterGroupReq = 3424 + FinishOpenworldEndlessMonsterGroupRsp = 3425 + GetOpenworldEndlessStageInnerDataReq = 3426 + GetOpenworldEndlessStageInnerDataRsp = 3427 + TriggerOpenworldEndlessTrapReq = 3428 + TriggerOpenworldEndlessTrapRsp = 3429 + FinishOpenworldEndlessInvasionMonsterReq = 3430 + FinishOpenworldEndlessInvasionMonsterRsp = 3431 + GetEndlessStatusReq = 3432 + GetEndlessStatusRsp = 3433 + ReportOpenworldEndlessDataReq = 3434 + ReportOpenworldEndlessDataRsp = 3435 + OpenworldEndlessBattleBeginReq = 3438 + OpenworldEndlessBattleBeginRsp = 3439 + OpenworldEndlessBattleEndReq = 3440 + OpenworldEndlessBattleEndRsp = 3441 + OpenworldEndlessWarInfoNotify = 3442 + GetOpenworldEndlessPlayerWarInfoReq = 3443 + GetOpenworldEndlessPlayerWarInfoRsp = 3444 + OpenworldEndlessPlayerUpdateNotify = 3445 + GetOpenworldEndlessTopGroupReq = 3446 + GetOpenworldEndlessTopGroupRsp = 3447 + SetOpenworldEndlessMonsterGroupProgressReq = 3448 + SetOpenworldEndlessMonsterGroupProgressRsp = 3449 + OpenworldEndlessChangeAvatarReq = 3450 + OpenworldEndlessChangeAvatarRsp = 3451 + EndlessInSettleNotify = 3452 + GreedyEndlessEnrollReq = 3453 + GreedyEndlessEnrollRsp = 3454 + GreedyEndlessReportFloorEndReq = 3455 + GreedyEndlessReportFloorEndRsp = 3456 + GreedyEndlessFloorRewardNotify = 3457 + GreedyEndlessGetRankReq = 3458 + GreedyEndlessGetRankRsp = 3459 + GreedyEndlessTakeRankRewardReq = 3460 + GreedyEndlessTakeRankRewardRsp = 3461 + EndlessSelectTypeReq = 3462 + EndlessSelectTypeRsp = 3463 + GreedyEndlessReportFloorBeginReq = 3464 + GreedyEndlessReportFloorBeginRsp = 3465 + GetEquipmentForgeDataReq = 3650 + GetEquipmentForgeDataRsp = 3651 + ForgeEquipmentReq = 3652 + ForgeEquipmentRsp = 3653 + ExtractEquipmentReq = 3654 + ExtractEquipmentRsp = 3655 + ReforgeEquipmentReq = 3657 + ReforgeEquipmentRsp = 3658 + GetExtractReforgeActivityReq = 3659 + GetExtractReforgeActivityRsp = 3660 + GetEquipmentBackReq = 3661 + GetEquipmentBackRsp = 3662 + BackEquipmentReq = 3663 + BackEquipmentRsp = 3664 + GachaReq = 4700 + GachaRsp = 4701 + GetGachaDisplayReq = 4702 + GetGachaDisplayRsp = 4703 + BuyGachaTicketReq = 4704 + BuyGachaTicketRsp = 4705 + GetGachaLogReq = 4706 + GetGachaLogRsp = 4707 + GetGachaProbReq = 4708 + GetGachaProbRsp = 4709 + WishWellReq = 4710 + WishWellRsp = 4711 + BuyControllableBoxGachaTicketReq = 4712 + BuyControllableBoxGachaTicketRsp = 4713 + TakeGachaExRewardReq = 4714 + TakeGachaExRewardRsp = 4715 + ChooseOptionalGachaReq = 4716 + ChooseOptionalGachaRsp = 4717 + SelectControllableBoxGachaSelectableGroupItemReq = 4718 + SelectControllableBoxGachaSelectableGroupItemRsp = 4719 + UniqueGachaUpdateItemPoolReq = 4722 + UniqueGachaUpdateItemPoolRsp = 4723 + GeneralActivityScoreRewardNotify = 4000 + GeneralActivityGetScoreRewardInfoReq = 4001 + GeneralActivityGetScoreRewardInfoRsp = 4002 + GeneralActivityGetScheduleReq = 4003 + GeneralActivityGetScheduleRsp = 4004 + GeneralActivityGetMainInfoReq = 4005 + GeneralActivityGetMainInfoRsp = 4006 + GeneralActivityGetRankReq = 4007 + GeneralActivityGetRankRsp = 4008 + PushTowerActivityTakeStageRewardReq = 4009 + PushTowerActivityTakeStageRewardRsp = 4010 + PushTowerActivityTakeClearRewardReq = 4011 + PushTowerActivityTakeClearRewardRsp = 4012 + GeneralActivityStageExchangeEnterTimesReq = 4030 + GeneralActivityStageExchangeEnterTimesRsp = 4031 + GeneralActivityStageTakeStageRewardReq = 4032 + GeneralActivityStageTakeStageRewardRsp = 4033 + TakeGeneralActivityScoreRewardReq = 4034 + TakeGeneralActivityScoreRewardRsp = 4035 + GeneralActivityStageTakeStageGroupRewardReq = 4036 + GeneralActivityStageTakeStageGroupRewardRsp = 4037 + EndlessSingleModeActivityFinishFloorReq = 4038 + EndlessSingleModeActivityFinishFloorRsp = 4039 + EndlessSingleModeActivityResetReq = 4040 + EndlessSingleModeActivityResetRsp = 4041 + EndlessSingleModeActivityBattleBeginReq = 4042 + EndlessSingleModeActivityBattleBeginRsp = 4043 + EndlessSingleModeActivityBattleEndReq = 4044 + EndlessSingleModeActivityBattleEndRsp = 4045 + EndlessSingleModeActivityTakeItemReq = 4046 + EndlessSingleModeActivityTakeItemRsp = 4047 + EndlessSingleModeActivityUseItemReq = 4048 + EndlessSingleModeActivityUseItemRsp = 4049 + GeneralActivityGetStageRankReq = 4052 + GeneralActivityGetStageRankRsp = 4053 + CrisisModeActivityTakeStageRewardReq = 4056 + CrisisModeActivityTakeStageRewardRsp = 4057 + GeneralActivityTakeTicketReq = 4060 + GeneralActivityTakeTicketRsp = 4061 + BossChallengeActivityGetStageRankReq = 4062 + BossChallengeActivityGetStageRankRsp = 4063 + FrontEndlessActivityBattleBeginReq = 4064 + FrontEndlessActivityBattleBeginRsp = 4065 + FrontEndlessActivityBattleEndReq = 4066 + FrontEndlessActivityBattleEndRsp = 4067 + GlobalExploreGetActivityReq = 6900 + GlobalExploreGetActivityRsp = 6901 + GlobalExploreNotify = 6902 + GlobalExploreMoveReq = 6903 + GlobalExploreMoveRsp = 6904 + GlobalExploreInteractReq = 6905 + GlobalExploreInteractRsp = 6906 + GlobalExploreActionReq = 6907 + GlobalExploreActionRsp = 6908 + GetGlobalWarActivityReq = 3950 + GetGlobalWarActivityRsp = 3951 + GlobalWarTakePointRewardReq = 3952 + GlobalWarTakePointRewardRsp = 3953 + GlobalWarAddCurrencyNotify = 3954 + GlobalWarExchangeCurrencyReq = 3955 + GlobalWarExchangeCurrencyRsp = 3956 + GlobalWarGetRankReq = 3957 + GlobalWarGetRankRsp = 3958 + GlobalWarTakeSweepRewardReq = 3959 + GlobalWarTakeSweepRewardRsp = 3960 + GetGodWarReq = 6150 + GetGodWarRsp = 6151 + SelectGodWarChallengeAvatarReq = 6152 + SelectGodWarChallengeAvatarRsp = 6153 + ChangeGodWarChallengeSupportAvatarReq = 6154 + ChangeGodWarChallengeSupportAvatarRsp = 6155 + SyncGodWarTaleNotify = 6156 + ResetGodWarChallengeReq = 6157 + ResetGodWarChallengeRsp = 6158 + GodWarEventNotify = 6160 + TriggerGodWarEventReq = 6161 + TriggerGodWarEventRsp = 6162 + RefreshGodWarTeleportEventReq = 6163 + RefreshGodWarTeleportEventRsp = 6164 + SelectGodWarBuffReq = 6170 + SelectGodWarBuffRsp = 6171 + LevelUpGodWarTalentReq = 6172 + LevelUpGodWarTalentRsp = 6173 + TakeGodWarTalentSupportLevelRewardNotify = 6176 + AddGodWarRoleRelationExpReq = 6177 + AddGodWarRoleRelationExpRsp = 6178 + LevelUpGodWarRoleRelationReq = 6179 + LevelUpGodWarRoleRelationRsp = 6180 + TakeGodWarRoleRelationLevelRewardReq = 6181 + TakeGodWarRoleRelationLevelRewardRsp = 6182 + GetGodWarTaleShopReq = 6183 + GetGodWarTaleShopRsp = 6184 + BuyGodWarShopGoodsReq = 6185 + BuyGodWarShopGoodsRsp = 6186 + TakeGodWarRoleStoryRewardReq = 6187 + TakeGodWarRoleStoryRewardRsp = 6188 + RefreshGodWarTicketReq = 6189 + RefreshGodWarTicketRsp = 6190 + PredictGodWarEventReq = 6191 + PredictGodWarEventRsp = 6192 + RefreshGodWarBuffEventReq = 6193 + RefreshGodWarBuffEventRsp = 6194 + GetGodWarRoleReq = 6195 + GetGodWarRoleRsp = 6196 + GetGodWarTeleportEventReq = 6197 + GetGodWarTeleportEventRsp = 6198 + SwitchGodWarChapterReq = 6199 + SwitchGodWarChapterRsp = 6200 + GetGodWarLobbyReq = 6201 + GetGodWarLobbyRsp = 6202 + FinishGodWarLobbyActionReq = 6203 + FinishGodWarLobbyActionRsp = 6204 + RefreshGodWarShopGoodsReq = 6205 + RefreshGodWarShopGoodsRsp = 6206 + SkipGodWarStoryNodeReq = 6207 + SkipGodWarStoryNodeRsp = 6208 + RefreshGodWarGachaReq = 6209 + RefreshGodWarGachaRsp = 6210 + GourmetHuntGetActivityReq = 8150 + GourmetHuntGetActivityRsp = 8151 + GourmetHuntLevelUpReq = 8152 + GourmetHuntLevelUpRsp = 8153 + GourmetHuntUnlockWeaponModuleReq = 8154 + GourmetHuntUnlockWeaponModuleRsp = 8155 + GourmetHuntUnlockFurnitureReq = 8156 + GourmetHuntUnlockFurnitureRsp = 8157 + GourmetHuntStartManagementReq = 8158 + GourmetHuntStartManagementRsp = 8159 + GourmetHuntStopManagementReq = 8160 + GourmetHuntStopManagementRsp = 8161 + GourmetHuntStartExploreReq = 8162 + GourmetHuntStartExploreRsp = 8163 + GourmetHuntStopExploreReq = 8164 + GourmetHuntStopExploreRsp = 8165 + GourmetHuntOpenTreasureReq = 8166 + GourmetHuntOpenTreasureRsp = 8167 + GourmetHuntTriggerTeleportReq = 8168 + GourmetHuntTriggerTeleportRsp = 8169 + GourmetHuntKillBossReq = 8170 + GourmetHuntKillBossRsp = 8171 + GourmetHuntEnterRoomReq = 8172 + GourmetHuntEnterRoomRsp = 8173 + GourmetHuntGetRankReq = 8174 + GourmetHuntGetRankRsp = 8175 + GourmetHuntTriggerEntityReq = 8176 + GourmetHuntTriggerEntityRsp = 8177 + GourmetHuntDailyStaminaRecoveryNotify = 8178 + GourmetHuntBuildBranchStoreReq = 8179 + GourmetHuntBuildBranchStoreRsp = 8180 + GourmetHuntOpenBranchStoreReq = 8181 + GourmetHuntOpenBranchStoreRsp = 8182 + GetGratuityActivityReq = 4100 + GetGratuityActivityRsp = 4101 + AcceptGratuityStageReq = 4102 + AcceptGratuityStageRsp = 4103 + AssistGratuityStageReq = 4104 + AssistGratuityStageRsp = 4105 + CancelGratuityStageReq = 4106 + CancelGratuityStageRsp = 4107 + GetGratuityBattleHistoryReq = 4108 + GetGratuityBattleHistoryRsp = 4109 + SyncGratuityStageReq = 4112 + SyncGratuityStageRsp = 4113 + PublishGratuityStageReq = 4114 + PublishGratuityStageRsp = 4115 + GetGratuityStageListReq = 4116 + GetGratuityStageListRsp = 4117 + RejectGratuityStageReq = 4118 + RejectGratuityStageRsp = 4119 + GratuityStageInviteNotify = 4120 + GratuityStageFinishNotify = 4121 + GetKingdomWarReq = 3050 + GetKingdomWarRsp = 3051 + KingdomWarMoveReq = 3052 + KingdomWarMoveRsp = 3053 + KingdomWarVoteReq = 3054 + KingdomWarVoteRsp = 3055 + KingdomWarGetRankReq = 3058 + KingdomWarGetRankRsp = 3059 + KingdomWarTakeDailyRewardReq = 3060 + KingdomWarTakeDailyRewardRsp = 3061 + KingdomWarExchangeCurrencyReq = 3062 + KingdomWarExchangeCurrencyRsp = 3063 + KingdomWarGetPointRankReq = 3064 + KingdomWarGetPointRankRsp = 3065 + MahouCardGetActivityReq = 7900 + MahouCardGetActivityRsp = 7901 + MahouCardRoleLevelUpReq = 7902 + MahouCardRoleLevelUpRsp = 7903 + MahouCardEnterSiteReq = 7904 + MahouCardEnterSiteRsp = 7905 + MahouCardEnterRoomReq = 7906 + MahouCardEnterRoomRsp = 7907 + MahouCardExitRoomReq = 7908 + MahouCardExitRoomRsp = 7909 + MahouCardExitSiteReq = 7925 + MahouCardExitSiteRsp = 7926 + MahouCardGetCurSiteInfoReq = 7910 + MahouCardGetCurSiteInfoRsp = 7911 + MahouCardHandCardChangeNotify = 7912 + MahouCardExchangeCardReq = 7913 + MahouCardExchangeCardRsp = 7914 + MahouCardDiscardCardReq = 7915 + MahouCardDiscardCardRsp = 7916 + MahouCardLevelUpCardReq = 7917 + MahouCardLevelUpCardRsp = 7918 + MahouCardSetBattleCardReq = 7919 + MahouCardSetBattleCardRsp = 7920 + MahouCardRecallBattleCardReq = 7921 + MahouCardRecallBattleCardRsp = 7922 + MahouCardSelectProphesyReq = 7923 + MahouCardSelectProphesyRsp = 7924 + MahouCardChooseEventOptionReq = 7927 + MahouCardChooseEventOptionRsp = 7928 + MahouCardEventNotify = 7929 + MahouCardBattleBeginReq = 7930 + MahouCardBattleBeginRsp = 7931 + MahouCardBattleEndReq = 7932 + MahouCardBattleEndRsp = 7933 + MahouCardUnlockDailySiteReq = 7934 + MahouCardUnlockDailySiteRsp = 7935 + MahouCardGetDailySiteRankReq = 7936 + MahouCardGetDailySiteRankRsp = 7937 + MahouCardOverdrawnNotify = 7938 + GetClientMailDataReq = 3800 + GetClientMailDataRsp = 3801 + TakeClientMailAttachmentReq = 3802 + TakeClientMailAttachmentRsp = 3803 + MarkReadClientMailReq = 3804 + MarkReadClientMailRsp = 3805 + DelClientMailReq = 3806 + DelClientMailRsp = 3807 + NewClientMailNotify = 3808 + SetClientMailFavoriteReq = 3809 + SetClientMailFavoriteRsp = 3810 + MarblesShootGetActivityReq = 8050 + MarblesShootGetActivityRsp = 8051 + MarblesShootAvatarLevelUpReq = 8052 + MarblesShootAvatarLevelUpRsp = 8053 + MarblesShootGetGameReq = 8054 + MarblesShootGetGameRsp = 8055 + MarblesShootBeginGameReq = 8056 + MarblesShootBeginGameRsp = 8057 + MarblesShootEndGameReq = 8058 + MarblesShootEndGameRsp = 8059 + MarblesShootFinishRoomReq = 8060 + MarblesShootFinishRoomRsp = 8061 + MarblesShootTriggerEventReq = 8062 + MarblesShootTriggerEventRsp = 8063 + MarblesShootFinishBattleReq = 8064 + MarblesShootFinishBattleRsp = 8065 + MarblesShootSelectRewardReq = 8066 + MarblesShootSelectRewardRsp = 8067 + MarblesShootShopOperateReq = 8068 + MarblesShootShopOperateRsp = 8069 + MarblesShootGetRankReq = 8070 + MarblesShootGetRankRsp = 8071 + MarblesShootSelectInitItemReq = 8072 + MarblesShootSelectInitItemRsp = 8073 + MarblesShootGetWikiReq = 8074 + MarblesShootGetWikiRsp = 8075 + MassiveWarGetActivityReq = 4800 + MassiveWarGetActivityRsp = 4801 + MassiveWarGetBattleInfoReq = 4802 + MassiveWarGetBattleInfoRsp = 4803 + MassiveWarGetRankReq = 4804 + MassiveWarGetRankRsp = 4805 + MassiveWarBattleBeginNotify = 4806 + MassiveWarReportBattleMessageNotify = 4807 + MassiveWarExitBattleReq = 4808 + MassiveWarExitBattleRsp = 4809 + MassiveWarBattleEndNotify = 4810 + MassiveWarLineupInfoNotify = 4811 + MassiveWarTakeScoreRewardReq = 4812 + MassiveWarTakeScoreRewardRsp = 4813 + MatchThreeGetActivityReq = 7601 + MatchThreeGetActivityRsp = 7602 + MatchThreeRoleLevelUpReq = 7603 + MatchThreeRoleLevelUpRsp = 7604 + MatchThreeGemGachaDisplayReq = 7605 + MatchThreeGemGachaDisplayRsp = 7606 + MatchThreeGemGachaReq = 7607 + MatchThreeGemGachaRsp = 7608 + MatchThreeGetRankReq = 7609 + MatchThreeGetRankRsp = 7610 + MatchThreeRoomBeginReq = 7611 + MatchThreeRoomBeginRsp = 7612 + MatchThreeRoomEndReq = 7613 + MatchThreeRoomEndRsp = 7614 + MirageGetActivityReq = 7000 + MirageGetActivityRsp = 7001 + MirageTalentLevelUpReq = 7002 + MirageTalentLevelUpRsp = 7003 + MirageReportStageBeginReq = 7004 + MirageReportStageBeginRsp = 7005 + MirageResetDailyDropLimitReq = 7006 + MirageResetDailyDropLimitRsp = 7007 + GetMonopolyActivityReq = 3850 + GetMonopolyActivityRsp = 3851 + MonopolyThrowDiceReq = 3852 + MonopolyThrowDiceRsp = 3853 + MonopolyBuildingConstructReq = 3854 + MonopolyBuildingConstructRsp = 3855 + MonopolyEndRoundReq = 3856 + MonopolyEndRoundRsp = 3857 + MonopolyUseItemReq = 3858 + MonopolyUseItemRsp = 3859 + MonopolyRewardNotify = 3860 + MonopolyBuyGoodsReq = 3861 + MonopolyBuyGoodsRsp = 3862 + MonopolySkipBattleReq = 3863 + MonopolySkipBattleRsp = 3864 + MonopolyResetFloorReq = 3865 + MonopolyResetFloorRsp = 3866 + MonopolyAddMonsterReq = 3867 + MonopolyAddMonsterRsp = 3868 + ExchangeRaffleMaterialReq = 3890 + ExchangeRaffleMaterialRsp = 3891 + TakeRaffleRewardReq = 3894 + TakeRaffleRewardRsp = 3895 + DrawRaffleTicketReq = 3896 + DrawRaffleTicketRsp = 3897 + GetRaffleActivityReq = 3898 + GetRaffleActivityRsp = 3899 + GetNinjaActivityReq = 4400 + GetNinjaActivityRsp = 4401 + NinjaSlotStrengthenReq = 4402 + NinjaSlotStrengthenRsp = 4403 + NinjaActivityNotify = 4404 + NinjaSlotChooseEffectReq = 4405 + NinjaSlotChooseEffectRsp = 4406 + KeepAliveNotify = 1 + GetGameserverReq = 2 + GetGameserverRsp = 3 + GetPlayerTokenReq = 4 + GetPlayerTokenRsp = 5 + PlayerLoginReq = 6 + PlayerLoginRsp = 7 + PlayerLogoutReq = 8 + GetMainDataReq = 10 + GetMainDataRsp = 11 + GetScoinExchangeInfoReq = 12 + GetScoinExchangeInfoRsp = 13 + ScoinExchangeReq = 14 + ScoinExchangeRsp = 15 + GetStaminaExchangeInfoReq = 16 + GetStaminaExchangeInfoRsp = 17 + StaminaExchangeReq = 18 + StaminaExchangeRsp = 19 + NicknameModifyReq = 20 + NicknameModifyRsp = 21 + GmTalkReq = 22 + GmTalkRsp = 23 + GetAvatarDataReq = 24 + GetAvatarDataRsp = 25 + GetEquipmentDataReq = 26 + GetEquipmentDataRsp = 27 + DelEquipmentNotify = 28 + AvatarStarUpReq = 29 + AvatarStarUpRsp = 30 + EquipmentPowerUpReq = 31 + EquipmentPowerUpRsp = 32 + EquipmentSellReq = 33 + EquipmentSellRsp = 34 + AddAvatarExpByMaterialReq = 35 + AddAvatarExpByMaterialRsp = 36 + EquipmentEvoReq = 37 + EquipmentEvoRsp = 38 + DressEquipmentReq = 39 + DressEquipmentRsp = 40 + GetStageDataReq = 41 + GetStageDataRsp = 42 + StageBeginReq = 43 + StageBeginRsp = 44 + StageEndReq = 45 + StageEndRsp = 46 + GetAvatarTeamDataReq = 47 + GetAvatarTeamDataRsp = 48 + UpdateAvatarTeamNotify = 49 + AvatarSubSkillLevelUpReq = 50 + AvatarSubSkillLevelUpRsp = 51 + MaterialEvoReq = 56 + MaterialEvoRsp = 57 + GetStageDropDisplayReq = 60 + GetStageDropDisplayRsp = 61 + GetFriendListReq = 64 + GetFriendListRsp = 65 + AddFriendReq = 66 + AddFriendRsp = 67 + DelFriendReq = 68 + DelFriendRsp = 69 + GetAskAddFriendListReq = 70 + GetAskAddFriendListRsp = 71 + GetPlayerDetailDataReq = 72 + GetPlayerDetailDataRsp = 73 + UpdateEquipmentProtectedStatusReq = 74 + UpdateEquipmentProtectedStatusRsp = 75 + GetRecommendFriendListReq = 76 + GetRecommendFriendListRsp = 77 + SetSelfDescReq = 78 + SetSelfDescRsp = 79 + DelFriendNotify = 80 + GetOfflineFriendsPointNotify = 81 + VerifyItunesOrderNotify = 82 + GetMailDataReq = 84 + GetMailDataRsp = 85 + GetMailAttachmentReq = 86 + GetMailAttachmentRsp = 87 + UnlockAvatarSkillReq = 88 + UnlockAvatarSkillRsp = 89 + EquipmentQuickLevelUpReq = 90 + EquipmentQuickLevelUpRsp = 91 + RefreshAvatarSkillReq = 92 + RefreshAvatarSkillRsp = 93 + GetAssistantFrozenListReq = 100 + GetAssistantFrozenListRsp = 101 + SellAvatarFragmentReq = 102 + SellAvatarFragmentRsp = 103 + GetHasGotItemIdListReq = 104 + GetHasGotItemIdListRsp = 105 + AvatarReviveReq = 106 + AvatarReviveRsp = 107 + ResetStageEnterTimesReq = 108 + ResetStageEnterTimesRsp = 109 + GetConfigReq = 110 + GetConfigRsp = 111 + GetMissionDataReq = 112 + GetMissionDataRsp = 113 + GetMissionRewardReq = 114 + GetMissionRewardRsp = 115 + DelMissionNotify = 116 + UpdateMissionProgressReq = 117 + UpdateMissionProgressRsp = 118 + BindAccountReq = 119 + BindAccountRsp = 120 + GetSignInRewardStatusReq = 121 + GetSignInRewardStatusRsp = 122 + GetSignInRewardReq = 123 + GetSignInRewardRsp = 124 + GetWeekDayActivityDataReq = 125 + GetWeekDayActivityDataRsp = 126 + GetFinishGuideDataReq = 127 + GetFinishGuideDataRsp = 128 + FinishGuideReportReq = 129 + FinishGuideReportRsp = 130 + StageInnerDataReportReq = 131 + StageInnerDataReportRsp = 132 + GetDispatchReq = 133 + GetDispatchRsp = 134 + ExchangeAvatarWeaponReq = 135 + ExchangeAvatarWeaponRsp = 136 + GetBulletinReq = 137 + GetBulletinRsp = 138 + AddGoodfeelReq = 154 + AddGoodfeelRsp = 155 + IslandDisjoinEquipmentReq = 179 + IslandDisjoinEquipmentRsp = 180 + GetGuideRewardReq = 185 + GetGuideRewardRsp = 186 + UrgencyMsgNotify = 187 + RefineStigmataRuneReq = 193 + RefineStigmataRuneRsp = 194 + SelectNewStigmataRuneReq = 195 + SelectNewStigmataRuneRsp = 196 + CreateWeiXinOrderReq = 207 + CreateWeiXinOrderRsp = 208 + CommentReportReq = 229 + CommentReportRsp = 230 + GetExtraStoryDataReq = 231 + GetExtraStoryDataRsp = 232 + GetExtraStoryActivityActReq = 233 + GetExtraStoryActivityActRsp = 234 + GetExtraStoryAchieveDataReq = 235 + GetExtraStoryAchieveDataRsp = 236 + GetExtraStoryAchieveRewardReq = 237 + GetExtraStoryAchieveRewardRsp = 238 + SwitchDynamicHardLvReq = 239 + SwitchDynamicHardLvRsp = 240 + GetIslandEventReq = 241 + GetIslandEventRsp = 242 + FinishIslandEventReq = 243 + FinishIslandEventRsp = 244 + SetTransferPwdReq = 245 + SetTransferPwdRsp = 246 + VerifyGoogleOrderNotify = 247 + SetDressReq = 248 + SetDressRsp = 249 + DressToReturnMaterialNotify = 250 + UseMaterialReq = 251 + UseMaterialRsp = 252 + SwitchAvatarSubSkillReq = 253 + SwitchAvatarSubSkillRsp = 254 + ExchangeWeekDayActivityTimesReq = 259 + ExchangeWeekDayActivityTimesRsp = 260 + UpdateCustomAvatarTeamReq = 269 + UpdateCustomAvatarTeamRsp = 270 + UpdateAssistantAvatarIdReq = 271 + UpdateAssistantAvatarIdRsp = 272 + TakeDutyRewardReq = 288 + TakeDutyRewardRsp = 289 + ReportBirthdayReq = 299 + ReportBirthdayRsp = 300 + CreateLobbyReq = 301 + CreateLobbyRsp = 302 + EnterLobbyReq = 303 + EnterLobbyRsp = 304 + LeaveTeamReq = 305 + LeaveTeamRsp = 306 + UpdateLobbyLineupReq = 307 + UpdateLobbyLineupRsp = 308 + SwitchMemberStatusReq = 309 + SwitchMemberStatusRsp = 310 + LobbyStageBeginReq = 311 + LobbyStageBeginRsp = 312 + LobbyStageEndReq = 313 + LobbyStageEndRsp = 314 + KickLobbyMemberReq = 317 + KickLobbyMemberRsp = 318 + SetLobbyFastEntranceReq = 319 + SetLobbyFastEntranceRsp = 320 + LobbyEnterFightErrorNotify = 321 + PromoteStigmataRuneReq = 332 + PromoteStigmataRuneRsp = 333 + GetMpDataReq = 340 + GetMpDataRsp = 341 + MpUpgradeSkillReq = 342 + MpUpgradeSkillRsp = 343 + MpResetSkillPointReq = 344 + MpResetSkillPointRsp = 345 + MpGetTeamReq = 346 + MpGetTeamRsp = 347 + MpTeamSyncNotify = 395 + MpCreateTeamReq = 348 + MpCreateTeamRsp = 349 + MpEnterTeamReq = 350 + MpEnterTeamRsp = 351 + GetTeamBriefInfoReq = 352 + GetTeamBriefInfoRsp = 353 + MpKickFromTeamReq = 354 + MpKickFromTeamRsp = 355 + MpTeamEnterLobbyReq = 356 + MpTeamEnterLobbyRsp = 357 + MpTeamChangeLeaderReq = 362 + MpTeamChangeLeaderRsp = 363 + GetGobackReq = 364 + GetGobackRsp = 365 + TakeGobackLoginRewardReq = 366 + TakeGobackLoginRewardRsp = 367 + TeamLeaderChangeNotify = 371 + MpTeamLeaveLobbyReq = 373 + MpTeamLeaveLobbyRsp = 374 + MpMemberSetClientStatusReq = 375 + MpMemberSetClientStatusRsp = 376 + MpReportPlayerReq = 381 + MpReportPlayerRsp = 382 + MpStageSettleNotify = 391 + MpLikePlayerReq = 392 + MpLikePlayerRsp = 393 + FriendBondNotify = 394 + MpTeamMemberSetVoiceIdReq = 396 + MpTeamMemberSetVoiceIdRsp = 397 + ReportClientDataVersionReq = 398 + ReportClientDataVersionRsp = 399 + OpenworldPeriodSettleNotify = 4450 + OpenworldWeeklySettleNotify = 4451 + AcceptOpenworldStoryReq = 4452 + AcceptOpenworldStoryRsp = 4453 + SetOpenworldStoryProgressReq = 4454 + SetOpenworldStoryProgressRsp = 4455 + TakeOpenworldStoryRewardReq = 4456 + TakeOpenworldStoryRewardRsp = 4457 + TakeOpenworldEventRewardReq = 4458 + TakeOpenworldEventRewardRsp = 4459 + GetOpenworldStageReq = 4460 + GetOpenworldStageRsp = 4461 + OpenworldStageBeginReq = 4462 + OpenworldStageBeginRsp = 4463 + OpenworldStageEndReq = 4464 + OpenworldStageEndRsp = 4465 + OpenOpenworldQuestReq = 4474 + OpenOpenworldQuestRsp = 4475 + GetOpenworldSelectQuestReq = 4476 + GetOpenworldSelectQuestRsp = 4477 + ChooseOpenworldQuestReq = 4478 + ChooseOpenworldQuestRsp = 4479 + RefreshOpenworldQuestReq = 4480 + RefreshOpenworldQuestRsp = 4481 + TakeOpenworldQuestRewardReq = 4482 + TakeOpenworldQuestRewardRsp = 4483 + AbandonOpenworldQuestReq = 4484 + AbandonOpenworldQuestRsp = 4485 + ReportOpenworldSpawnPointReq = 4486 + ReportOpenworldSpawnPointRsp = 4487 + FinishOpenworldQuestReq = 4488 + FinishOpenworldQuestRsp = 4489 + TakeOpenworldCycleFinishRewardReq = 4490 + TakeOpenworldCycleFinishRewardRsp = 4491 + EatOpenworldCookReq = 4492 + EatOpenworldCookRsp = 4493 + TakeOpenworldKeyQuestRewardReq = 4494 + TakeOpenworldKeyQuestRewardRsp = 4495 + GetNewOpenworldReq = 4496 + GetNewOpenworldRsp = 4497 + GetOpenworldMapReq = 4498 + GetOpenworldMapRsp = 4499 + GetOpenworldStoryReq = 4500 + GetOpenworldStoryRsp = 4501 + UnlockOpenworldTechSkillReq = 4502 + UnlockOpenworldTechSkillRsp = 4503 + ActivateOpenworldMapReq = 4504 + ActivateOpenworldMapRsp = 4505 + OpenworldSetMechaTeamReq = 4506 + OpenworldSetMechaTeamRsp = 4507 + OpenworldGetMechaTeamReq = 4508 + OpenworldGetMechaTeamRsp = 4509 + OpenworldMechaDefenseBeginReq = 4510 + OpenworldMechaDefenseBeginRsp = 4511 + OpenworldMechaDefenseEndReq = 4512 + OpenworldMechaDefenseEndRsp = 4513 + GetOpenworldMechaDefenseReq = 4514 + GetOpenworldMechaDefenseRsp = 4515 + OpenworldMakeMechaReq = 4516 + OpenworldMakeMechaRsp = 4517 + SetMechaPortReq = 4518 + SetMechaPortRsp = 4519 + ChooseOpenworldBossReq = 4520 + ChooseOpenworldBossRsp = 4521 + UpdateOpenworldBossStatusReq = 4522 + UpdateOpenworldBossStatusRsp = 4523 + UpdateOpenworldBossSearchTimeReq = 4524 + UpdateOpenworldBossSearchTimeRsp = 4525 + TakeOpenworldBossRewardReq = 4526 + TakeOpenworldBossRewardRsp = 4527 + TakeOpenworldBossHuntRatingRewardReq = 4528 + TakeOpenworldBossHuntRatingRewardRsp = 4529 + SyncOpenworldBossHuntNotify = 4530 + TakeOpenworldActivityLevelRewardReq = 4531 + TakeOpenworldActivityLevelRewardRsp = 4532 + GetOpenworldBossHuntRankReq = 4533 + GetOpenworldBossHuntRankRsp = 4534 + SyncOpenworldActivityNotify = 4535 + ResetOpenworldBossReq = 4536 + ResetOpenworldBossRsp = 4537 + ReportOpenworldAreaInfoReq = 4538 + ReportOpenworldAreaInfoRsp = 4539 + OpenworldFightBeginNotify = 4540 + OpenworldFightEndNotify = 4541 + ReportOpenworldAreaEntityStateReq = 4542 + ReportOpenworldAreaEntityStateRsp = 4543 + UpdateOpenworldQuestProgressReq = 4544 + UpdateOpenworldQuestProgressRsp = 4545 + GetOpenworldQuestActivityReq = 4546 + GetOpenworldQuestActivityRsp = 4547 + GetOpenworldAvatarActivityReq = 4548 + GetOpenworldAvatarActivityRsp = 4549 + OpenworldAvatarActivityAcceptDailyQuestReq = 4550 + OpenworldAvatarActivityAcceptDailyQuestRsp = 4551 + OpenworldAvatarActivityRefreshDailyQuestReq = 4552 + OpenworldAvatarActivityRefreshDailyQuestRsp = 4553 + OpenworldAvatarActivityFinishQuestReq = 4554 + OpenworldAvatarActivityFinishQuestRsp = 4555 + OpenworldAvatarActivityTakeQuestRewardReq = 4556 + OpenworldAvatarActivityTakeQuestRewardRsp = 4557 + OpenworldAvatarActivityCultivateReq = 4558 + OpenworldAvatarActivityCultivateRsp = 4559 + OpenworldAvatarActivityTalentLevelupReq = 4560 + OpenworldAvatarActivityTalentLevelupRsp = 4561 + OpenworldAvatarActivityGetFileReq = 4562 + OpenworldAvatarActivityGetFileRsp = 4563 + OpenworldAvatarActivitySpecialQuestNotify = 4564 + OpenworldChapterGetDataReq = 4565 + OpenworldChapterGetDataRsp = 4566 + OpenworldChapterSlotEquipBuffReq = 4567 + OpenworldChapterSlotEquipBuffRsp = 4568 + OpenworldAcceptNewStoryReq = 4569 + OpenworldAcceptNewStoryRsp = 4570 + OpenworldChapterTakeRewardReq = 4571 + OpenworldChapterTakeRewardRsp = 4572 + OpenworldCloseStoryReq = 4573 + OpenworldCloseStoryRsp = 4574 + OpenworldChapterGetShopDataReq = 4575 + OpenworldChapterGetShopDataRsp = 4576 + OpenworldChapterShopBuyGoodsReq = 4577 + OpenworldChapterShopBuyGoodsRsp = 4578 + OpenworldChapterEndlessTowerGetRankReq = 4579 + OpenworldChapterEndlessTowerGetRankRsp = 4580 + OpenworldChapterEndlessTowerTakeRewardReq = 4581 + OpenworldChapterEndlessTowerTakeRewardRsp = 4582 + OpenworldChapterLevelUpHeroReq = 4583 + OpenworldChapterLevelUpHeroRsp = 4584 + OpenworldChapterEquipCardGroupReq = 4585 + OpenworldChapterEquipCardGroupRsp = 4586 + OpenworldChapterModifyCardGroupNameReq = 4587 + OpenworldChapterModifyCardGroupNameRsp = 4588 + OpenworldChapterActiveCardGroupReq = 4589 + OpenworldChapterActiveCardGroupRsp = 4590 + OpenworldChapterDeleteCardGroupReq = 4591 + OpenworldChapterDeleteCardGroupRsp = 4592 + OpenworldChapterGetChallengeDataReq = 4593 + OpenworldChapterGetChallengeDataRsp = 4594 + OpenworldChapterFinishChallengeReq = 4595 + OpenworldChapterFinishChallengeRsp = 4596 + OpenworldChapterHeroCardLevelUpNotify = 4597 + OpenworldChapterOpenHeroTreasureReq = 4598 + OpenworldChapterOpenHeroTreasureRsp = 4599 + OpenworldHuntActivityGetDataReq = 4600 + OpenworldHuntActivityGetDataRsp = 4601 + OpenworldHuntActivityGetMapDataReq = 4602 + OpenworldHuntActivityGetMapDataRsp = 4603 + OpenworldHuntActivityCommonStateChangeReq = 4604 + OpenworldHuntActivityCommonStateChangeRsp = 4605 + OpenworldHuntActivityTalentUpgradeReq = 4606 + OpenworldHuntActivityTalentUpgradeRsp = 4607 + OpenworldHuntActivityFinishQuestReq = 4608 + OpenworldHuntActivityFinishQuestRsp = 4609 + OpenworldHuntActivityTakeStrongholdRewardNotify = 4610 + OpenworldHuntActivityChangeHunterAreaReq = 4611 + OpenworldHuntActivityChangeHunterAreaRsp = 4612 + OpenworldHuntActivityReportHuntingScoreReq = 4613 + OpenworldHuntActivityReportHuntingScoreRsp = 4614 + OpenworldChapterChallengeBeginReq = 4630 + OpenworldChapterChallengeBeginRsp = 4631 + OpenworldChapterEndlessChallengeBeginReq = 4632 + OpenworldChapterEndlessChallengeBeginRsp = 4633 + OpenworldChapterEndlessChallengeEndReq = 4634 + OpenworldChapterEndlessChallengeEndRsp = 4635 + OpenworldChapterLevelUpBuildingReq = 4636 + OpenworldChapterLevelUpBuildingRsp = 4637 + OpenworldChapterLevelUpBuildingFinishNotify = 4638 + OpenworldChapterAccelerateLevelUpBuildingReq = 4639 + OpenworldChapterAccelerateLevelUpBuildingRsp = 4640 + OpenworldChapterTerminalPeriodUpgradeReq = 4641 + OpenworldChapterTerminalPeriodUpgradeRsp = 4642 + OpenworldChapterGetSelectQuestReq = 4643 + OpenworldChapterGetSelectQuestRsp = 4644 + OpenworldChapterRefreshQuestReq = 4645 + OpenworldChapterRefreshQuestRsp = 4646 + OpenworldChapterAcceptQuestReq = 4647 + OpenworldChapterAcceptQuestRsp = 4648 + OpenworldChapterFinishQuestReq = 4649 + OpenworldChapterFinishQuestRsp = 4650 + OpenworldChapterTakeQuestRewardReq = 4651 + OpenworldChapterTakeQuestRewardRsp = 4652 + OpenworldChapterFurnaceStartWorkReq = 4653 + OpenworldChapterFurnaceStartWorkRsp = 4654 + OpenworldChapterFurnaceCancelWorkReq = 4655 + OpenworldChapterFurnaceCancelWorkRsp = 4656 + OpenworldChapterFurnaceAccelerateWorkReq = 4657 + OpenworldChapterFurnaceAccelerateWorkRsp = 4658 + TakeOpenworldChapterFurnaceWorkRewardReq = 4659 + TakeOpenworldChapterFurnaceWorkRewardRsp = 4660 + OpenworldChapterLevelUpTalentReq = 4661 + OpenworldChapterLevelUpTalentRsp = 4662 + OpenworldChapterActiveTalentReq = 4663 + OpenworldChapterActiveTalentRsp = 4664 + OpenworldChapterDigSiteStartReq = 4665 + OpenworldChapterDigSiteStartRsp = 4666 + OpenworldChapterDigSiteCancelReq = 4667 + OpenworldChapterDigSiteCancelRsp = 4668 + OpenworldChapterDigSiteTakeRewardReq = 4669 + OpenworldChapterDigSiteTakeRewardRsp = 4670 + OpenworldChapterDigSiteAccelerateReq = 4671 + OpenworldChapterDigSiteAccelerateRsp = 4672 + OpenworldChapterMoonChallengeTowerGetDataReq = 4673 + OpenworldChapterMoonChallengeTowerGetDataRsp = 4674 + OpenworldChapterMoonChallengeTowerBattleBeginReq = 4675 + OpenworldChapterMoonChallengeTowerBattleBeginRsp = 4676 + OpenworldChapterMoonChallengeTowerBattleEndReq = 4677 + OpenworldChapterMoonChallengeTowerBattleEndRsp = 4678 + OpenworldChapterMoonChallengeTowerSweepReq = 4679 + OpenworldChapterMoonChallengeTowerSweepRsp = 4680 + OpenworldChapterMoonChallengeTowerGetRankReq = 4681 + OpenworldChapterMoonChallengeTowerGetRankRsp = 4682 + OpenworldChapterMoonRelicsChangeReq = 4687 + OpenworldChapterMoonRelicsChangeRsp = 4688 + OpenworldChapterQTEMapEndReq = 4683 + OpenworldChapterQTEMapEndRsp = 4684 + OpenworldChapterReportDropItemReq = 4685 + OpenworldChapterReportDropItemRsp = 4686 + OpenworldChapterGetAntiGravityDataReq = 4689 + OpenworldChapterGetAntiGravityDataRsp = 4690 + PjmsEnterWorldReq = 7700 + PjmsEnterWorldRsp = 7701 + PjmsGetCurWorldReq = 7702 + PjmsGetCurWorldRsp = 7703 + PjmsGetMainDataReq = 7706 + PjmsGetMainDataRsp = 7707 + PjmsGetStoryDataReq = 7708 + PjmsGetStoryDataRsp = 7709 + PjmsUpdateStoryProgressNotify = 7714 + PjmsSyncMapInfoNotify = 7719 + PjmsUpdateEntityNotify = 7720 + PjmsUpdateStoryProgressReq = 7725 + PjmsUpdateStoryProgressRsp = 7726 + PjmsKillMonsterReq = 7727 + PjmsKillMonsterRsp = 7728 + PjmsChangeGadgetStateReq = 7729 + PjmsChangeGadgetStateRsp = 7730 + PjmsActiveGroupReq = 7731 + PjmsActiveGroupRsp = 7732 + PjmsActiveEntityReq = 7733 + PjmsActiveEntityRsp = 7734 + PjmsSetWorldTimeReq = 7735 + PjmsSetWorldTimeRsp = 7736 + PjmsCommonDropNotify = 7737 + PjmsChangeChapterReq = 7738 + PjmsChangeChapterRsp = 7739 + PjmsSetCurAvatarReq = 7740 + PjmsSetCurAvatarRsp = 7741 + PjmsUpdateFormationReq = 7742 + PjmsUpdateFormationRsp = 7743 + PjmsUpdateAvatarStatusReq = 7744 + PjmsUpdateAvatarStatusRsp = 7745 + PjmsGetAvatarStatusReq = 7746 + PjmsGetAvatarStatusRsp = 7747 + PjmsUpdateChapterNotify = 7756 + PjmsLevelUpTalentReq = 7757 + PjmsLevelUpTalentRsp = 7758 + PjmsSetNameReq = 7761 + PjmsSetNameRsp = 7762 + PjmsSetGenderReq = 7763 + PjmsSetGenderRsp = 7764 + PjmsGetUnitInfoReq = 7765 + PjmsGetUnitInfoRsp = 7766 + PjmsLevelUpCoreUnitReq = 7767 + PjmsLevelUpCoreUnitRsp = 7768 + PjmsLevelUpAuxiliaryUnitReq = 7769 + PjmsLevelUpAuxiliaryUnitRsp = 7770 + PjmsUnitSetChangeNotify = 7771 + PjmsSetCurUnitSetReq = 7773 + PjmsSetCurUnitSetRsp = 7774 + PjmsChangeUnitSetSlotReq = 7775 + PjmsChangeUnitSetSlotRsp = 7776 + PjmsUnitChangeNotify = 7777 + PjmsChangeBgmReq = 7778 + PjmsChangeBgmRsp = 7779 + PjmsTakeChapterRewardReq = 7780 + PjmsTakeChapterRewardRsp = 7781 + PjmsDisjoinAuxiliaryUnitReq = 7782 + PjmsDisjoinAuxiliaryUnitRsp = 7783 + PjmsGetResidentStageDataReq = 7784 + PjmsGetResidentStageDataRsp = 7785 + PjmsGetExploreScoreReq = 7786 + PjmsGetExploreScoreRsp = 7787 + PjmsGetHomeDataReq = 7788 + PjmsGetHomeDataRsp = 7789 + PjmsGetAchievementDataReq = 7790 + PjmsGetAchievementDataRsp = 7791 + PjmsTakeAchievementPlatinumRewardReq = 7792 + PjmsTakeAchievementPlatinumRewardRsp = 7793 + PjmsTakeChapterLevelRewardReq = 7796 + PjmsTakeChapterLevelRewardRsp = 7797 + PjmsRefreshGroupReq = 7800 + PjmsRefreshGroupRsp = 7801 + PjmsSetAuxiliaryUnitLockStatusReq = 7794 + PjmsSetAuxiliaryUnitLockStatusRsp = 7795 + PjmsReviveAvatarReq = 7798 + PjmsReviveAvatarRsp = 7799 + PjmsFinishConsumeMaterialStoryReq = 7802 + PjmsFinishConsumeMaterialStoryRsp = 7803 + PjmsStoryStatusNotify = 7804 + PjmsChangeNpcStateReq = 7805 + PjmsChangeNpcStateRsp = 7806 + PjmsAddShadowLakeEnergyReq = 7807 + PjmsAddShadowLakeEnergyRsp = 7808 + PjmsSubShadowLakeEnergyReq = 7809 + PjmsSubShadowLakeEnergyRsp = 7810 + PjmsShadowLakeNotify = 7811 + PjmsGetChapterDataReq = 7812 + PjmsGetChapterDataRsp = 7813 + PjmsGetActivityPanelReq = 7814 + PjmsGetActivityPanelRsp = 7815 + PjmsResidentStageGetRankReq = 7816 + PjmsResidentStageGetRankRsp = 7817 + PjmsGetRecoveryRecordReq = 7818 + PjmsGetRecoveryRecordRsp = 7819 + PjmsRecordRecoveryActionReq = 7820 + PjmsRecordRecoveryActionRsp = 7821 + PjmsGetConditionDataReq = 7822 + PjmsGetConditionDataRsp = 7823 + PjmsChapterTrackStorySeriesReq = 7826 + PjmsChapterTrackStorySeriesRsp = 7827 + PjmsLeaveCurWorldReq = 7828 + PjmsLeaveCurWorldRsp = 7829 + PjmsChapterActiveEcologyTalkReq = 7830 + PjmsChapterActiveEcologyTalkRsp = 7831 + PjmsTrackStorySeriesReq = 7834 + PjmsTrackStorySeriesRsp = 7835 + PjmsSkipStoryReq = 7836 + PjmsSkipStoryRsp = 7837 + PlatformShooterGetActivityReq = 6950 + PlatformShooterGetActivityRsp = 6951 + PlatformShooterQAvatarLevelUpReq = 6952 + PlatformShooterQAvatarLevelUpRsp = 6953 + PlatformShooterWeaponPoolGetDisplayReq = 6954 + PlatformShooterWeaponPoolGetDisplayRsp = 6955 + PlatformShooterWeaponPoolGachaReq = 6956 + PlatformShooterWeaponPoolGachaRsp = 6957 + PlatformShooterWeaponAffixRefineReq = 6958 + PlatformShooterWeaponAffixRefineRsp = 6959 + PlatformShooterWeaponAffixConfirmReq = 6960 + PlatformShooterWeaponAffixConfirmRsp = 6961 + PlatformShooterGetRankReq = 6962 + PlatformShooterGetRankRsp = 6963 + PvzGetActivityReq = 6550 + PvzGetActivityRsp = 6551 + PvzBattleBeginReq = 6552 + PvzBattleBeginRsp = 6553 + PvzBattleEndReq = 6554 + PvzBattleEndRsp = 6555 + PvzQAvatarLevelUpReq = 6556 + PvzQAvatarLevelUpRsp = 6557 + QAvatarBattleBeginNotify = 5550 + QAvatarBattleSettleNotify = 5551 + QAvatarBattleGetLobbyInfoReq = 5552 + QAvatarBattleGetLobbyInfoRsp = 5553 + QAvatarBattleDataNotify = 5600 + QAvatarBattleEnterBattleReq = 5601 + QAvatarBattleEnterBattleRsp = 5602 + QAvatarBattleMoveNotify = 5603 + QAvatarBattleEndBattleNotify = 5630 + QAvatarBattleStartSkillReq = 5604 + QAvatarBattleStartSkillRsp = 5605 + QAvatarBattleStartSkillNotify = 5606 + QAvatarBattleEndSkillReq = 5607 + QAvatarBattleEndSkillRsp = 5608 + QAvatarBattleEndSkillNotify = 5609 + QAvatarBattleSkillTriggerNotify = 5610 + QAvatarBattleComponentOpNotify = 5611 + QAvatarBattleDiscardStigmataReq = 5612 + QAvatarBattleDiscardStigmataRsp = 5613 + QAvatarBattleGetDataNotify = 5614 + QAvatarBattleKillNotify = 5621 + QAvatarBattleRefreshGadgetForecastNotify = 5622 + QAvatarBattleRefreshGadgetGenerateNotify = 5623 + QCandyBattleGetActivityReq = 6601 + QCandyBattleGetActivityRsp = 6602 + QCandyBattleBeginNotify = 6603 + QCandyBattleChooseAvatarReq = 6604 + QCandyBattleChooseAvatarRsp = 6605 + QCandyBattleUnlockAvatarReq = 6606 + QCandyBattleUnlockAvatarRsp = 6607 + QCandyBattleSettleBattleNotify = 6608 + QCandyBattleEnterBattleReq = 6570 + QCandyBattleEnterBattleRsp = 6571 + QCandyBattleDataNotify = 6572 + QCandyBattleEndNotify = 6573 + QCandyBattleMoveNotify = 6574 + QCandyBattleTriggerEntityReq = 6580 + QCandyBattleTriggerEntityRsp = 6581 + QCandyBattleAvatarLifeTimesChangeNotify = 6582 + QCandyBattleArriveReq = 6583 + QCandyBattleArriveRsp = 6584 + QCandyBattleUseSkillReq = 6585 + QCandyBattleUseSkillRsp = 6586 + QCandyBattleUseSkillNotify = 6587 + QCandyBattleAvatarStateClientNotify = 6588 + QCandyBattleAvatarStateServerNotify = 6589 + QCandyBattleSkillEndNotify = 6590 + QCandyBattleFinishBattleNotify = 6591 + QCandyBattleLeaveBattleReq = 6592 + QCandyBattleLeaveBattleRsp = 6593 + QCandyBattleLeaveBattleNotify = 6594 + QCandyBattleStartTimeLineNotify = 6595 + QCandyBattleSkillUseTimesChangeNotify = 6596 + QCandyBattleSendEmojiReq = 6597 + QCandyBattleSendEmojiRsp = 6598 + QCandyBattleSendEmojiNotify = 6599 + QCandyBattleSyncAbilityNotify = 6600 + QCandyBattleMemoryRoundEndReq = 6622 + QCandyBattleMemoryRoundEndRsp = 6623 + RaidReplaceGetDataReq = 8100 + RaidReplaceGetDataRsp = 8101 + RaidReplaceTakeRewardLineRewardReq = 8102 + RaidReplaceTakeRewardLineRewardRsp = 8103 + RaidReplaceTakeSpecialRewardReq = 8104 + RaidReplaceTakeSpecialRewardRsp = 8105 + GetRoomDataReq = 3150 + GetRoomDataRsp = 3151 + SyncRoomDataNotify = 3152 + CreateRoomReq = 3153 + CreateRoomRsp = 3154 + EnterRoomReq = 3155 + EnterRoomRsp = 3156 + ExitRoomReq = 3157 + ExitRoomRsp = 3158 + ExitRoomNotify = 3159 + InviteRoomReq = 3160 + InviteRoomRsp = 3161 + RoomInvitationNotify = 3162 + SendRoomChatMsgNotify = 3163 + RecvRoomChatMsgNotify = 3164 + StartRoomMatchReq = 3165 + StartRoomMatchRsp = 3166 + CancelRoomMatchReq = 3167 + CancelRoomMatchRsp = 3168 + SyncRoomMatchDataNotify = 3169 + RoomMatchTimeoutNotify = 3170 + UpdateRoomInfoReq = 3171 + UpdateRoomInfoRsp = 3172 + RoomSwitchMemberStatusReq = 3173 + RoomSwitchMemberStatusRsp = 3174 + RoomKickMemberReq = 3175 + RoomKickMemberRsp = 3176 + RoomTransferLeaderReq = 3177 + RoomTransferLeaderRsp = 3178 + RoomMemberSetVoiceIdReq = 3179 + RoomMemberSetVoiceIdRsp = 3180 + RoomGetStatusReq = 3181 + RoomGetStatusRsp = 3182 + DismissRoomReq = 3183 + DismissRoomRsp = 3184 + RpgDungeonGetActivityReq = 5500 + RpgDungeonGetActivityRsp = 5501 + RpgDungeonSelectQuestReq = 5502 + RpgDungeonSelectQuestRsp = 5503 + RpgDungeonGetCandidateBuffReq = 5504 + RpgDungeonGetCandidateBuffRsp = 5505 + RpgDungeonSelectBuffReq = 5506 + RpgDungeonSelectBuffRsp = 5507 + GetRpgTaleReq = 2300 + GetRpgTaleRsp = 2301 + SyncRpgTaleSiteNotify = 2302 + EnterRpgTaleSiteReq = 2303 + EnterRpgTaleSiteRsp = 2304 + FinishRpgTalePlotReq = 2305 + FinishRpgTalePlotRsp = 2306 + UnlockRpgTaleSiteReq = 2307 + UnlockRpgTaleSiteRsp = 2308 + TakeRpgTaleCollectionRewardReq = 2309 + TakeRpgTaleCollectionRewardRsp = 2310 + RpgTaleEventNotify = 2312 + TriggerRpgTaleEventReq = 2313 + TriggerRpgTaleEventRsp = 2314 + CheckRpgTaleStageTriggerReq = 2315 + CheckRpgTaleStageTriggerRsp = 2316 + TriggerRpgTaleStageEventReq = 2317 + TriggerRpgTaleStageEventRsp = 2318 + GetMatrixReq = 2320 + GetMatrixRsp = 2321 + GetMatrixFloorReq = 2322 + GetMatrixFloorRsp = 2323 + MatrixEnterReq = 2324 + MatrixEnterRsp = 2325 + MatrixAdvanceReq = 2326 + MatrixAdvanceRsp = 2327 + SyncMatrixFloorNotify = 2328 + SyncMatrixNotify = 2329 + MatrixTriggerEventReq = 2330 + MatrixTriggerEventRsp = 2331 + MatrixCancelEventReq = 2332 + MatrixCancelEventRsp = 2333 + SyncMatrixCurEventNotify = 2334 + MatrixEventFinishNotify = 2335 + FinishMatrixEventPlotReq = 2336 + FinishMatrixEventPlotRsp = 2337 + MatrixTeleportNotify = 2338 + MatrixMoveObjectReq = 2339 + MatrixMoveObjectRsp = 2340 + MatrixResetFloorReq = 2341 + MatrixResetFloorRsp = 2342 + MatrixSettleFloorEventReq = 2343 + MatrixSettleFloorEventRsp = 2344 + MatrixThrowDiceReq = 2345 + MatrixThrowDiceRsp = 2346 + MatrixSetDiceDestinationReq = 2347 + MatrixSetDiceDestinationRsp = 2348 + MatrixGuessFingerReq = 2349 + MatrixGuessFingerRsp = 2350 + MatrixSetLotteryNumReq = 2351 + MatrixSetLotteryNumRsp = 2352 + MatrixLotteryDrawNotify = 2353 + FinishRpgTaleStagePlotReq = 2370 + FinishRpgTaleStagePlotRsp = 2371 + ReportRpgTaleStageReq = 2374 + ReportRpgTaleStageRsp = 2375 + RpgTaleSweepReq = 2376 + RpgTaleSweepRsp = 2377 + GetRpgTaleFileReq = 2378 + GetRpgTaleFileRsp = 2379 + RpgTaleRefreshTicketReq = 2380 + RpgTaleRefreshTicketRsp = 2381 + RpgTaleLevelUpAbilityReq = 2382 + RpgTaleLevelUpAbilityRsp = 2383 + RpgTaleResetTowerReq = 2384 + RpgTaleResetTowerRsp = 2385 + RpgTaleSetOverallReq = 2386 + RpgTaleSetOverallRsp = 2387 + RpgTaleRefreshSiteReq = 2388 + RpgTaleRefreshSiteRsp = 2389 + RpgTaleSetPvpVirtualAvatarReq = 2390 + RpgTaleSetPvpVirtualAvatarRsp = 2391 + RpgTaleGetPvpDivisionRewardReq = 2392 + RpgTaleGetPvpDivisionRewardRsp = 2393 + RpgTaleGetStageScoreRankReq = 2394 + RpgTaleGetStageScoreRankRsp = 2395 + RpgTaleFinishMissionGroupNotify = 2396 + GetScDLCReq = 6300 + GetScDLCRsp = 6301 + UpdateScDLCFeverSuiteReq = 6304 + UpdateScDLCFeverSuiteRsp = 6305 + ActiveScDLCFeverSuiteReq = 6306 + ActiveScDLCFeverSuiteRsp = 6307 + AddScDLCSupportNPCExpReq = 6308 + AddScDLCSupportNPCExpRsp = 6309 + LevelUpScDLCAvatarReq = 6310 + LevelUpScDLCAvatarRsp = 6311 + LevelUpScDLCTalentReq = 6312 + LevelUpScDLCTalentRsp = 6313 + EquipScDLCAvatarTalentReq = 6314 + EquipScDLCAvatarTalentRsp = 6315 + GetScDLCSelectDailyQuestReq = 6316 + GetScDLCSelectDailyQuestRsp = 6317 + RefreshScDLCDailyQuestReq = 6318 + RefreshScDLCDailyQuestRsp = 6319 + AcceptScDLCDailyQuestReq = 6320 + AcceptScDLCDailyQuestRsp = 6321 + FinishScDLCDailyQuestReq = 6322 + FinishScDLCDailyQuestRsp = 6323 + TakeScDLCDailyQuestRewardReq = 6324 + TakeScDLCDailyQuestRewardRsp = 6325 + ModifyScDLCNameReq = 6326 + ModifyScDLCNameRsp = 6327 + TakeScDLCChallengeRewardReq = 6328 + TakeScDLCChallengeRewardRsp = 6329 + FinishScDLCPlotReq = 6330 + FinishScDLCPlotRsp = 6331 + GetScDLCTowerReq = 6332 + GetScDLCTowerRsp = 6333 + ScDLCTowerStageBeginReq = 6334 + ScDLCTowerStageBeginRsp = 6335 + ScDLCTowerStageEndReq = 6336 + ScDLCTowerStageEndRsp = 6337 + GetScDLCTowerRankReq = 6338 + GetScDLCTowerRankRsp = 6339 + ScDLCTowerScheduleRewardNotify = 6340 + ScDLCReviveAvatarReq = 6341 + ScDLCReviveAvatarRsp = 6342 + ScDLCTowerReviveAvatarReq = 6343 + ScDLCTowerReviveAvatarRsp = 6344 + ScDLCActiveFeverAbilityReq = 6345 + ScDLCActiveFeverAbilityRsp = 6346 + ScDLCSweepTowerReq = 6347 + ScDLCSweepTowerRsp = 6348 + UpdateClientSettingNotify = 5002 + CommonCdCheckNotify = 5003 + AntiAddictNotify = 5004 + SensitiveWordCheckReq = 5005 + SensitiveWordCheckRsp = 5006 + KickOutPlayerNotify = 5007 + ClientReportReq = 5008 + ClientReportRsp = 5009 + GetAuthkeyReq = 5010 + GetAuthkeyRsp = 5011 + ClientReportBinReq = 5012 + ClientReportBinRsp = 5013 + NetTestReq = 5014 + NetTestRsp = 5015 + GetSecurityPasswordReq = 5021 + GetSecurityPasswordRsp = 5022 + SetSecurityPasswordReq = 5023 + SetSecurityPasswordRsp = 5024 + ChangeSecurityPasswordReq = 5025 + ChangeSecurityPasswordRsp = 5026 + UnlockDeviceSecurityPasswordReq = 5027 + UnlockDeviceSecurityPasswordRsp = 5028 + SecurityPasswordOpReq = 5029 + SecurityPasswordOpRsp = 5030 + ResetSecurityPasswordReq = 5031 + ResetSecurityPasswordRsp = 5032 + SecurityPasswordRejectionNotify = 5033 + GetShopListReq = 6700 + GetShopListRsp = 6701 + GetShoppingMallListReq = 6702 + GetShoppingMallListRsp = 6703 + GetSingleShopWithoutRefreshReq = 6704 + GetSingleShopWithoutRefreshRsp = 6705 + GetProductListReq = 6706 + GetProductListRsp = 6707 + ManualRefreshShopReq = 6708 + ManualRefreshShopRsp = 6709 + GetRecommendGoodsReq = 6710 + GetRecommendGoodsRsp = 6711 + BuyGoodsReq = 6714 + BuyGoodsRsp = 6715 + GlobalShopGoodsInfoNotify = 6716 + GetVipRewardDataReq = 6717 + GetVipRewardDataRsp = 6718 + GetVipRewardReq = 6719 + GetVipRewardRsp = 6720 + GetCardProductInfoReq = 6721 + GetCardProductInfoRsp = 6722 + TakeCardProductDailyRewardReq = 6723 + TakeCardProductDailyRewardRsp = 6724 + TakeCardProductBonusRewardReq = 6725 + TakeCardProductBonusRewardRsp = 6726 + TakeFoundationRewardReq = 6727 + TakeFoundationRewardRsp = 6728 + GetProductRecommendListReq = 6729 + GetProductRecommendListRsp = 6730 + BuyProductReq = 6731 + BuyProductRsp = 6732 + ExchangeHcoinByMcoinReq = 6733 + ExchangeHcoinByMcoinRsp = 6734 + GetMyCardAuthCodeReq = 6739 + GetMyCardAuthCodeRsp = 6740 + VerifyMyCardOrderNotify = 6741 + RechargeFinishNotify = 6742 + ReportClickRechargeButtonNotify = 6743 + GlobalShopGoodsGetBuyOrderReq = 6744 + GlobalShopGoodsGetBuyOrderRsp = 6745 + SimplifiedGodWarGetActivityReq = 8250 + SimplifiedGodWarGetActivityRsp = 8251 + SimplifiedGodWarSelectChallengeAvatarReq = 8252 + SimplifiedGodWarSelectChallengeAvatarRsp = 8253 + SimplifiedGodWarResetChallengeReq = 8254 + SimplifiedGodWarResetChallengeRsp = 8255 + SimplifiedGodWarGetBuffReq = 8256 + SimplifiedGodWarGetBuffRsp = 8257 + SimplifiedGodWarSelectBuffReq = 8258 + SimplifiedGodWarSelectBuffRsp = 8259 + SimplifiedGodWarGetAssistRoleReq = 8260 + SimplifiedGodWarGetAssistRoleRsp = 8261 + SimplifiedGodWarSelectAssistRoleReq = 8262 + SimplifiedGodWarSelectAssistRoleRsp = 8263 + SimplifiedGodWarEnterSiteReq = 8264 + SimplifiedGodWarEnterSiteRsp = 8265 + SlgGetDataReq = 6050 + SlgGetDataRsp = 6051 + SlgPointSweepReq = 6052 + SlgPointSweepRsp = 6053 + SlgBattleMatchRsp = 6054 + SlgEnrollReq = 6055 + SlgEnrollRsp = 6056 + SlgGetActivityStaminaReq = 6057 + SlgGetActivityStaminaRsp = 6058 + SlgTakeScoreRewardReq = 6059 + SlgTakeScoreRewardRsp = 6060 + SlgBattleAddScoreFailNotify = 6061 + SlgGetBattleRankReq = 6062 + SlgGetBattleRankRsp = 6063 + SlgGetPointRankReq = 6064 + SlgGetPointRankRsp = 6065 + SlgBattleSettleNotify = 6066 + SlgBroadcastNotify = 6068 + SlgMainPageReq = 6069 + SlgBattleInSettleNotify = 6070 + SlgGetBriefRankReq = 6071 + SlgGetBriefRankRsp = 6072 + SwitchDataNotify = 3700 + SwitchChangeDataNotify = 3701 + CheckExtraStoryLockedAvatarBindEquipReq = 1000 + CheckExtraStoryLockedAvatarBindEquipRsp = 1001 + SwitchExtraStoryLockedAvatarBindEquipReq = 1002 + SwitchExtraStoryLockedAvatarBindEquipRsp = 1003 + TakeDormLikesDropReq = 1008 + TakeDormLikesDropRsp = 1009 + CheckDormLikesDropReq = 1010 + CheckDormLikesDropRsp = 1011 + GetWorldMapDataReq = 1012 + GetWorldMapDataRsp = 1013 + GetMpStageRecordReq = 1018 + GetMpStageRecordRsp = 1019 + LobbySetClientStatusReq = 1026 + LobbySetClientStatusRsp = 1027 + LobbyPrepareCountDownNotify = 1028 + MpStageVoteCountDownNotify = 1029 + MpStageVoteReq = 1030 + MpStageVoteRsp = 1031 + MpStageVoteResultNotify = 1032 + LobbyTimeoutNoLeaderNotify = 1033 + TakeWeekDayActivityReturnCoinReq = 1034 + TakeWeekDayActivityReturnCoinRsp = 1035 + MpStageGetVoteInfoReq = 1036 + MpStageGetVoteInfoRsp = 1037 + MpStageMemberVoteNotify = 1038 + SwitchExtraStoryLineEnhanceReq = 1039 + SwitchExtraStoryLineEnhanceRsp = 1040 + GetChallengeStepBonusReq = 1043 + GetChallengeStepBonusRsp = 1044 + MpLeaveTeamNotify = 1101 + GetLobbyStatReq = 1102 + GetLobbyStatRsp = 1103 + DisjoinFurnitureReq = 1134 + DisjoinFurnitureRsp = 1135 + ChatReportReq = 1150 + ChatReportRsp = 1151 + ChatReportNotify = 1152 + ChatUnforbidNotify = 1153 + ChatForbidNotify = 1154 + GetChatReportInfoReq = 1159 + GetChatReportInfoRsp = 1160 + ChatForbidSnsNotify = 1161 + RecoverChatCreditNotify = 1162 + SendChatRedEnvelopeReq = 1163 + SendChatRedEnvelopeRsp = 1164 + TakeChatRedEnvelopeReq = 1165 + TakeChatRedEnvelopeRsp = 1166 + GetPhotoDataReq = 1191 + GetPhotoDataRsp = 1192 + GetWikiDataReq = 1193 + GetWikiDataRsp = 1194 + TakeWikiRatingRewardReq = 1195 + TakeWikiRatingRewardRsp = 1196 + GetPhonePendantDataReq = 1197 + GetPhonePendantDataRsp = 1198 + PhonePendantOpReq = 1199 + PhonePendantOpRsp = 1200 + GetTeamListReq = 1215 + GetTeamListRsp = 1216 + GetEmojiDataReq = 1245 + GetEmojiDataRsp = 1246 + MpFastMatchReq = 1247 + MpFastMatchRsp = 1248 + GetSnsShowDataReq = 1266 + GetSnsShowDataRsp = 1267 + GetClientSettingReq = 1270 + UpdateClientSettingReq = 1271 + GetClientSettingRsp = 1272 + GetOtherPlayerClientSettingReq = 1273 + GetOtherPlayerClientSettingRsp = 1274 + UpdateLobbySettingReq = 1365 + UpdateLobbySettingRsp = 1366 + ExchangePurpleJadeReq = 1367 + ExchangePurpleJadeRsp = 1368 + GetBriefDataListReq = 1374 + GetBriefDataListRsp = 1375 + FinishPlotReq = 1378 + FinishPlotRsp = 1379 + GetRegionUidRangeReq = 1380 + GetRegionUidRangeRsp = 1381 + GetPlotListReq = 1382 + GetPlotListRsp = 1383 + GetFarmActivityDataReq = 1385 + GetFarmActivityDataRsp = 1386 + UnlockFarmSlotReq = 1387 + UnlockFarmSlotRsp = 1388 + StartFarmProduceReq = 1389 + StartFarmProduceRsp = 1390 + FinishFarmProduceReq = 1391 + FinishFarmProduceRsp = 1392 + SpeedUpFarmProduceReq = 1393 + SpeedUpFarmProduceRsp = 1394 + FarmActivityNotify = 1395 + AvatarArtifactUnlockReq = 1444 + AvatarArtifactUnlockRsp = 1445 + AvatarArtifactLevelUpReq = 1446 + AvatarArtifactLevelUpRsp = 1447 + TakeGobackScoreRewardReq = 1448 + TakeGobackScoreRewardRsp = 1449 + GetAvatarEquipSuiteReq = 1454 + GetAvatarEquipSuiteRsp = 1455 + SetAvatarEquipSuiteReq = 1456 + SetAvatarEquipSuiteRsp = 1457 + SelectAvatarEquipSuiteReq = 1458 + SelectAvatarEquipSuiteRsp = 1459 + RefreshAndSyncMissionNotify = 1473 + GetCurrencyExchangeInfoReq = 1480 + GetCurrencyExchangeInfoRsp = 1481 + SetLevelLockReq = 1488 + SetLevelLockRsp = 1489 + FinishFastPassReq = 1490 + FinishFastPassRsp = 1491 + SetWarshipAvatarReq = 1492 + SetWarshipAvatarRsp = 1493 + CreateAlipayOrderReq = 1494 + CreateAlipayOrderRsp = 1495 + SubscriptionStatusNotify = 1496 + GetChatRedEnvelopeInfoReq = 1502 + GetChatRedEnvelopeInfoRsp = 1503 + WantedMirrorRecoveryReq = 1517 + WantedMirrorRecoveryRsp = 1518 + GetRecommendMissionPanelListReq = 1519 + GetRecommendMissionPanelListRsp = 1520 + GetCustomHeadDataReq = 1523 + GetCustomHeadDataRsp = 1524 + SetCustomHeadReq = 1525 + SetCustomHeadRsp = 1526 + GetStageBuffReq = 1528 + GetStageBuffRsp = 1529 + ChooseStageBuffReq = 1530 + ChooseStageBuffRsp = 1531 + TriggerRecommendGoodsNotify = 1538 + ConfirmRecommendGoodsReq = 1539 + ConfirmRecommendGoodsRsp = 1540 + GetStageRecommendAvatarReq = 1541 + GetStageRecommendAvatarRsp = 1542 + SendDanmakuReq = 1543 + SendDanmakuRsp = 1544 + GetDanmakuListReq = 1545 + GetDanmakuListRsp = 1546 + GetDanmakuBriefInfoReq = 1547 + GetDanmakuBriefInfoRsp = 1548 + ImpeachDanmakuReq = 1549 + ImpeachDanmakuRsp = 1550 + DanmakuBlacklistNotify = 1551 + GetTeamStatusReq = 1553 + GetTeamStatusRsp = 1554 + GetFastPassDataReq = 1555 + GetFastPassDataRsp = 1556 + GetPlayerOnlineStatusReq = 1576 + GetPlayerOnlineStatusRsp = 1577 + MpSyncActionFromPlayerNotify = 1579 + MpSyncActionFromServerNotify = 1580 + VerifySamSungOrderNotify = 1581 + GetClientDataReq = 1586 + GetClientDataRsp = 1587 + SetClientDataReq = 1588 + SetClientDataRsp = 1589 + WikiTakeActivitySuitRewardReq = 1592 + WikiTakeActivitySuitRewardRsp = 1593 + GetBlackListReq = 1594 + GetBlackListRsp = 1595 + AddToBlackListReq = 1596 + AddToBlackListRsp = 1597 + DelFromBlackListReq = 1598 + DelFromBlackListRsp = 1599 + DebugHotPatchFileNotify = 1600 + GetWebActivityInfoReq = 1601 + GetWebActivityInfoRsp = 1602 + GetMiniRankReq = 1603 + GetMiniRankRsp = 1604 + ChargeActivityBuffReq = 1605 + ChargeActivityBuffRsp = 1606 + LoginWishGetMainDataReq = 1607 + LoginWishGetMainDataRsp = 1608 + LoginWishTakeLoginRewardReq = 1609 + LoginWishTakeLoginRewardRsp = 1610 + LoginWishTakeSpecialRewardReq = 1611 + LoginWishTakeSpecialRewardRsp = 1612 + LoginWishMakeWishReq = 1613 + LoginWishMakeWishRsp = 1614 + LoginWishTakeWishRewardReq = 1615 + LoginWishTakeWishRewardRsp = 1616 + DevLevelChangeNotify = 1619 + DelAvatarEquipSuiteReq = 1620 + DelAvatarEquipSuiteRsp = 1621 + ClientCheckNetworkEnvReq = 1626 + ClientCheckNetworkEnvRsp = 1627 + GetStageRecommendAvatarCourseInfoReq = 1630 + GetStageRecommendAvatarCourseInfoRsp = 1631 + GetMissionStepCompensationInfoReq = 1632 + GetMissionStepCompensationInfoRsp = 1633 + TakeMissionStepCompensationReq = 1634 + TakeMissionStepCompensationRsp = 1635 + GetEliteChapterCompensationInfoReq = 1636 + GetEliteChapterCompensationInfoRsp = 1637 + TakeEliteChapterCompensationReq = 1638 + TakeEliteChapterCompensationRsp = 1639 + UnlockPrivilegeReq = 1642 + UnlockPrivilegeRsp = 1643 + MpSetExtraSkillReq = 1644 + MpSetExtraSkillRsp = 1645 + GetPrivilegeInfoReq = 1646 + GetPrivilegeInfoRsp = 1647 + CreateSteamOrderReq = 1648 + CreateSteamOrderRsp = 1649 + VerifySteamOrderNotify = 1650 + UnlockGobackFundReq = 1651 + UnlockGobackFundRsp = 1652 + TakeGobackFundRewardReq = 1653 + TakeGobackFundRewardRsp = 1654 + ExBossSweepReq = 1655 + ExBossSweepRsp = 1656 + ExBossTakeBossScoreRewardNotify = 1657 + BindHoyolabAccountReq = 1658 + BindHoyolabAccountRsp = 1659 + ChapterGroupGetDataReq = 1660 + ChapterGroupGetDataRsp = 1661 + WeekDayActivitySweepReq = 1664 + WeekDayActivitySweepRsp = 1665 + GetWeekDayActivityCompensationInfoReq = 1666 + GetWeekDayActivityCompensationInfoRsp = 1667 + TakeWeekDayActivityCompensationReq = 1668 + TakeWeekDayActivityCompensationRsp = 1669 + RequestLogoffReq = 1670 + RequestLogoffRsp = 1671 + GetChapterCompensationInfoReq = 1672 + GetChapterCompensationInfoRsp = 1673 + TakeChapterCompensationReq = 1674 + TakeChapterCompensationRsp = 1675 + GetChallengeStepCompensationInfoReq = 1676 + GetChallengeStepCompensationInfoRsp = 1677 + TakeChallengeStepCompensationReq = 1678 + TakeChallengeStepCompensationRsp = 1679 + GetSpecificRankReq = 1684 + GetSpecificRankRsp = 1685 + GetInviteActivityInviterDataReq = 1690 + GetInviteActivityInviterDataRsp = 1691 + TakeInviteActivityInviterProgressRewardReq = 1692 + TakeInviteActivityInviterProgressRewardRsp = 1693 + GetInviteActivityInviteeDataReq = 1694 + GetInviteActivityInviteeDataRsp = 1695 + InviteActivityAcceptInviteReq = 1696 + InviteActivityAcceptInviteRsp = 1697 + GetMainStoryBlessReq = 1703 + GetMainStoryBlessRsp = 1704 + GetMainStoryMemoirsDataReq = 1701 + GetMainStoryMemoirsDataRsp = 1702 + GetActivityMainDataReq = 1705 + GetActivityMainDataRsp = 1706 + SetRedPointStatusNotify = 1707 + ClientResetNotify = 1708 + AddCustomAvatarTeamReq = 1709 + AddCustomAvatarTeamRsp = 1710 + DelCustomAvatarTeamReq = 1711 + DelCustomAvatarTeamRsp = 1712 + GetWorldMapRecommendReq = 1713 + GetWorldMapRecommendRsp = 1714 + UnlockCollectionReq = 1715 + UnlockCollectionRsp = 1716 + GetCollectionListReq = 1717 + GetCollectionListRsp = 1718 + ActivateCollectionReq = 1719 + ActivateCollectionRsp = 1720 + ExchangeAvatarStigmataReq = 1721 + ExchangeAvatarStigmataRsp = 1722 + ChooseSpecialGobackReq = 1723 + ChooseSpecialGobackRsp = 1724 + GobackSpecialBpPurchaseReq = 1725 + GobackSpecialBpPurchaseRsp = 1726 + GobackSpecialBpTakeRewardReq = 1727 + GobackSpecialBpTakeRewardRsp = 1728 + WeaponHomologyReq = 1734 + WeaponHomologyRsp = 1735 + UpdateMultiMissionProgressReq = 1736 + UpdateMultiMissionProgressRsp = 1737 + WeaponLevelUpUseTicketReq = 1738 + WeaponLevelUpUseTicketRsp = 1739 + StigmataLevelUpUseTicketReq = 1740 + StigmataLevelUpUseTicketRsp = 1741 + GetTileMapReq = 4900 + GetTileMapRsp = 4901 + TileUpdateMapReq = 4902 + TileUpdateMapRsp = 4903 + TileGetTowerReq = 4904 + TileGetTowerRsp = 4905 + TileEnterReq = 4906 + TileEnterRsp = 4907 + TileSaveProgressReq = 4908 + TileSaveProgressRsp = 4909 + TileResetFloorReq = 4912 + TileResetFloorRsp = 4913 + TileEntityOpNotify = 4914 + TileSelectPathReq = 4915 + TileSelectPathRsp = 4916 + TileResetRegionReq = 4917 + TileResetRegionRsp = 4918 + TileReportSavedPositionReq = 4919 + TileReportSavedPositionRsp = 4920 + TileLoadSavedPositionReq = 4921 + TileLoadSavedPositionRsp = 4922 + TileMapUpdateNotify = 4923 + TileGetPartialMapAsUpdateReq = 4924 + TileGetPartialMapAsUpdateRsp = 4925 + GetTileMiniMapReq = 4926 + GetTileMiniMapRsp = 4927 + TiledGameFarmGetDataReq = 8000 + TiledGameFarmGetDataRsp = 8001 + TiledGameFarmUseToolReq = 8002 + TiledGameFarmUseToolRsp = 8003 + TiledGameFarmRefreshFarmlandReq = 8004 + TiledGameFarmRefreshFarmlandRsp = 8005 + TiledGameFarmEnterMineFloorReq = 8006 + TiledGameFarmEnterMineFloorRsp = 8007 + TiledGameFarmSynthesisReq = 8008 + TiledGameFarmSynthesisRsp = 8009 + TiledGameFarmTradeReq = 8010 + TiledGameFarmTradeRsp = 8011 + TiledGameFarmBeginFishingNotify = 8012 + TiledGameFarmEndFishingReq = 8013 + TiledGameFarmEndFishingRsp = 8014 + TiledGameFarmGemIdentifyReq = 8015 + TiledGameFarmGemIdentifyRsp = 8016 + TiledGameFarmFillShedFoodReq = 8017 + TiledGameFarmFillShedFoodRsp = 8018 + TiledGameFarmUpgradeFacilityReq = 8019 + TiledGameFarmUpgradeFacilityRsp = 8020 + TiledGameFarmRefreshLivestockShedReq = 8021 + TiledGameFarmRefreshLivestockShedRsp = 8022 + TiledGameFarmTameLivestockReq = 8023 + TiledGameFarmTameLivestockRsp = 8024 + TiledGameFarmHarvestLivestockReq = 8025 + TiledGameFarmHarvestLivestockRsp = 8026 + TiledGameFarmPickItemReq = 8027 + TiledGameFarmPickItemRsp = 8028 + TiledGameFarmUseMealVoucherReq = 8029 + TiledGameFarmUseMealVoucherRsp = 8030 + TiledGameFarmBuyLivestockReq = 8031 + TiledGameFarmBuyLivestockRsp = 8032 + TiledGameFarmGetSelectQuestReq = 8033 + TiledGameFarmGetSelectQuestRsp = 8034 + TiledGameFarmChooseQuestReq = 8035 + TiledGameFarmChooseQuestRsp = 8036 + TiledGameFarmFinishQuestReq = 8037 + TiledGameFarmFinishQuestRsp = 8038 + TiledGameFarmSuperFishingReq = 8039 + TiledGameFarmSuperFishingRsp = 8040 + TiledGameMonsterFarmGetDataReq = 8300 + TiledGameMonsterFarmGetDataRsp = 8301 + TiledGameMonsterFarmUseToolReq = 8304 + TiledGameMonsterFarmUseToolRsp = 8305 + TiledGameMonsterFarmRefreshFarmlandReq = 8306 + TiledGameMonsterFarmRefreshFarmlandRsp = 8307 + TiledGameMonsterFarmEnterMineFloorReq = 8308 + TiledGameMonsterFarmEnterMineFloorRsp = 8309 + TiledGameMonsterFarmTradeReq = 8310 + TiledGameMonsterFarmTradeRsp = 8311 + TiledGameMonsterFarmBeginFishingNotify = 8312 + TiledGameMonsterFarmEndFishingReq = 8313 + TiledGameMonsterFarmEndFishingRsp = 8314 + TiledGameMonsterFarmGetQuestReq = 8315 + TiledGameMonsterFarmGetQuestRsp = 8316 + TiledGameMonsterFarmChooseQuestReq = 8317 + TiledGameMonsterFarmChooseQuestRsp = 8318 + TiledGameMonsterFarmFinishQuestReq = 8319 + TiledGameMonsterFarmFinishQuestRsp = 8320 + TiledGameMonsterFarmUseMealVoucherReq = 8321 + TiledGameMonsterFarmUseMealVoucherRsp = 8322 + TiledGameMonsterFarmPickItemReq = 8323 + TiledGameMonsterFarmPickItemRsp = 8324 + TiledGameMonsterFarmLevelUpReq = 8325 + TiledGameMonsterFarmLevelUpRsp = 8326 + TiledGameMonsterFarmUpgradeBuildingReq = 8327 + TiledGameMonsterFarmUpgradeBuildingRsp = 8328 + TiledGameMonsterFarmManipulateMonsterReq = 8329 + TiledGameMonsterFarmManipulateMonsterRsp = 8330 + TiledGameMonsterFarmRefreshBuildingReq = 8331 + TiledGameMonsterFarmRefreshBuildingRsp = 8332 + TiledGameMonsterFarmIncubateReq = 8333 + TiledGameMonsterFarmIncubateRsp = 8334 + TiledGameMonsterFarmSetProduceLineReq = 8335 + TiledGameMonsterFarmSetProduceLineRsp = 8336 + TiledGameMonsterFarmDropMonsterReq = 8337 + TiledGameMonsterFarmDropMonsterRsp = 8338 + TiledGameMonsterFarmTakeBuildingProductReq = 8339 + TiledGameMonsterFarmTakeBuildingProductRsp = 8340 + TiledGameMonsterFarmSetBuildingProduceTargetReq = 8341 + TiledGameMonsterFarmSetBuildingProduceTargetRsp = 8342 + TiledGameMonsterFarmGetBusinessReportReq = 8343 + TiledGameMonsterFarmGetBusinessReportRsp = 8344 + TiledGameMonsterFarmGetRankReq = 8345 + TiledGameMonsterFarmGetRankRsp = 8346 + TiledGamePrpgGetDataReq = 8450 + TiledGamePrpgGetDataRsp = 8451 + TiledGamePrpgPvpBattleBeginNotify = 8452 + TiledGamePrpgPvpBattleSettleNotify = 8453 + TiledGamePrpgPvpEnterBattleReq = 8454 + TiledGamePrpgPvpEnterBattleRsp = 8455 + TiledGamePrpgPvpAbandonBattleReq = 8456 + TiledGamePrpgPvpAbandonBattleRsp = 8457 + TiledGamePrpgPvpGetBattleInfoReq = 8458 + TiledGamePrpgPvpGetBattleInfoRsp = 8459 + TiledGamePrpgPvpMoveCardReq = 8460 + TiledGamePrpgPvpMoveCardRsp = 8461 + TiledGamePrpgPvpExchangeCardReq = 8462 + TiledGamePrpgPvpExchangeCardRsp = 8463 + TiledGamePrpgPvpEndRoundReq = 8464 + TiledGamePrpgPvpEndRoundRsp = 8465 + TiledGamePrpgPvpSyncRoundNotify = 8466 + TiledGamePrpgPvpBattleEndNotify = 8467 + TiledGamePrpgPvpSetCardBackReq = 8468 + TiledGamePrpgPvpSetCardBackRsp = 8469 + TiledGamePrpgUnlockSkillReq = 8470 + TiledGamePrpgUnlockSkillRsp = 8471 + TiledGamePrpgLevelUpCardReq = 8472 + TiledGamePrpgLevelUpCardRsp = 8473 + TiledGamePrpgBattleBeginReq = 8474 + TiledGamePrpgBattleBeginRsp = 8475 + TiledGamePrpgBattleEndReq = 8476 + TiledGamePrpgBattleEndRsp = 8477 + TownActivityGetDataReq = 6450 + TownActivityGetDataRsp = 6451 + TownActivitySaveReq = 6452 + TownActivitySaveRsp = 6453 + TownActivityBuildReq = 6454 + TownActivityBuildRsp = 6455 + TownActivityBattleReq = 6456 + TownActivityBattleRsp = 6457 + TownActivitySellBuildingReq = 6458 + TownActivitySellBuildingRsp = 6459 + TownActivityHealAvatarReq = 6460 + TownActivityHealAvatarRsp = 6461 + TownActivitySellBrickReq = 6462 + TownActivitySellBrickRsp = 6463 + TownActivityEndNotify = 6464 + TownActivityBossAttackNotify = 6465 + TownActivityGetShopReq = 6466 + TownActivityGetShopRsp = 6467 + TownActivityShopBuyReq = 6468 + TownActivityShopBuyRsp = 6469 + TownActivityMaterialUseReq = 6470 + TownActivityMaterialUseRsp = 6471 + TownActivitySpeedUpHealReq = 6472 + TownActivitySpeedUpHealRsp = 6473 + TownActivityCheckInOptionalReq = 6474 + TownActivityCheckInOptionalRsp = 6475 + TownActivityResetReq = 6476 + TownActivityResetRsp = 6477 + TownActivityAlterPathReq = 6478 + TownActivityAlterPathRsp = 6479 + TownActivityAttackEnemyBuffNotify = 6480 + TownActivityRefreshBrickReq = 6481 + TownActivityRefreshBrickRsp = 6482 + GetTvtActivityReq = 3300 + GetTvtActivityRsp = 3301 + GetTvtBattleHistoryReq = 3302 + GetTvtBattleHistoryRsp = 3303 + SyncTvtMemberInRoomNotify = 3304 + TvtTakeMissionGroupRewardReq = 3305 + TvtTakeMissionGroupRewardRsp = 3306 + TvtGetStageScheduleReq = 3307 + TvtGetStageScheduleRsp = 3308 + TvtCardGetDataReq = 3309 + TvtCardGetDataRsp = 3310 + TvtCardLevelUpReq = 3311 + TvtCardLevelUpRsp = 3312 + TvtCardUpdateSuiteReq = 3313 + TvtCardUpdateSuiteRsp = 3314 + TvtCardTakeSeasonReturnReq = 3315 + TvtCardTakeSeasonReturnRsp = 3316 + TvtCardTransformMaterialReq = 3317 + TvtCardTransformMaterialRsp = 3318 + SyncTvtBattleInfoNotify = 3350 + TvtBattleMemberPrepareNotify = 3351 + TvtBattleBeginNotify = 3352 + TvtBattleEndNotify = 3353 + TvtBattleSettleNotify = 3354 + ReportTvtBattleStageMessageNotify = 3355 + SyncTvtBattleStageMessageNotify = 3356 + ExitTvtBattleNotify = 3357 + TvtBattleClientReportNotify = 3358 + TvtEnterShopReq = 3359 + TvtEnterShopRsp = 3360 + TvtBattleConfirmNotify = 3361 + TvtUpdateLineupInfoNotify = 3362 + TvtBattleRobotSettleNotify = 3363 + GetBuffEffectReq = 476 + GetBuffEffectRsp = 477 + GetGrandKeyReq = 506 + GetGrandKeyRsp = 507 + GetMedalDataReq = 449 + GetMedalDataRsp = 450 + MedalOpReq = 451 + MedalOpRsp = 452 + GetStageActDifficultyReq = 456 + GetStageActDifficultyRsp = 457 + TakeStageActChallengeRewardReq = 458 + TakeStageActChallengeRewardRsp = 459 + GetStageChapterReq = 965 + GetStageChapterRsp = 966 + TakeChapterChallengeRewardReq = 967 + TakeChapterChallengeRewardRsp = 968 + TakeActivityChallengeRewardReq = 460 + TakeActivityChallengeRewardRsp = 461 + GetPediaReq = 464 + GetPediaRsp = 465 + MpGetMatchInfoReq = 466 + MpGetMatchInfoRsp = 467 + MpCancelMatchReq = 468 + MpCancelMatchRsp = 469 + MpGetLobbyRecommendReq = 470 + MpGetLobbyRecommendRsp = 471 + EquipSynthesisReq = 478 + EquipSynthesisRsp = 479 + GetPlayerCardReq = 480 + GetPlayerCardRsp = 481 + ChangePlayerCardReq = 482 + ChangePlayerCardRsp = 483 + DelPlayerCardMsgReq = 489 + PlayerCardDataChangeNotify = 492 + SendPlayerCardMsgReq = 486 + SendPlayerCardMsgRsp = 493 + GetOtherPlayerCardDataReq = 490 + GetOtherPlayerCardDataRsp = 491 + RecvPlayerCardMsgNotify = 487 + GetBossRushActivityReq = 496 + GetBossRushActivityRsp = 497 + ChooseBossRushBuffReq = 498 + ChooseBossRushBuffRsp = 499 + GetDeleteMaterialReq = 500 + GetDeleteMaterialRsp = 501 + GetExtraStoryChallengeModeDataReq = 502 + GetExtraStoryChallengeModeDataRsp = 503 + ResetExtraStoryChallengeModeReq = 504 + ResetExtraStoryChallengeModeRsp = 505 + GetExBossScheduleReq = 508 + GetExBossScheduleRsp = 509 + GetExBossInfoReq = 510 + GetExBossInfoRsp = 511 + TakeExBossRankRewardNotify = 516 + GetNewConsignedOrderDataReq = 517 + GetNewConsignedOrderDataRsp = 518 + GetConsignedRewardReq = 519 + GetConsignedRewardRsp = 520 + ChooseConsignedRewardReq = 521 + ChooseConsignedRewardRsp = 522 + TakeConsignedRewardReq = 523 + TakeConsignedRewardRsp = 524 + GetConsignedRewardLogReq = 525 + GetConsignedRewardLogRsp = 526 + GetExBossRankReq = 527 + GetExBossRankRsp = 528 + ExBossStageBeginReq = 529 + ExBossStageBeginRsp = 530 + ExBossStageEndReq = 531 + ExBossStageEndRsp = 532 + TakeExBossScoreRewardNotify = 533 + OpenWeekDayActivityReq = 534 + OpenWeekDayActivityRsp = 535 + GetChallengeStepRewardReq = 536 + GetChallengeStepRewardRsp = 537 + AddTechExpReq = 538 + AddTechExpRsp = 539 + TakeTechCollectRewardReq = 540 + TakeTechCollectRewardRsp = 541 + MaterialDeleteReturnReq = 553 + TakeDailyCompensationRewardReq = 564 + TakeDailyCompensationRewardRsp = 565 + AsMasterPupilCardReq = 566 + AsMasterPupilCardRsp = 567 + GetMasterPupilDataReq = 568 + GetMasterPupilDataRsp = 569 + AskForMasterOrPupilReq = 570 + AskForMasterOrPupilRsp = 571 + DealMasterPupilReq = 572 + DealMasterPupilRsp = 573 + MasterPupilEvalReq = 574 + MasterPupilEvalRsp = 575 + GetMasterFameRewardReq = 576 + GetMasterFameRewardRsp = 577 + MasterPupilCardReportReq = 578 + ActivateTrialAvatarReq = 583 + ActivateTrialAvatarRsp = 584 + GetTrialAvatarReq = 585 + GetTrialAvatarRsp = 586 + GetMasterPupilCardReq = 587 + GetMasterPupilCardRsp = 588 + MasterPupilMsgNotify = 589 + GetFrameDataReq = 590 + GetFrameDataRsp = 591 + SetFrameUseReq = 592 + SetFrameUseRsp = 593 + GetDormDataReq = 601 + GetDormDataRsp = 602 + GetDormHouseReq = 603 + GetDormHouseRsp = 604 + EditDormRoomReq = 605 + EditDormRoomRsp = 606 + GetDepotFurnitureReq = 607 + GetDepotFurnitureRsp = 608 + UnlockDormHouseReq = 609 + UnlockDormHouseRsp = 610 + SetDormAvatarReq = 611 + SetDormAvatarRsp = 612 + LevelUpDormReq = 613 + LevelUpDormRsp = 614 + SetDormNameReq = 615 + SetDormNameRsp = 616 + FinishDormEventReq = 617 + FinishDormEventRsp = 618 + GetHasGotFurnitureIdListReq = 619 + GetHasGotFurnitureIdListRsp = 620 + BuyFurnitureReq = 621 + BuyFurnitureRsp = 622 + GetOtherDormDataReq = 633 + GetOtherDormDataRsp = 634 + SetDormSnsInfoReq = 635 + SetDormSnsInfoRsp = 636 + GetDormSnsDataReq = 637 + GetDormSnsDataRsp = 638 + LikeDormReq = 639 + LikeDormRsp = 640 + FinishDormTalkReq = 641 + FinishDormTalkRsp = 642 + GetAvatarRollDataReq = 643 + GetAvatarRollDataRsp = 644 + TakeRollRewardReq = 645 + TakeRollRewardRsp = 646 + ClaimStaminaReq = 649 + ClaimStaminaRsp = 650 + GetPupilMissionReq = 651 + GetPupilMissionRsp = 652 + GetMasterPupilApplyReq = 653 + GetMasterPupilApplyRsp = 654 + GetRecommendMasterPupilReq = 655 + GetRecommendMasterPupilRsp = 656 + GetMasterPupilMainDataReq = 657 + GetMasterPupilMainDataRsp = 658 + GetPupilEvalDataReq = 659 + GetPupilEvalDataRsp = 660 + GetMasterRankReq = 662 + GetMasterRankRsp = 663 + GetOtherMasterPupilReq = 664 + GetOtherMasterPupilRsp = 665 + UnlockFurnitureReq = 680 + UnlockFurnitureRsp = 681 + GrandKeyLevelUpReq = 753 + GrandKeyLevelUpRsp = 754 + GrandKeyResetReq = 755 + GrandKeyResetRsp = 756 + GrandKeyBreachReq = 757 + GrandKeyBreachRsp = 758 + GrandKeyActivateSkillReq = 759 + GrandKeyActivateSkillRsp = 760 + GrandKeyContrastReq = 761 + GrandKeyContrastRsp = 762 + GrandKeySetSkillReq = 763 + GrandKeySetSkillRsp = 764 + GrandKeyUnlockSkillReq = 765 + GrandKeyUnlockSkillRsp = 766 + PushClientMsgNotify = 801 + SetPlayerTagNotify = 802 + SyncTimeReq = 803 + SyncTimeRsp = 804 + TakeExtraStoryChallengeModeChapterRewardReq = 807 + TakeExtraStoryChallengeModeChapterRewardRsp = 808 + GetAvatarBindEquipInChallengeModeReq = 809 + GetAvatarBindEquipInChallengeModeRsp = 810 + GetGalInteractTriggerEventReq = 813 + GetGalInteractTriggerEventRsp = 814 + TakeGalInteractTriggerEventReq = 815 + TakeGalInteractTriggerEventRsp = 816 + AvatarFragmentTransformReq = 827 + AvatarFragmentTransformRsp = 828 + StageBattleSaveClientDataReq = 829 + StageBattleSaveClientDataRsp = 830 + TakeExtraStoryLineStoryFinishRewardReq = 836 + TakeExtraStoryLineStoryFinishRewardRsp = 837 + UnbindAccountReq = 961 + UnbindAccountRsp = 962 + SyncDutyNotify = 969 + RecallMasterPupilApplicationReq = 970 + RecallMasterPupilApplicationRsp = 971 + SetFriendRemarkReq = 972 + SetFriendRemarkRsp = 973 + GetFriendRemarkListReq = 974 + GetFriendRemarkListRsp = 975 + PlayerLevelUpNotify = 976 + UltraEndlessGetTopRankReq = 5200 + UltraEndlessGetTopRankRsp = 5201 + UltraEndlessGetMainDataReq = 5202 + UltraEndlessGetMainDataRsp = 5203 + UltraEndlessLastSettleRewardNotify = 5205 + UltraEndlessReportSiteFloorReq = 5206 + UltraEndlessReportSiteFloorRsp = 5207 + UltraEndlessBriefDataNotify = 5210 + UltraEndlessEnterSiteReq = 5211 + UltraEndlessEnterSiteRsp = 5212 + UltraEndlessTopRankRewardReq = 5215 + UltraEndlessTopRankRewardRsp = 5216 + UltraEndlessClientReportNotify = 5219 + UltraEndlessFirstJoinRewardNotify = 5220 + UltraEndlessCommonNotify = 5298 + GetVirtualAvatarGroupDetailReq = 3502 + GetVirtualAvatarGroupDetailRsp = 3503 + SetVirtualAvatarTeamReq = 3504 + SetVirtualAvatarTeamRsp = 3505 + DressVirtualEquipmentReq = 3506 + DressVirtualEquipmentRsp = 3507 + VirtualGachaReq = 3508 + VirtualGachaRsp = 3509 + GetVirtualGachaStatusReq = 3510 + GetVirtualGachaStatusRsp = 3511 + VirtualAvatarGroupChangeNotify = 3512 + VirtualTrainDirectGachaNotify = 3513 + ChooseVirtualTrainGachaItemReq = 3514 + ChooseVirtualTrainGachaItemRsp = 3515 + ChooseVirtualDefaultAvatarNotify = 3516 + SyncVirtualGachaStatusNotify = 3517 + VirtualTrainRoleCustomLevelUpReq = 3518 + VirtualTrainRoleCustomLevelUpRsp = 3519 + VirtualTrainRoleCustomChooseReq = 3520 + VirtualTrainRoleCustomChooseRsp = 3521 + VirtualTrainEvoReq = 3522 + VirtualTrainEvoRsp = 3523 + VirtualTrainItemDropNotify = 3524 + GetWarshipItemDataReq = 5450 + GetWarshipItemDataRsp = 5451 + GetWarshipTrialDataReq = 5452 + GetWarshipTrialDataRsp = 5453 + GetWarshipDataReq = 5454 + GetWarshipDataRsp = 5455 + SetWarshipReq = 5456 + SetWarshipRsp = 5457 + SetWarshipComponentReq = 5458 + SetWarshipComponentRsp = 5459 + SetWarshipSettingReq = 5460 + SetWarshipSettingRsp = 5461 + WarshipItemReturnMaterialNotify = 5462 + AddWarshipItemNotify = 5463 + GetWeeklyReportReq = 5100 + GetWeeklyReportRsp = 5101 + GetWeeklyReportEndlessRecommendPlayerReq = 5102 + GetWeeklyReportEndlessRecommendPlayerRsp = 5103 + GetWeeklyReportExBossRecommendPlayerReq = 5104 + GetWeeklyReportExBossRecommendPlayerRsp = 5105 + GetWeeklyReportUltraEndlessRecommendPlayerReq = 5106 + GetWeeklyReportUltraEndlessRecommendPlayerRsp = 5107 diff --git a/game_server/resource/__init__.py b/game_server/resource/__init__.py new file mode 100644 index 0000000..e03353a --- /dev/null +++ b/game_server/resource/__init__.py @@ -0,0 +1,60 @@ +import json +import traceback +from typing import Dict, Type, TypeVar, Optional, Any, List + +from game_server.config.log import Error, Info +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import resource_registry +import game_server.resource.configdb # noqa: F401 + +T = TypeVar("T", bound=BaseResource) + +def filter_data(cls: Type, data): + valid_fields = cls.__annotations__.keys() + return {field: data.get(field, None) for field in valid_fields} + +class ResourceManager: + def __init__(self): + self.data: Dict[Type[T], Dict[Any, T]] = {} + + def load_resources(self) -> None: + Info("[BOOT] [ResourceManager] Loading Resourcses...") + sorted_load_priority = dict( + sorted(resource_registry.items(), key=lambda item: item[1]["load_priority"]) + ).items() + for cls, metadata in sorted_load_priority: + path = metadata["path"] + try: + with open(path, "r", encoding="utf-8") as file: + raw_data = json.load(file) + except Exception: + Error(f"Error when loading resource {path}") + traceback.print_exc() + continue + + self.data[cls] = {} + i = 0 + for data in raw_data: + data = filter_data(cls, data) + item: T = cls(**data) + if not item.on_load(): + continue + i += 1 + index_value = item.get_index() + self.data[cls][index_value] = item + Info(f"[BOOT] [ResourceManager] Loaded {i} config(s) for {cls.__name__}") + + def find_by_index(self, cls: Type[T], value: Any) -> Optional[T]: + return self.data.get(cls, {}).get(str(value)) + + def has_index(self, cls: Type[T], value: Any) -> bool: + return value in self.data.get(cls, {}) + + def values(self, cls: Type[T]) -> List[T]: + return list(self.data.get(cls, {}).values()) + + @staticmethod + def instance(): + return resource_manager + +resource_manager = ResourceManager() diff --git a/game_server/resource/base_resource.py b/game_server/resource/base_resource.py new file mode 100644 index 0000000..74f7ef3 --- /dev/null +++ b/game_server/resource/base_resource.py @@ -0,0 +1,15 @@ +from abc import ABC, abstractmethod +from dataclasses import dataclass +from typing import TypeVar + +T = TypeVar("T", bound="BaseResource") + +@dataclass +class BaseResource(ABC): + def on_load(self: T) -> bool: + """returns True by default if item loaded, otherwise will be skipped""" + return True + + @abstractmethod + def get_index(self) -> str: + pass diff --git a/game_server/resource/configdb/__init__.py b/game_server/resource/configdb/__init__.py new file mode 100644 index 0000000..85f20e3 --- /dev/null +++ b/game_server/resource/configdb/__init__.py @@ -0,0 +1,15 @@ +import importlib +import os +import sys + +folder = "game_server/resource/configdb" +sys.path.append(os.path.dirname(folder)) + +for filename in os.listdir(folder): + if filename.endswith(".py") and filename != "__init__.py": + module_name = filename[:-3] + module_path = f"game_server.resource.configdb.{module_name}" + try: + importlib.import_module(module_path) + except Exception as e: + print(f"Error importing module '{module_path}': {e}") diff --git a/game_server/resource/configdb/act_challenge_data.py b/game_server/resource/configdb/act_challenge_data.py new file mode 100644 index 0000000..4a659b0 --- /dev/null +++ b/game_server/resource/configdb/act_challenge_data.py @@ -0,0 +1,12 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/ActChallengeData.json") +class ActChallengeData(BaseResource): + actId: int + difficulty: int + + def get_index(self) -> str: + return str(self.actId) diff --git a/game_server/resource/configdb/activity_tower.py b/game_server/resource/configdb/activity_tower.py new file mode 100644 index 0000000..5589a43 --- /dev/null +++ b/game_server/resource/configdb/activity_tower.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/ActivityTower.json") +class ActivityTowerData(BaseResource): + ActivityID: int + + def get_index(self) -> str: + return str(self.ActivityID) diff --git a/game_server/resource/configdb/avatar_data.py b/game_server/resource/configdb/avatar_data.py new file mode 100644 index 0000000..2741bb0 --- /dev/null +++ b/game_server/resource/configdb/avatar_data.py @@ -0,0 +1,18 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/AvatarData.json") +class AvatarData(BaseResource): + avatarID: int + DefaultDressId: int + unlockStar: int + initialWeapon: int + skillList: list + + def on_load(self) -> bool: + return self.avatarID != 316 and (self.avatarID < 9000 or self.avatarID > 20000) + + def get_index(self) -> str: + return str(self.avatarID) diff --git a/game_server/resource/configdb/avatar_sub_skill_data.py b/game_server/resource/configdb/avatar_sub_skill_data.py new file mode 100644 index 0000000..3b5d0e3 --- /dev/null +++ b/game_server/resource/configdb/avatar_sub_skill_data.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/AvatarSubSkillData.json") +class AvatarSubSkillData(BaseResource): + skillId: int + unlockScoin: int + maxLv: int + avatarSubSkillId: int + + def get_index(self) -> str: + return str(self.avatarSubSkillId) diff --git a/game_server/resource/configdb/avatar_tutorial.py b/game_server/resource/configdb/avatar_tutorial.py new file mode 100644 index 0000000..92ddf28 --- /dev/null +++ b/game_server/resource/configdb/avatar_tutorial.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/AvatarTutorial.json") +class AvatarTutorialData(BaseResource): + ActivityID: int + + def get_index(self) -> str: + return str(self.ActivityID) diff --git a/game_server/resource/configdb/collection.py b/game_server/resource/configdb/collection.py new file mode 100644 index 0000000..76871af --- /dev/null +++ b/game_server/resource/configdb/collection.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/Collection.json") +class CollectionData(BaseResource): + ID: int + + def get_index(self) -> str: + return str(self.ID) diff --git a/game_server/resource/configdb/custom_head_data.py b/game_server/resource/configdb/custom_head_data.py new file mode 100644 index 0000000..26654d7 --- /dev/null +++ b/game_server/resource/configdb/custom_head_data.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/CustomHeadData.json") +class CustomHeadData(BaseResource): + headID: int + + def get_index(self) -> str: + return str(self.headID) diff --git a/game_server/resource/configdb/dress_data.py b/game_server/resource/configdb/dress_data.py new file mode 100644 index 0000000..dc9ab6f --- /dev/null +++ b/game_server/resource/configdb/dress_data.py @@ -0,0 +1,12 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/DressData.json") +class DressData(BaseResource): + dressID: int + avatarIDList: list + + def get_index(self) -> str: + return str(self.dressID) diff --git a/game_server/resource/configdb/elf_astra_mate_data.py b/game_server/resource/configdb/elf_astra_mate_data.py new file mode 100644 index 0000000..465c409 --- /dev/null +++ b/game_server/resource/configdb/elf_astra_mate_data.py @@ -0,0 +1,26 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.configdb.elf_skill_data import ElfSkillData +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/Elf_AstraMate_Data.json") +class ElfAstraMateData(BaseResource): + ElfID: int + MaxLevel: int + MaxRarity: int + + skill_lists: list[ElfSkillData] + + def on_load(self) -> bool: + from game_server.resource import ResourceManager + + self.skill_lists = [ + skill + for skill in ResourceManager.instance().values(ElfSkillData) + if self.ElfID in skill.ElfIds + ] + return True + + def get_index(self) -> str: + return str(self.ElfID) diff --git a/game_server/resource/configdb/elf_skill_data.py b/game_server/resource/configdb/elf_skill_data.py new file mode 100644 index 0000000..b888e79 --- /dev/null +++ b/game_server/resource/configdb/elf_skill_data.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource, LoadPriority + +@dataclass +@GameResource("resources/ExcelOutputAsset/ElfSkillData.json", load_priority=LoadPriority.HIGH) +class ElfSkillData(BaseResource): + ElfSkillID: int + MaxLv: int + ElfIds: list + + def get_index(self) -> str: + return str(self.ElfSkillID) diff --git a/game_server/resource/configdb/entry_theme_data.py b/game_server/resource/configdb/entry_theme_data.py new file mode 100644 index 0000000..0831287 --- /dev/null +++ b/game_server/resource/configdb/entry_theme_data.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/EntryThemeData.json") +class EntryThemeData(BaseResource): + SpaceShipConfigID: int + ThemeBGMConfigList: list + ThemeTagList: list + + def get_index(self) -> str: + return str(self.SpaceShipConfigID) diff --git a/game_server/resource/configdb/entry_theme_item_data.py b/game_server/resource/configdb/entry_theme_item_data.py new file mode 100644 index 0000000..902812b --- /dev/null +++ b/game_server/resource/configdb/entry_theme_item_data.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/EntryThemeItemData.json") +class EntryThemeItemData(BaseResource): + ThemeItemID: int + + def get_index(self) -> str: + return str(self.ThemeItemID) diff --git a/game_server/resource/configdb/frame_data.py b/game_server/resource/configdb/frame_data.py new file mode 100644 index 0000000..914ec07 --- /dev/null +++ b/game_server/resource/configdb/frame_data.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/FrameData.json") +class Frame_Data(BaseResource): + id: int + + def get_index(self) -> str: + return str(self.id) diff --git a/game_server/resource/configdb/material_data.py b/game_server/resource/configdb/material_data.py new file mode 100644 index 0000000..18fa9d6 --- /dev/null +++ b/game_server/resource/configdb/material_data.py @@ -0,0 +1,14 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/MaterialData.json") +class MaterialData(BaseResource): + ID: int + rarity: int + maxRarity: int + quantityLimit: int + + def get_index(self) -> str: + return str(self.ID) diff --git a/game_server/resource/configdb/mission_data.py b/game_server/resource/configdb/mission_data.py new file mode 100644 index 0000000..3b3134d --- /dev/null +++ b/game_server/resource/configdb/mission_data.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/MissionData.json") +class MissionData(BaseResource): + id: int + Priority: int + totalProgress: int + + def get_index(self) -> str: + return str(self.id) diff --git a/game_server/resource/configdb/recommend_panel.py b/game_server/resource/configdb/recommend_panel.py new file mode 100644 index 0000000..da79699 --- /dev/null +++ b/game_server/resource/configdb/recommend_panel.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/RecommendPanel.json") +class RecommendPanelData(BaseResource): + PanelID: int + + def get_index(self) -> str: + return str(self.PanelID) diff --git a/game_server/resource/configdb/stage_data_main.py b/game_server/resource/configdb/stage_data_main.py new file mode 100644 index 0000000..c34354f --- /dev/null +++ b/game_server/resource/configdb/stage_data_main.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/StageData_Main.json") +class StageDataMain(BaseResource): + levelId: int + maxProgress: int + challengeList: list + + def get_index(self) -> str: + return str(self.levelId) diff --git a/game_server/resource/configdb/step_mission_compensation.py b/game_server/resource/configdb/step_mission_compensation.py new file mode 100644 index 0000000..0fdc5a5 --- /dev/null +++ b/game_server/resource/configdb/step_mission_compensation.py @@ -0,0 +1,15 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/StepMissionCompensation.json") +class StepMissionCompensationData(BaseResource): + CompensationID: int + UnlockLevel: int + MainLineStepIDList: list + NewChallengeStepIDList: list + OldChallengeStepIDList: list + + def get_index(self) -> str: + return str(self.CompensationID) diff --git a/game_server/resource/configdb/stigmata_data.py b/game_server/resource/configdb/stigmata_data.py new file mode 100644 index 0000000..f8f280d --- /dev/null +++ b/game_server/resource/configdb/stigmata_data.py @@ -0,0 +1,21 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/StigmataData.json") +class StigmataData(BaseResource): + ID: int + maxLv: int + rarity: int + maxRarity: int + evoID: int + quality: int + isSecurityProtect: bool + protect: bool + + def on_load(self) -> bool: + return self.evoID == 0 + + def get_index(self) -> str: + return str(self.ID) diff --git a/game_server/resource/configdb/theme_data_avatar.py b/game_server/resource/configdb/theme_data_avatar.py new file mode 100644 index 0000000..17d6773 --- /dev/null +++ b/game_server/resource/configdb/theme_data_avatar.py @@ -0,0 +1,13 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/ThemeData_Avatar.json") +class ThemeDataAvatar(BaseResource): + AvatarData: int + BuffList: list[int] + avatarIDList: list[int] + + def get_index(self) -> str: + return str(self.AvatarData) diff --git a/game_server/resource/configdb/weapon_data.py b/game_server/resource/configdb/weapon_data.py new file mode 100644 index 0000000..9188326 --- /dev/null +++ b/game_server/resource/configdb/weapon_data.py @@ -0,0 +1,17 @@ +from dataclasses import dataclass +from game_server.resource.base_resource import BaseResource +from game_server.resource.decorators import GameResource + +@dataclass +@GameResource("resources/ExcelOutputAsset/WeaponData.json") +class WeaponData(BaseResource): + ID: int + weaponMainID: int + maxLv: int + rarity: int + maxRarity: int + evoID: int + protect: bool + + def get_index(self) -> str: + return str(self.ID) diff --git a/game_server/resource/decorators.py b/game_server/resource/decorators.py new file mode 100644 index 0000000..63437fa --- /dev/null +++ b/game_server/resource/decorators.py @@ -0,0 +1,17 @@ +from typing import Type, Dict + +resource_registry: Dict[Type, Dict[str, any]] = {} + + +class LoadPriority: + HIGH = 1 + NORMAL = 2 + LOW = 3 + + +def GameResource(path: str, load_priority=LoadPriority.NORMAL): + def decorator(cls): + resource_registry[cls] = {"path": path, "load_priority": load_priority} + return cls + + return decorator diff --git a/game_server/utils/__init__.py b/game_server/utils/__init__.py new file mode 100644 index 0000000..d55a630 --- /dev/null +++ b/game_server/utils/__init__.py @@ -0,0 +1,11 @@ +import time as t +from time import time + +def cur_timestamp_ms(): + return int((time() * 1000)) + +def cur_timestamp_seconds(): + return int(time()) + +def get_unix_in_seconds(): + return int(t.time()) diff --git a/hi3 b/hi3 new file mode 100644 index 0000000..7edda9b --- /dev/null +++ b/hi3 @@ -0,0 +1,13 @@ +from game_server.config import * +from sdk_server import HandleSdkServer,HandleSslSdkServer +from game_server import GameServer + +SdkThread = threading.Thread(target=HandleSdkServer, args=(Config.GameServer.Ip, Config.GameServer.Port, Config.SdkServer.Port)) +SdkThreadSsl = threading.Thread(target=HandleSslSdkServer) +SdkThread.start() +SdkThreadSsl.start() + + +gameserver = GameServer() +GameThread = threading.Thread(target=gameserver.main, args=(Config.GameServer.Ip, Config.GameServer.Port)) +GameThread.start() \ No newline at end of file diff --git a/patch.png b/patch.png new file mode 100644 index 0000000..a6fa67b Binary files /dev/null and b/patch.png differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..eafc13c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +betterproto==1.2.5 +dynaconf==3.2.6 +Flask==3.0.3 +loguru==0.7.2 +pydantic==2.9.2 +pymongo==4.6.3 +Requests==2.32.3 diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..afc6e22 Binary files /dev/null and b/screenshot.png differ diff --git a/sdk_server/__init__.py b/sdk_server/__init__.py new file mode 100644 index 0000000..6f7442a --- /dev/null +++ b/sdk_server/__init__.py @@ -0,0 +1,69 @@ +from game_server.config import * +from sdk_server.controllers.account_controller import account_blueprint +from sdk_server.controllers.config_controller import config_blueprint +from sdk_server.controllers.dispatch_controller import dispatch_blueprint + +class VerboseLevel(Enum): + SILENT = 0 + NORMAL = 1 + DEBUG = 2 + +class RequestLoggingMiddleware: + suppressed_routes = ["/report", "/sdk/dataUpload"] + + def __init__(self, app, verbose_level): + self.app = app + self.verbose_level = verbose_level + + def __call__(self, environ, start_response): + path = environ.get('PATH_INFO', '') + method = environ.get('REQUEST_METHOD', '').upper() + + def custom_start_response(status, headers, *args): + status_code = int(status.split()[0]) + + if self.verbose_level.value > VerboseLevel.NORMAL.value: + Info(f"{status_code} {method} {path}") + elif self.verbose_level.value > VerboseLevel.SILENT.value and path not in self.suppressed_routes: + Info(f"{status_code} {method} {path}") + + return start_response(status, headers, *args) + + return self.app(environ, custom_start_response) + + + +app = Flask(__name__) + + +app.wsgi_app = RequestLoggingMiddleware(app.wsgi_app, verbose_level=VerboseLevel.NORMAL) + + +resources_path = Path(__file__).resolve().parent.parent / "resources/statics" +if not resources_path.exists(): + resources_path.mkdir(parents=True) + +@app.route('/statics/') +def serve_statics(filename): + return send_from_directory(resources_path, filename) + +app.register_blueprint(account_blueprint) +app.register_blueprint(config_blueprint) +app.register_blueprint(dispatch_blueprint) + +def HandleSdkServer(ServerIp, GameServerPort, SdkServerPort): + app.config['SERVER_IP'] = ServerIp + app.config['GAME_SERVER_PORT'] = GameServerPort + + log = logging.getLogger('werkzeug') + log.setLevel(logging.ERROR) + + Info("HTTP server started on port 80") + + app.run(host=ServerIp, port=SdkServerPort) + +def HandleSslSdkServer(): + log = logging.getLogger('werkzeug') + log.setLevel(logging.ERROR) + Info("HTTPS server started on port 443") + app.run(host='127.0.0.1', port=443,ssl_context='adhoc') diff --git a/sdk_server/controllers/account_controller.py b/sdk_server/controllers/account_controller.py new file mode 100644 index 0000000..b31307b --- /dev/null +++ b/sdk_server/controllers/account_controller.py @@ -0,0 +1,121 @@ +import json +from flask import Blueprint, request, jsonify +from sdk_server.models.risky_check import RiskyCheck,DataScheme +from sdk_server.models.granter_login_body import GranterLoginBody + +account_blueprint = Blueprint('account', __name__) + +@account_blueprint.route('/account/risky/api/check', methods=['POST']) +def check_risky(): + return jsonify({ + "retcode":0, + "message":"", + "data":{ + "id":"", + "action":"ACTION_NONE", + "geetest":None + } + }) + +@account_blueprint.route('//combo/granter/login/v2/login', methods=['POST']) +def granter_login(game_biz): + body = request.json + granter_login_body = GranterLoginBody(**body) + + granter_login_body_data = json.loads(granter_login_body.data) + + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "combo_id": "0", + "open_id": granter_login_body_data['uid'], + "combo_token": granter_login_body_data['token'], + "data": {"guest": granter_login_body_data['guest']}, + "heartbeat": False, + "account_type": 1 + } + }) + +@account_blueprint.route('//mdk/shield/api/verify', methods=['POST']) +def verify_shield(game_biz): + shield_login_response = { + "retcode": 0, + "message": "OK", + "data": { + "account": { + "uid": "1337", + "name": "Miku", + "email": "", + "mobile": "", + "is_email_verify": "0", + "realname": "", + "identity_card": "", + "token": "12931313131", + "safe_mobile": "", + "facebook_name": "", + "google_name": "", + "twitter_name": "", + "game_center_name": "", + "apple_name": "", + "sony_name": "", + "tap_name": "", + "country": "SG", + "reactivate_ticket": "", + "area_code": "**", + "device_grant_ticket": "", + "steam_name": "", + "unmasked_email": "", + "unmasked_email_type": 0 + }, + "device_grant_required": False, + "safe_mobile_required": False, + "realperson_required": False, + "reactivate_required": False, + "realname_operation": "None" + } + } + + return jsonify(shield_login_response) + +@account_blueprint.route('//mdk/shield/api/login', methods=['POST']) +def shield_login(game_biz): + + shield_login_response = { + "retcode": 0, + "message": "OK", + "data": { + "account": { + "uid": "1337", + "name": "Miku", + "email": "", + "mobile": "", + "is_email_verify": "0", + "realname": "", + "identity_card": "", + "token": "12931313131", + "safe_mobile": "", + "facebook_name": "", + "google_name": "", + "twitter_name": "", + "game_center_name": "", + "apple_name": "", + "sony_name": "", + "tap_name": "", + "country": "SG", + "reactivate_ticket": "", + "area_code": "**", + "device_grant_ticket": "", + "steam_name": "", + "unmasked_email": "", + "unmasked_email_type": 0 + }, + "device_grant_required": False, + "safe_mobile_required": False, + "realperson_required": False, + "reactivate_required": False, + "realname_operation": "None" + } + } + + return jsonify(shield_login_response) diff --git a/sdk_server/controllers/config_controller.py b/sdk_server/controllers/config_controller.py new file mode 100644 index 0000000..9b13df3 --- /dev/null +++ b/sdk_server/controllers/config_controller.py @@ -0,0 +1,204 @@ +from flask import Blueprint, jsonify, request +import random +from datetime import datetime, timedelta + + +config_blueprint = Blueprint('config', __name__) + +@config_blueprint.route('//mdk/agreement/api/getAgreementInfos', methods=['GET']) +def get_agreement_infos(game_biz): + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "marketing_agreements": [] + } + }) + +@config_blueprint.route('/data_abtest_api/config/experiment/list', methods=['POST']) +def get_experiment_list(): + return jsonify({ + "retcode": 0, + "success": True, + "message": "", + "data": [] + }) + +@config_blueprint.route('/account/device/api/listNewerDevices', methods=['POST']) +def list_newer_devices(): + return jsonify({ + "data": { + "devices": [], + "latest_id": "0" + }, + "message": "OK", + "retcode": 0 + }) + +@config_blueprint.route('//combo/granter/api/getConfig', methods=['GET']) +def get_config(game_biz): + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "protocol": True, + "qr_enabled": False, + "log_level": "DEBUG", + "announce_url": f"https://127.0.0.1/bh3/announcement/", + "push_alias_type": 2, + "disable_ysdk_guard": False, + "enable_announce_pic_popup": False, + "app_name": "崩坏3-东南亚", + "qr_enabled_apps": { + "bbs": False, + "cloud": False + }, + "qr_app_icons": { + "app": "", + "bbs": "", + "cloud": "" + }, + "qr_cloud_display_name": "" + } + }) + +@config_blueprint.route('/game_weather/weather/get_weather', methods=['GET']) +def get_weather(): + weather_data = { + "Retcode": 0, + "Message": "OK", + "Data": { + "Timezone": 8, + "Hourly": [] + } + } + for i in range(24): + date_time = (datetime.now() + timedelta(hours=i)).strftime("%Y-%m-%d %H") + weather_data["Data"]["Hourly"].append({ + "Condition": 1, + "Date": date_time.split()[0], + "Hour": int(date_time.split()[1].split(':')[0]), + "Temp": random.randint(20, 30) + }) + return jsonify(weather_data) + +@config_blueprint.route('//mdk/shield/api/loadConfig', methods=['GET']) +def load_config(game_biz): + game_key = request.args.get('game_key', '') + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "id": 16, + "game_key": game_key, + "client": "PC", + "identity": "I_IDENTITY", + "guest": False, + "ignore_versions": "", + "scene": "S_NORMAL", + "name": "崩坏3rd-东南亚", + "disable_regist": False, + "enable_email_captcha": False, + "thirdparty": [], + "disable_mmt": False, + "server_guest": False, + "thirdparty_ignore": {}, + "enable_ps_bind_account": False, + "thirdparty_login_configs": {}, + "initialize_firebase": False + } + }) + +@config_blueprint.route('/combo/box/api/config/sdk/combo', methods=['GET']) +def sdk_combo(): + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "vals": { + "list_price_tierv2_enable": "false", + "network_report_config": { + "enable": 0, + "status_codes": [206], + "url_paths": ["dataUpload", "red_dot"] + }, + "kibana_pc_config": { + "enable": 1, + "level": "Debug", + "modules": ["download"] + } + } + } + }) + +@config_blueprint.route('/device-fp/api/getExtList', methods=['GET']) +def get_ext_list(): + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "code": 200, + "msg": "ok", + "ext_list": [ + "cpuName", "deviceModel", "deviceName", "deviceType", "deviceUID", "gpuID", "gpuName", "gpuAPI", + "gpuVendor", "gpuVersion", "gpuMemory", "osVersion", "cpuCores", "cpuFrequency", "gpuVendorID", + "isGpuMultiTread", "memorySize", "screenSize", "engineName", "addressMAC" + ], + "pkg_list": [], + "pkg_str": "/vK5WTh5SS3SAj8Zm0qPWg==" + } + }) + +@config_blueprint.route('/device-fp/api/getFp', methods=['GET']) +def get_fp(): + device_fp = request.args.get('device_fp', '') + return jsonify({ + "data": { + "code": 200, + "device_fp": device_fp, + "msg": "ok" + }, + "message": "OK", + "retcode": 0 + }) + +@config_blueprint.route('/report', methods=['GET']) +def report(): + return "GET LOG" + +@config_blueprint.route('/admin/mi18n/', methods=['GET']) +def admin_mi18n(remainder): + return jsonify({ + "version": 74 + }) + +@config_blueprint.route('/sdk/dataUpload', methods=['GET']) +def data_upload(): + return jsonify({ + "code": 0 + }) + +@config_blueprint.route('//combo/granter/api/compareProtocolVersion', methods=['POST']) +def compare_protocol_version(game_biz): + body = request.json + app_id = body.get('AppId') + language = body.get('Language') + return jsonify({ + "retcode": 0, + "message": "OK", + "data": { + "modified": True, + "protocol": { + "id": 0, + "app_id": app_id, + "language": language, + "user_proto": "", + "priv_proto": "", + "major": 0, + "minimum": 3, + "create_time": "0", + "teenager_proto": "", + "third_proto": "" + } + } + }) diff --git a/sdk_server/controllers/dispatch_controller.py b/sdk_server/controllers/dispatch_controller.py new file mode 100644 index 0000000..358597c --- /dev/null +++ b/sdk_server/controllers/dispatch_controller.py @@ -0,0 +1,198 @@ +from game_server.config import * + +dispatch_blueprint = Blueprint('dispatch', __name__) + +@dispatch_blueprint.route('/query_dispatch', methods=['GET']) +def query_dispatch(): + version = request.args.get('version') + response_data = { + 'retcode': 0, + 'region_list': [{ + 'retcode': 0, + 'dispatch_url': f"http://{Config.GameServer.Ip}/query_gateway", + 'name': Config.RegionName, + 'title': "", + 'ext': get_ext(version) + }] + } + return jsonify(response_data) + +@dispatch_blueprint.route('/query_gateway', methods=['GET']) +def query_gateway(): + version = request.args.get('version') + gameserver = { + 'ip': Config.GameServer.Ip, + 'port': Config.GameServer.Port + } + + response_data = { + 'retcode': 0, + 'msg': "", + 'region_name': Config.RegionName, + 'account_url': f"http://{Config.GameServer.Ip}/account", + 'account_url_backup': f"http://{Config.GameServer.Ip}/account", + 'asset_bundle_url_list': get_asset_bundle_url_list(version), + 'ex_audio_and_video_url_list': get_ex_audio_and_video_url_list(version), + 'ex_resource_url_list': get_ex_resource_url_list(version), + 'ext': get_ext(version), + 'gameserver': gameserver, + 'gateway': gameserver, + 'is_data_ready': True, + 'oaserver_url': f"http://{Config.GameServer.Ip}/oaserver", + 'server_cur_time': int(time.time()), + 'server_cur_timezone': 8, + 'server_ext': { + 'cdkey_url': f"http://{Config.GameServer.Ip}/common", + 'mihoyo_sdk_env': "2" + } + } + + return jsonify(response_data) + +def get_ext(version): + return { + 'ai_use_asset_bundle': "0" if Config.UseLocalCache else "1", + 'apm_log_level': "0", + 'apm_log_dest': "2", + 'apm_switch': "0", + 'apm_switch_game_log': "1", + 'apm_switch_crash': "1", + 'block_error_dialog': "1", + 'elevator_model_path': "GameEntry/EVA/StartLoading_Model", + 'data_use_asset_bundle': "1", + 'enable_watermark': "1", + 'ex_audio_and_video_url_list': get_ex_audio_and_video_url_list(version), + 'ex_res_buff_size': "10485760", + 'ex_res_pre_publish': "0", + 'ex_res_use_http': "1", + 'ex_resource_url_list': get_ex_resource_url_list(version), + 'is_xxxx': "0", + 'mtp_switch': "0", + 'network_feedback_enable': "0", + 'offline_report_switch': "0", + 'forbid_recharge': "1", + 'is_checksum_off': "0" if Config.UseLocalCache else "1", + 'res_use_asset_bundle': "1", + 'show_version_text': "0", + 'update_streaming_asb': "0", + 'use_multy_cdn': "1", + 'show_bulletin_button': "1", + 'show_bulletin_empty_dialog_bg': "0" + } + +def get_asset_bundle_url_list(version): + # Compile the regex pattern + regex = re.compile(r"^(.*?)_(os|gf|global)_(.*?)$") + match = regex.match(version) + value = match.group(2) + if Config.UseLocalCache: + return get_local_url_list(value, version) + # Proceed if there's a match + if match: + # Return URLs based on the OS type + if value == "os": + return [ + "https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1", + "https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1" + ] + elif value == "gf": + if "beta" in version: + return [ + "https://autopatchbeta.bh3.com/asset_bundle/beta_release/1.0", + "https://autopatchbeta.bh3.com/asset_bundle/beta_release/1.0" + ] + return [ + "https://bundle-qcloud.bh3.com/asset_bundle/android01/1.0", + "https://bundle.bh3.com/asset_bundle/android01/1.0" + ] + elif value == "global": + return [ + "http://hk-bundle-west-mihayo.akamaized.net/asset_bundle/usa01/1.1", + "http://bundle-aliyun-usa.honkaiimpact3.com/asset_bundle/usa01/1.1" + ] + else: + return [ + "https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1", + "https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1" + ] + return [] + +def get_ex_audio_and_video_url_list(version): + # Compile the regex pattern + regex = re.compile(r"^(.*?)_(os|gf|global)_(.*?)$") + match = regex.match(version) + value = match.group(2) + if Config.UseLocalCache: + return get_local_url_list(value, version) + if match: + # Return URLs based on the OS type + if value == "os": + return [ + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + "hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea" + ] + elif value == "gf": + if "beta" in version: + return [ + "autopatchbeta.bh3.com/tmp/CGAudio", + "autopatchbeta.bh3.com/tmp/CGAudio" + ] + return [ + "bh3rd-beta-qcloud.bh3.com/tmp/CGAudio", + "bh3rd-beta.bh3.com/tmp/CGAudio" + ] + elif value == "global": + return [ + "bh3rd-beta-qcloud.bh3.com/tmp/CGAudio", + "bh3rd-beta.bh3.com/tmp/CGAudio" + ] + else: + return [ + "bh3rd-beta-qcloud.bh3.com/tmp/CGAudio", + "bh3rd-beta.bh3.com/tmp/CGAudio" + ] + return [] + +def get_ex_resource_url_list(version): + # Compile the regex pattern + regex = re.compile(r"^(.*?)_(os|gf|global)_(.*?)$") + match = regex.match(version) + value = match.group(2) + if Config.UseLocalCache: + return get_local_url_list(value, version) + # Proceed if there's a match + if match: + # Return URLs based on the OS type + if value == "os": + return [ + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + "hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea" + ] + elif value == "gf": + if "beta" in version: + return [ + "autopatchbeta.bh3.com/tmp/beta", + "autopatchbeta.bh3.com/tmp/beta" + ] + return [ + "bundle-qcloud.bh3.com/tmp/Original", + "bundle.bh3.com/tmp/Original" + ] + elif value == "global": + return [ + "hk-bundle-west-mihayo.akamaized.net/tmp/com.miHoYo.bh3global", + "bigfile-aliyun-usa.honkaiimpact3.com/tmp/com.miHoYo.bh3global" + ] + else: + return [ + "bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea", + "hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea" + ] + return [] + +def get_local_url_list(type, version): + return [ + f"http://{Config.GameServer.Ip}/statics/{type}/{version.replace('.', '_')}", + f"http://{Config.GameServer.Ip}/statics/{type}/{version.replace('.', '_')}" + ] + diff --git a/sdk_server/models/granter_login_body.py b/sdk_server/models/granter_login_body.py new file mode 100644 index 0000000..28eed45 --- /dev/null +++ b/sdk_server/models/granter_login_body.py @@ -0,0 +1,21 @@ +# sdkserver/models/granter_login_body.py + +from pydantic import BaseModel +from typing import Optional + +class GranterLoginBodyData(BaseModel): + uid: str + guest: bool + token: str + +class GranterLoginBody(BaseModel): + app_id: int + channel_id: int + data: str # Assuming this is a JSON string that can be parsed + device: str + sign: str + + @property + def parsed_data(self) -> GranterLoginBodyData: + """Parse the data field into a GranterLoginBodyData instance.""" + return GranterLoginBodyData.parse_raw(self.data) diff --git a/sdk_server/models/risky_check.py b/sdk_server/models/risky_check.py new file mode 100644 index 0000000..4145c3a --- /dev/null +++ b/sdk_server/models/risky_check.py @@ -0,0 +1,14 @@ +# sdkserver/models/risky_check.py + +from pydantic import BaseModel +from typing import Optional + +class DataScheme(BaseModel): + id: str + action: str + geetest: Optional[object] + +class RiskyCheck(BaseModel): + retcode: int + message: str + data: DataScheme diff --git a/sdk_server/models/shield_verify_body.py b/sdk_server/models/shield_verify_body.py new file mode 100644 index 0000000..8d53943 --- /dev/null +++ b/sdk_server/models/shield_verify_body.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + +class ShieldVerifyBody(BaseModel): + token: str + uid: str \ No newline at end of file