diff --git a/RPG.GameCore/RPG.GameCore.csproj b/RPG.GameCore/RPG.GameCore.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/RPG.GameCore/RPG.GameCore.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/RPG.Network.Proto/RPG.Network.Proto.csproj b/RPG.Network.Proto/RPG.Network.Proto.csproj new file mode 100644 index 0000000..fcff061 --- /dev/null +++ b/RPG.Network.Proto/RPG.Network.Proto.csproj @@ -0,0 +1,25 @@ + + + + net8.0 + enable + enable + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/RPG.Network.Proto/messages.proto b/RPG.Network.Proto/messages.proto new file mode 100644 index 0000000..17e53a0 --- /dev/null +++ b/RPG.Network.Proto/messages.proto @@ -0,0 +1,2203 @@ +syntax = "proto3"; +option csharp_namespace = "RPG.Network.Proto"; + +message PlayerBasicInfo { + string nickname = 1; + uint32 level = 2; + uint32 exp = 3; + uint32 stamina = 4; + uint32 mcoin = 5; + uint32 hcoin = 6; + uint32 scoin = 7; + uint32 world_level = 8; +} + +message BlackInfo { + uint32 begin_time = 1; + uint32 end_time = 2; + uint32 limit_level = 3; + uint32 ban_type = 4; +} + +message VersionCount { + uint32 version = 1; + uint32 count = 2; +} + +enum AccountType { + ACCOUNT_MIHOYO_GUEST = 0; + ACCOUNT_MIHOYO = 1; + ACCOUNT_XIAOMI = 11; + ACCOUNT_COOLPAD = 12; + ACCOUNT_YYB = 13; + ACCOUNT_BILI = 14; + ACCOUNT_HUAWEI = 15; + ACCOUNT_MEIZU = 16; + ACCOUNT_360 = 17; + ACCOUNT_OPPO = 18; + ACCOUNT_VIVO = 19; + ACCOUNT_UC = 20; + ACCOUNT_WANDOJIA = 21; + ACCOUNT_LENOVO = 22; + ACCOUNT_JINLI = 23; + ACCOUNT_BAIDU = 25; + ACCOUNT_DANGLE = 26; + ACCOUNT_WEGAME = 27; + ACCOUNT_RPG_CUSTOM = 10000; +} + +enum ChannelIdType { + CHANNEL_ID_NONE = 0; + CHANNEL_ID_MIHOYO = 1; + CHANNEL_ID_XIAOMI = 11; + CHANNEL_ID_COOLPAD = 12; + CHANNEL_ID_YYB = 13; + CHANNEL_ID_BILI = 14; + CHANNEL_ID_HUAWEI = 15; + CHANNEL_ID_MEIZU = 16; + CHANNEL_ID_360 = 17; + CHANNEL_ID_OPPO = 18; + CHANNEL_ID_VIVO = 19; + CHANNEL_ID_UC = 20; + CHANNEL_ID_WANDOJIA = 21; + CHANNEL_ID_LENOVO = 22; + CHANNEL_ID_JINLI = 23; + CHANNEL_ID_BAIDU = 25; + CHANNEL_ID_DANGLE = 26; + CHANNEL_ID_WEGAME = 27; +} + +enum AvatarSlotType { + AVATAR_SLOT_1 = 0; + AVATAR_SLOT_2 = 1; + AVATAR_SLOT_3 = 2; +} + +enum ItemType { + ITEM_TYPE_NONE = 0; + ITEM_AVATAR_CARD = 1; + ITEM_EQUIPMENT = 2; + ITEM_MATERIAL = 3; + ITEM_AVATAR_EXP = 4; +} + +enum VirtualItemType { + VIRTUAL_ITEM_NONE = 0; + VIRTUAL_ITEM_HCOIN = 1; + VIRTUAL_ITEM_SCOIN = 2; + VIRTUAL_ITEM_MCOIN = 3; + VIRTUAL_ITEM_STAMINA = 11; + VIRTUAL_ITEM_EXP = 22; +} + +enum BlackLimitLevel { BLACK_LIMIT_LEVEL_ALL = 0; } + +enum AreaType { + AREA_NONE = 0; + AREA_CN = 1; + AREA_JP = 2; + AREA_ASIA = 3; + AREA_WEST = 4; + AREA_KR = 5; + AREA_OVERSEAS = 6; +} + +enum EntityType { + ENTITY_NONE = 0; + ENTITY_AVATAR = 1; + ENTITY_MONSTER = 2; + ENTITY_NPC = 3; + ENTITY_PROP = 4; + ENTITY_TRIGGER = 5; + ENTITY_ENV = 6; +} + +enum LanguageType { + LANGUAGE_NONE = 0; + LANGUAGE_SC = 1; + LANGUAGE_TC = 2; + LANGUAGE_EN = 3; + LANGUAGE_KR = 4; + LANGUAGE_JP = 5; + LANGUAGE_FR = 6; + LANGUAGE_DE = 7; + LANGUAGE_ES = 8; + LANGUAGE_PT = 9; + LANGUAGE_RU = 10; + LANGUAGE_TH = 11; + LANGUAGE_VI = 12; + LANGUAGE_ID = 13; +} + +enum PlatformType { + EDITOR = 0; + IOS = 1; + ANDROID = 2; + PC = 3; +} + +enum ReloginType { + NO_KICK = 0; + FORCE_KICK = 1; + IDLE_KICK = 2; +} + +enum AvatarType { + AVATAR_TYPE_NONE = 0; + AVATAR_TRIAL_TYPE = 1; + AVATAR_LIMIT_TYPE = 2; + AVATAR_FORMAL_TYPE = 3; +} + +message BattleOp { + uint32 turn_counter = 1; + uint32 state = 2; + uint32 action_entity_id = 3; + uint32 target_entity_id = 4; + uint32 op_type = 5; + uint32 skill_index = 6; + uint32 operation_counter = 7; +} + +message BattleEquipment { + uint32 id = 1; + uint32 level = 2; + uint32 promotion = 3; + uint32 rank = 4; +} + +message AvatarSkillTree { + uint32 point_id = 1; + uint32 level = 2; +} + +message BattleAvatar { + AvatarType avatar_type = 1; + uint32 id = 2; + uint32 level = 3; + uint32 rank = 4; + uint32 index = 5; + repeated AvatarSkillTree skilltree_list = 6; + repeated BattleEquipment equipment_list = 7; + uint32 hp = 8; + uint32 sp = 9; + uint32 promotion = 10; +} + +message BattleMonsterWave { repeated uint32 monster_id_list = 1; } + +message BattleBuff { + uint32 id = 1; + uint32 level = 2; + uint32 owner_index = 3; + uint32 wave_flag = 4; +} + +message BattleLineup { + repeated BattleAvatar avatar_list = 1; + repeated BattleMonsterWave monster_wave_list = 2; + repeated BattleBuff buff_list = 3; +} + +message ClientTurnSnapshot { + uint32 turn_counter = 1; + uint32 random_counter = 2; + uint32 anim_event_counter = 3; + repeated CharacterSnapshot snapshot_list = 4; + repeated AnimEventSnapshot anim_event_list = 5; +} + +message GamecoreConfig { + bool is_skip_verify = 1; + uint32 max_turn_cnt = 2; + bool is_auto_fight = 3; + string csv_path = 4; +} + +message BattleBuffMsg { + repeated uint32 buff_id_list = 1; + repeated uint32 buff_index_list = 2; + repeated uint32 buff_level_list = 3; + repeated uint32 buff_flag_list = 4; +} + +message BattleReplay { + uint32 version = 1; + uint32 logic_random_seed = 2; + uint32 stage_id = 3; + BattleLineup lineup = 4; + repeated BattleOp op_list = 5; + bytes turn_snapshot_hash = 6; + uint32 maze_plane_id = 7; + repeated uint32 extra_ability_list = 8; + bool is_ai_consider_ultra_skill = 9; + BattleCheckStrategyType check_strategy = 10; + repeated ClientTurnSnapshot turn_snapshot_list = 21; + string local_level_path = 22; + string debug_extra_info = 23; + GamecoreConfig config = 24; +} + +message AvatarProperty { + double max_hp = 1; + double attack = 2; + double defence = 3; + double speed = 4; + double left_hp = 5; + double left_sp = 6; + double max_sp = 7; +} + +message EquipmentProperty { + uint32 id = 1; + uint32 rank = 2; + uint32 promotion = 3; + uint32 level = 4; +} + +message AttackDamageProperty { + string attack_type = 1; + double damage = 2; +} + +message SkillUseProperty { + uint32 skill_id = 1; + string skill_type = 2; + uint32 skill_level = 3; + uint32 skill_use_count = 4; +} + +message SpAddSource { + string source = 1; + uint32 sp_add = 2; +} + +message AvatarBattleInfo { + AvatarType avatar_type = 1; + uint32 id = 2; + uint32 avatar_level = 3; + uint32 avatar_rank = 4; + uint32 avatar_promotion = 5; + AvatarProperty avatar_status = 6; + string avatar_skill = 7; + repeated EquipmentProperty avatar_equipment = 8; + uint32 total_turns = 9; + double total_damage = 10; + double total_heal = 11; + double total_damage_taken = 12; + double total_hp_recover = 13; + double total_sp_cost = 14; + uint32 stage_id = 15; + uint32 stage_type = 16; + double total_break_damage = 17; + repeated AttackDamageProperty attack_type_damage = 18; + repeated AttackDamageProperty attack_type_break_damage = 19; + repeated AttackDamageProperty attack_type_max_damage = 20; + repeated SkillUseProperty skill_times = 21; + double delay_cumulate = 22; + uint32 total_sp_add = 23; + repeated SpAddSource sp_add_source = 24; + uint32 total_bp_cost = 25; + uint32 die_times = 26; + uint32 revive_times = 27; + uint32 break_times = 28; + uint32 extra_turns = 29; + double total_shield = 30; + double total_shield_taken = 31; + double total_shield_damage = 32; + AvatarProperty initial_status = 33; +} + +message MonsterProperty { + double max_hp = 1; + double attack = 2; + double defence = 3; + double shield = 4; + double speed = 5; +} + +message MonsterBattleInfo { + uint32 entity_id = 1; + uint32 monster_id = 2; + uint32 monster_template_id = 3; + uint32 monster_level = 4; + MonsterProperty monster_status = 5; + uint32 total_turns = 6; + double total_damage = 7; + double total_heal = 8; + double total_damage_taken = 9; + double total_stance_damage_taken = 10; + double total_hp_recover = 11; + uint32 stage_id = 12; + uint32 battle_id = 13; + uint32 monster_type = 14; + repeated AttackDamageProperty attack_type_damage = 15; + repeated SkillUseProperty skill_times = 16; + uint32 stage_type = 17; + double total_break_damage_taken = 18; + double delay_cumulate = 19; +} + +message BattleStatistics { + uint32 total_battle_turns = 1; + uint32 total_auto_turns = 2; + repeated uint32 avatar_id_list = 3; + uint32 ultra_cnt = 4; + double total_delay_cumulate = 5; + double cost_time = 6; + repeated AvatarBattleInfo avatar_battle_list = 7; + repeated MonsterBattleInfo monster_battle_list = 8; + uint32 round_cnt = 9; + uint32 cocoon_dead_wave = 10; +} + +message BattleResult { + BattleCheckResultType retcode = 1; + BattleEndStatus end_status = 2; + BattleStatistics stt = 3; +} + +message CharacterSnapshot { + uint32 runtime_id = 1; + repeated uint64 properties = 2; +} + +message AnimEventSnapshot { + string event_name = 1; + uint32 count = 2; +} + +enum BattleCheckStrategyType { + BATTLE_CHECK_STRATEGY_IDENTICAL = 0; + BATTLE_CHECK_STRATEGY_SERVER = 1; + BATTLE_CHECK_STRATEGY_CLIENT = 2; +} + +enum BattleCheckResultType { + BATTLE_CHECK_RESULT_SUCC = 0; + BATTLE_CHECK_RESULT_FAIL = 1; + BATTLE_CHECK_RESULT_PASS = 2; +} + +enum BattleEndStatus { + BATTLE_END_NONE = 0; + BATTLE_END_WIN = 1; + BATTLE_END_LOSE = 2; + BATTLE_END_QUIT = 3; +} + +enum Retcode { + RET_SUCC = 0; + RET_FAIL = 1; + RET_SERVER_INTERNAL_ERROR = 2; + RET_TIMEOUT = 3; + RET_REPEATED_REQ = 4; + RET_REQ_PARA_INVALID = 5; + RET_PLAYER_DATA_ERROR = 6; + RET_PLAYER_CLIENT_PAUSED = 7; + RET_REPEATE_LOGIN = 1000; + RET_RETRY_LOGIN = 1001; + RET_WAIT_LOGIN = 1002; + RET_NOT_IN_WHITE_LIST = 1003; + RET_IN_BLACK_LIST = 1004; + RET_ACCOUNT_VERIFY_ERROR = 1005; + RET_ACCOUNT_PARA_ERROR = 1006; + RET_ANTI_ADDICT_LOGIN = 1007; + RET_CHECK_SUM_ERROR = 1008; + RET_QUEST_REWARD_ALREADY_TAKEN = 1100; + RET_QUEST_NOT_ACCEPT = 1101; + RET_QUEST_NOT_FINISH = 1102; + RET_QUEST_STATUS_ERROR = 1103; + RET_AVATAR_NOT_EXIST = 1200; + RET_AVATAR_RES_EXP_NOT_ENOUGH = 1201; + RET_AVATAR_EXP_REACH_PROMOTION_LIMIT = 1202; + RET_AVATAR_REACH_MAX_PROMOTION = 1203; + RET_SKILLTREE_CONFIG_NOT_EXIST = 1204; + RET_SKILLTREE_ALREADY_UNLOCK = 1205; + RET_SKILLTREE_PRE_LOCKED = 1206; + RET_SKILLTREE_LEVEL_NOT_MEET = 1207; + RET_SKILLTREE_RANK_NOT_MEET = 1208; + RET_AVATAR_DRESS_NO_EQUIPMENT = 1209; + RET_AVATAR_EXP_ITEM_NOT_EXIST = 1210; + RET_SKILLTREE_POINT_UNLOCK = 1211; + RET_SKILLTREE_POINT_LEVEL_UPGRADE_NOT_MATCH = 1212; + RET_SKILLTREE_POINT_LEVEL_REACH_MAX = 1213; + RET_WORLD_LEVEL_NOT_MEET = 1214; + RET_PLAYER_LEVEL_NOT_MEET = 1215; + RET_ITEM_NOT_EXIST = 1300; + RET_ITEM_COST_NOT_ENOUGH = 1301; + RET_ITEM_COST_TOO_MUCH = 1302; + RET_ITEM_NO_COST = 1303; + RET_ITEM_NOT_ENOUGH = 1304; + RET_ITEM_INVALID = 1305; + RET_ITEM_CONFIG_NOT_EXIST = 1306; + RET_SCOIN_NOT_ENOUGH = 1307; + RET_ITEM_REWARD_EXCEED_LIMIT = 1308; + RET_ITEM_INVALID_USE = 1309; + RET_ITEM_USE_CONFIG_NOT_EXIST = 1310; + RET_REWARD_CONFIG_NOT_EXIST = 1311; + RET_ITEM_EXCEED_LIMIT = 1312; + RET_ITEM_COUNT_INVALID = 1313; + RET_ITEM_USE_TARGET_TYPE_INVALID = 1314; + RET_ITEM_USE_SATIETY_FULL = 1315; + RET_ITEM_COMPOSE_NOT_EXIST = 1316; + RET_EQUIPMENT_ALREADY_DRESSED = 1350; + RET_EQUIPMENT_NOT_EXIST = 1351; + RET_EQUIPMENT_REACH_LEVEL_LIMIT = 1352; + RET_EQUIPMENT_CONSUME_SELF = 1353; + RET_EQUIPMENT_ALREADY_LOCKED = 1354; + RET_EQUIPMENT_ALREADY_UNLOCKED = 1355; + RET_EQUIPMENT_LOCKED = 1356; + RET_EQUIPMENT_SELECT_NUM_OVER_LIMIT = 1357; + RET_EQUIPMENT_RANK_UP_MUST_CONSUME_SAME_TID = 1358; + RET_EQUIPMENT_PROMOTION_REACH_MAX = 1359; + RET_EQUIPMENT_RANK_UP_REACH_MAX = 1360; + RET_EQUIPMENT_LEVEL_REACH_MAX = 1361; + RET_EQUIPMENT_EXCEED_LIMIT = 1362; + RET_LINEUP_INVALID_INDEX = 1400; + RET_LINEUP_INVALID_MEMBER_POS = 1401; + RET_LINEUP_SWAP_NOT_EXIST = 1402; + RET_LINEUP_AVATAR_ALREADY_IN = 1403; + RET_LINEUP_CREATE_AVATAR_ERROR = 1404; + RET_LINEUP_AVATAR_INIT_ERROR = 1405; + RET_LINEUP_NOT_EXIST = 1406; + RET_LINEUP_ONLY_ONE_MEMBER = 1407; + RET_LINEUP_SAME_LEADER_SLOT = 1408; + RET_LINEUP_NO_LEADER_SELECT = 1409; + RET_LINEUP_SWAP_SAME_SLOT = 1410; + RET_LINEUP_AVATAR_NOT_EXIST = 1411; + RET_LINEUP_TRIAL_AVATAR_CAN_NOT_QUIT = 1412; + RET_LINEUP_VIRTUAL_LINEUP_PLANE_NOT_MATCH = 1413; + RET_LINEUP_NOT_VALID_LEADER = 1414; + RET_LINEUP_SAME_INDEX = 1415; + RET_LINEUP_IS_EMPTY = 1416; + RET_LINEUP_NAME_FORMAT_ERROR = 1417; + RET_MAIL_NOT_EXIST = 1700; + RET_MAIL_RANGE_INVALID = 1701; + RET_MAIL_MAIL_ID_INVALID = 1702; + RET_MAIL_NO_MAIL_TAKE_ATTACHMENT = 1703; + RET_MAIL_NO_MAIL_TO_DEL = 1704; + RET_STAGE_SETTLE_ERROR = 1800; + RET_STAGE_CONFIG_NOT_EXIST = 1801; + RET_STAGE_NOT_FOUND = 1802; + RET_STAGE_COCOON_PROP_NOT_VALID = 1804; + RET_STAGE_COCOON_WAVE_NOT_VALID = 1805; + RET_STAGE_PROP_ID_NOT_EQUAL = 1806; + RET_STAGE_COCOON_WAVE_OVER = 1807; + RET_CHAPTER_LOCK = 1900; + RET_CHAPTER_CHALLENGE_NUM_NOT_ENOUGH = 1901; + RET_CHAPTER_REWARD_ID_NOT_EXIST = 1902; + RET_CHAPTER_REWARD_ALREADY_TAKEN = 1903; + RET_BATTLE_STAGE_NOT_MATCH = 2000; + RET_IN_BATTLE_NOW = 2001; + RET_BATTLE_CHEAT = 2002; + RET_BATTLE_FAIL = 2003; + RET_BATTLE_NO_LINEUP = 2004; + RET_BATTLE_LINEUP_EMPTY = 2005; + RET_BATTLE_VERSION_NOT_MATCH = 2006; + RET_LACK_EXCHANGE_STAMINA_TIMES = 2100; + RET_LACK_STAMINA = 2101; + RET_STAMINA_FULL = 2102; + RET_AUTHKEY_SIGN_TYPE_ERROR = 2103; + RET_AUTHKEY_SIGN_VER_ERROR = 2104; + RET_NICKNAME_FORMAT_ERROR = 2105; + RET_SENSITIVE_WORDS = 2106; + RET_LEVEL_REWARD_HAS_TAKEN = 2107; + RET_LEVEL_REWARD_LEVEL_ERROR = 2108; + RET_LANGUAGE_INVALID = 2109; + RET_MAZE_NOT_FINISH = 2200; + RET_MAZE_LACK_TICKET = 2201; + RET_MAZE_NOT_UNLOCK = 2202; + RET_MAZE_DIFFICULTY_LIMIT = 2203; + RET_MAZE_NO_ABILITY = 2204; + RET_MAZE_NO_PLANE = 2205; + RET_MAZE_STAGE_DISMATCH = 2206; + RET_MAZE_MAP_NOT_EXIST = 2207; + RET_MAZE_TYPE_NOT_EXIST = 2208; + RET_MAZE_ALREADY_FINISH = 2209; + RET_MAZE_PROP_NOT_EXIST = 2210; + RET_MAZE_POSITION_TOO_FAR = 2211; + RET_MAZE_SKILL_CAST_CNT_REACH_MAX = 2212; + RET_MAZE_MP_NOT_ENOUGH = 2213; + RET_SPRING_NOT_ENABLE = 2214; + RET_SPRING_REFRESH_IN_CD = 2215; + RET_SPRING_TOO_FAR = 2216; + RET_MAZE_NO_FLOOR = 2217; + RET_NOT_IN_MAZE = 2218; + RET_PLANE_ID_NOT_MATCH = 2219; + RET_FLOOR_ID_NOT_MATCH = 2220; + RET_SAVEPOINTS_TIMES_ZERO = 2221; + RET_PLOT_NOT_UNLOCK = 2300; + RET_MISSION_NOT_EXIST = 2400; + RET_MISSION_ALREADY_DONE = 2401; + RET_DAILY_TASK_NOT_FINISH = 2402; + RET_DAILY_TASK_REWARD_HAS_TAKEN = 2403; + RET_MISSION_NOT_FINISH = 2404; + RET_MISSION_NOT_DOING = 2405; + RET_MISSION_FINISH_WAY_NOT_MATCH = 2406; + RET_MISSION_SCENE_NOT_MATCH = 2407; + RET_ADVENTURE_MAP_NOT_EXIST = 2500; + RET_SCENE_ENTITY_NOT_EXIST = 2600; + RET_NOT_IN_SCENE = 2601; + RET_SCENE_MONSTER_NOT_EXIST = 2602; + RET_INTERACT_CONFIG_NOT_EXIST = 2603; + RET_UNSUPPORTED_PROP_STATE = 2604; + RET_SCENE_ENTRY_ID_NOT_MATCH = 2605; + RET_ASSIST_MONSTER_COUNT_LIMIT = 2607; + RET_SCENE_USE_SKILL_FAIL = 2608; + RET_PROP_IS_HIDDEN = 2609; + RET_LOADING_SUCC_ALREADY = 2610; + RET_SCENE_ENTITY_TYPE_INVALID = 2611; + RET_INTERACT_TYPE_INVALID = 2612; + RET_INTERACT_NOT_IN_REGION = 2613; + RET_INTERACT_SUB_TYPE_INVALID = 2614; + RET_NOT_LEADER_ENTITY = 2615; + RET_BUY_TIMES_LIMIT = 2700; + RET_BUY_LIMIT_TYPE = 2701; + RET_SHOP_NOT_OPEN = 2702; + RET_GOODS_NOT_OPEN = 2703; + RET_TUTORIAL_NOT_UNLOCK = 2751; + RET_TUTORIAL_UNLOCK_ALREADY = 2752; + RET_TUTORIAL_FINISH_ALREADY = 2753; + RET_TUTORIAL_PRE_NOT_UNLOCK = 2754; + RET_TUTORIAL_PLAYER_LEVEL_NOT_MATCH = 2755; + RET_TUTORIAL_TUTORIAL_NOT_FOUND = 2756; + RET_CHALLENGE_NOT_EXIST = 2801; + RET_CHALLENGE_NOT_UNLOCK = 2802; + RET_CHALLENGE_ALREADY = 2803; + RET_CHALLENGE_LINEUP_EDIT_FORBIDDEN = 2804; + RET_CHALLENGE_LINEUP_EMPTY = 2805; + RET_CHALLENGE_NOT_DOING = 2806; + RET_CHALLENGE_NOT_FINISH = 2807; +} + +message EnterAdventureCsReq { uint32 map_id = 1; } + +message EnterAdventureScRsp { + uint32 retcode = 1; + SceneInfo scene = 2; +} + +enum CmdAdventureType { + CmdAdventureTypeNone = 0; + CmdEnterAdventureCsReq = 1301; + CmdEnterAdventureScRsp = 1302; +} + +message GetAvatarDataCsReq { + bool is_get_all = 1; + repeated uint32 avatar_id_list = 2; +} + +message Avatar { + uint32 avatar_id = 1; + uint32 exp = 2; + uint32 level = 3; + uint32 promotion = 4; + uint32 rank = 5; + repeated AvatarSkillTree skilltree_list = 6; + uint32 equipment_unique_id = 7; +} + +message GetAvatarDataScRsp { + uint32 retcode = 1; + repeated Avatar avatar_list = 2; + bool is_all = 3; +} + +message AvatarExpUpCsReq { + uint32 avatar_id = 1; + ItemCostData item_cost = 2; +} + +message AvatarExpUpScRsp { + uint32 retcode = 1; + repeated PileItem return_item_list = 2; +} + +message UnlockSkilltreeCsReq { + uint32 point_id = 1; + uint32 level = 2; + repeated ItemCost item_list = 3; +} + +message UnlockSkilltreeScRsp { + uint32 retcode = 1; + uint32 avatar_id = 2; + uint32 point_id = 3; + uint32 level = 4; +} + +message PromoteAvatarCsReq { + uint32 avatar_id = 1; + repeated ItemCost item_list = 2; +} + +message PromoteAvatarScRsp { uint32 retcode = 1; } + +message DressAvatarCsReq { + uint32 equipment_unique_id = 1; + uint32 avatar_id = 2; +} + +message DressAvatarScRsp { uint32 retcode = 1; } + +message TakeOffEquipmentCsReq { uint32 avatar_id = 1; } + +message TakeOffEquipmentScRsp { uint32 retcode = 1; } + +message AddAvatarScNotify { + uint32 avatar_id = 1; + uint32 rank = 2; + RewardData reward = 3; +} + +enum CmdAvatarType { + CmdAvatarTypeNone = 0; + CmdGetAvatarDataCsReq = 301; + CmdGetAvatarDataScRsp = 302; + CmdAvatarExpUpCsReq = 303; + CmdAvatarExpUpScRsp = 304; + CmdUnlockSkilltreeCsReq = 305; + CmdUnlockSkilltreeScRsp = 306; + CmdPromoteAvatarCsReq = 307; + CmdPromoteAvatarScRsp = 308; + CmdDressAvatarCsReq = 309; + CmdDressAvatarScRsp = 310; + CmdTakeOffEquipmentCsReq = 311; + CmdTakeOffEquipmentScRsp = 312; + CmdAddAvatarScNotify = 313; +} + +message PVEBattleResultCsReq { + uint32 stage_id = 1; + repeated BattleOp op_list = 2; + bytes turn_snapshot_hash = 3; + uint32 cost_time = 4; + string debug_extra_info = 5; + uint32 res_version = 6; + bool is_ai_consider_ultra_skill = 7; + BattleEndStatus end_status = 8; + BattleStatistics stt = 9; +} + +message PVEBattleResultScRsp { + uint32 retcode = 1; + uint32 stage_id = 2; + uint32 cur_finish_challenge = 3; + repeated DropItem drop_list = 4; + uint32 avatar_exp_reward = 5; + string bin_ver = 6; + string res_ver = 7; + uint32 battle_id = 8; + BattleEndStatus end_status = 9; + repeated DropItem extra_drop_list = 10; + bool check_identical = 11; +} + +message QuitBattleCsReq {} + +message QuitBattleScRsp { uint32 retcode = 1; } + +message GetCurBattleInfoCsReq {} + +message GetCurBattleInfoScRsp { + uint32 retcode = 1; + uint32 stage_id = 2; + uint32 logic_random_seed = 3; + repeated BattleAvatar avatar_list = 4; + SceneBattleInfo battle_info = 5; +} + +message SyncClientResVersionCsReq { uint32 res_version = 1; } + +message SyncClientResVersionScRsp { + uint32 retcode = 1; + uint32 res_version = 2; +} + +enum CmdBattleType { + CmdBattleTypeNone = 0; + CmdPVEBattleResultCsReq = 101; + CmdPVEBattleResultScRsp = 102; + CmdQuitBattleCsReq = 103; + CmdQuitBattleScRsp = 104; + CmdGetCurBattleInfoCsReq = 105; + CmdGetCurBattleInfoScRsp = 106; + CmdSyncClientResVersionCsReq = 107; + CmdSyncClientResVersionScRsp = 108; +} + +message Challenge { + uint32 challenge_id = 1; + uint32 stars = 2; +} + +message GetChallengeCsReq {} + +message GetChallengeScRsp { + uint32 retcode = 1; + repeated Challenge challenge_list = 2; +} + +message StartChallengeCsReq { uint32 challenge_id = 1; } + +message StartChallengeScRsp { + uint32 retcode = 1; + Maze maze = 2; +} + +message LeaveChallengeCsReq {} + +message LeaveChallengeScRsp { + uint32 retcode = 1; + Maze maze = 2; +} + +message ChallengeSettleNotify { + uint32 challenge_id = 1; + bool is_win = 2; + RewardData reward = 3; + uint32 stars = 4; +} + +message FinishChallengeCsReq { uint32 challenge_id = 1; } + +message FinishChallengeScRsp { uint32 retcode = 1; } + +enum CmdChallengeType { + CmdChallengeTypeNone = 0; + CmdGetChallengeCsReq = 1701; + CmdGetChallengeScRsp = 1702; + CmdStartChallengeCsReq = 1703; + CmdStartChallengeScRsp = 1704; + CmdLeaveChallengeCsReq = 1705; + CmdLeaveChallengeScRsp = 1706; + CmdChallengeSettleNotify = 1707; + CmdFinishChallengeCsReq = 1708; + CmdFinishChallengeScRsp = 1709; +} + +message PileItem { + uint32 item_id = 1; + uint32 item_num = 2; +} + +message ItemCost { + oneof Item { + PileItem pile_item = 1; + uint32 unique_id = 2; + } +} + +message ItemCostData { repeated ItemCost item_list = 1; } + +message DropItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 rank = 3; + uint32 num = 4; +} + +message DropData { repeated DropItem item_list = 1; } + +message RewardItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 rank = 3; + uint32 num = 4; + uint32 promotion = 5; +} + +message RewardData { repeated RewardItem item_list = 1; } + +message SceneMonsterWave { + repeated uint32 monster_id_list = 1; + repeated DropData drop_list = 2; +} + +message SceneBattleInfo { + uint32 logic_random_seed = 1; + uint32 stage_id = 2; + repeated SceneMonsterWave monster_wave_list = 3; + repeated BattleAvatar battle_avatar_list = 4; + repeated BattleBuff buff_list = 5; +} + +enum MissionStatus { + MISSION_NONE = 0; + MISSION_DOING = 1; + MISSION_FINISH = 2; + MISSION_PREPARED = 3; +} + +message GetBagCsReq {} + +message Equipment { + uint32 unique_id = 1; + uint32 tid = 2; + uint32 level = 3; + uint32 exp = 4; + uint32 rank = 5; + uint32 belong_avatar_id = 6; + bool is_protected = 7; + uint32 promotion = 8; +} + +message Material { + uint32 tid = 1; + uint32 num = 2; +} + +message GetBagScRsp { + uint32 retcode = 1; + repeated Equipment equipment_list = 2; + repeated Material material_list = 3; +} + +message PromoteEquipmentCsReq { + uint32 equipment_unique_id = 1; + ItemCostData cost_data = 2; +} + +message PromoteEquipmentScRsp { uint32 retcode = 1; } + +message LockEquipmentCsReq { + uint32 equipment_unique_id = 1; + bool is_lock = 2; +} + +message LockEquipmentScRsp { + uint32 retcode = 1; + uint32 equipment_unique_id = 2; +} + +message UseItemCsReq { uint32 use_item_id = 1; } + +message UseItemScRsp { + uint32 retcode = 1; + uint32 use_item_id = 2; + RewardData reward_data = 3; +} + +message RankUpEquipmentCsReq { + uint32 equipment_unique_id = 1; + repeated uint32 equipment_id_list = 2; +} + +message RankUpEquipmentScRsp { uint32 retcode = 1; } + +message ExpUpEquipmentCsReq { + uint32 equipment_unique_id = 1; + ItemCostData cost_data = 2; +} + +message ExpUpEquipmentScRsp { + uint32 retcode = 1; + repeated PileItem return_item_list = 2; +} + +message UseItemFoodCsReq { + uint32 use_item_id = 1; + uint32 use_item_count = 2; + uint32 use_avatar_id = 3; + AvatarType use_avatar_type = 4; +} + +message UseItemFoodScRsp { + uint32 retcode = 1; + uint32 use_item_id = 2; + uint32 use_item_count = 3; +} + +message ComposeItemCsReq { + uint32 compose_id = 1; + uint32 count = 2; +} + +message ComposeItemScRsp { + uint32 retcode = 1; + uint32 compose_id = 2; + uint32 count = 3; +} + +enum CmdItemType { + CmdItemTypeNone = 0; + CmdGetBagCsReq = 501; + CmdGetBagScRsp = 502; + CmdPromoteEquipmentCsReq = 503; + CmdPromoteEquipmentScRsp = 504; + CmdLockEquipmentCsReq = 505; + CmdLockEquipmentScRsp = 506; + CmdUseItemCsReq = 507; + CmdUseItemScRsp = 508; + CmdRankUpEquipmentCsReq = 509; + CmdRankUpEquipmentScRsp = 510; + CmdExpUpEquipmentCsReq = 511; + CmdExpUpEquipmentScRsp = 512; + CmdUseItemFoodCsReq = 513; + CmdUseItemFoodScRsp = 514; + CmdComposeItemCsReq = 515; + CmdComposeItemScRsp = 516; +} + +message GetStageLineupCsReq {} + +message StageLineup { + uint32 stage_type = 1; + uint32 lineup_index = 2; +} + +message GetStageLineupScRsp { + uint32 retcode = 1; + repeated StageLineup stage_lineup_list = 2; +} + +message LineupAvatar { + uint32 slot = 1; + AvatarType avatar_type = 2; + uint32 id = 3; + uint32 skill_cast_cnt = 4; + uint32 hp = 5; + uint32 sp = 6; + uint32 satiety = 7; +} + +message LineupInfo { + repeated LineupAvatar avatar_list = 1; + bool is_virtual = 2; + uint32 plane_id = 3; + uint32 mp = 4; + uint32 leader_slot = 5; + uint32 index = 6; + ExtraLineupType extra_lineup_type = 7; + string name = 8; +} + +message GetCurLineupDataCsReq {} + +message GetCurLineupDataScRsp { + uint32 retcode = 1; + LineupInfo lineup = 2; +} + +message JoinLineupCsReq { + uint32 avatar_id = 1; + bool is_virtual = 2; + uint32 plane_id = 3; + uint32 slot = 4; + uint32 index = 5; + ExtraLineupType extra_lineup_type = 6; +} + +message JoinLineupScRsp { uint32 retcode = 1; } + +message QuitLineupCsReq { + uint32 avatar_id = 1; + bool is_virtual = 2; + uint32 plane_id = 3; + uint32 index = 4; + ExtraLineupType extra_lineup_type = 5; +} + +message QuitLineupScRsp { + uint32 retcode = 1; + uint32 avatar_id = 2; + bool is_mainline = 3; + uint32 plane_id = 4; + bool is_virtual = 5; +} + +message SwapLineupCsReq { + bool is_virtual = 1; + uint32 plane_id = 2; + uint32 src_slot = 3; + uint32 dst_slot = 4; + uint32 index = 5; + ExtraLineupType extra_lineup_type = 6; +} + +message SwapLineupScRsp { uint32 retcode = 1; } + +message SyncLineupNotify { LineupInfo lineup = 1; } + +message GetLineupAvatarDataCsReq {} + +message LineupAvatarData { + AvatarType avatar_type = 1; + uint32 id = 2; + uint32 hp = 3; +} + +message GetLineupAvatarDataScRsp { + uint32 retcode = 1; + repeated LineupAvatarData avatar_data_list = 2; +} + +message ChangeLineupLeaderCsReq { uint32 slot = 1; } + +message ChangeLineupLeaderScRsp { + uint32 retcode = 1; + uint32 slot = 2; +} + +message SwitchLineupIndexCsReq { uint32 index = 1; } + +message SwitchLineupIndexScRsp { + uint32 retcode = 1; + uint32 index = 2; +} + +message SetLineupNameCsReq { + string name = 1; + uint32 index = 2; +} + +message SetLineupNameScRsp { + uint32 retcode = 1; + string name = 2; + uint32 index = 3; +} + +message GetAllLineupDataCsReq {} + +message GetAllLineupDataScRsp { + uint32 retcode = 1; + uint32 cur_index = 2; + repeated LineupInfo lineup_list = 3; +} + +message VirtualLineupDestroyNotify { uint32 plane_id = 1; } + +enum CmdLineupType { + CmdLineupTypeNone = 0; + CmdGetStageLineupCsReq = 701; + CmdGetStageLineupScRsp = 702; + CmdGetCurLineupDataCsReq = 703; + CmdGetCurLineupDataScRsp = 704; + CmdJoinLineupCsReq = 705; + CmdJoinLineupScRsp = 706; + CmdQuitLineupCsReq = 707; + CmdQuitLineupScRsp = 708; + CmdSwapLineupCsReq = 709; + CmdSwapLineupScRsp = 710; + CmdSyncLineupNotify = 711; + CmdGetLineupAvatarDataCsReq = 712; + CmdGetLineupAvatarDataScRsp = 713; + CmdChangeLineupLeaderCsReq = 714; + CmdChangeLineupLeaderScRsp = 715; + CmdSwitchLineupIndexCsReq = 716; + CmdSwitchLineupIndexScRsp = 717; + CmdSetLineupNameCsReq = 718; + CmdSetLineupNameScRsp = 719; + CmdGetAllLineupDataCsReq = 720; + CmdGetAllLineupDataScRsp = 721; + CmdVirtualLineupDestroyNotify = 722; +} + +enum ExtraLineupType { + LINEUP_NONE = 0; + LINEUP_CHALLENGE = 1; +} + +message GetMailCsReq { + uint32 start = 1; + uint32 stop = 2; +} + +message MailItem { + uint32 item_id = 1; + uint32 level = 2; + uint32 num = 3; + uint32 rank = 4; + uint32 promotion = 5; +} + +message MailAttachment { repeated MailItem item_list = 1; } + +message ClientMail { + uint32 id = 1; + uint32 template_id = 2; + string title = 3; + string content = 4; + string sender = 5; + uint32 time = 6; + MailAttachment attachment = 7; + bool is_read = 8; + uint32 expire_time = 9; + repeated string para_list = 10; +} + +message GetMailScRsp { + uint32 retcode = 1; + repeated ClientMail mail_list = 2; + bool is_end = 3; + uint32 total_num = 4; + uint32 start = 5; + repeated ClientMail notice_mail_list = 6; +} + +message MarkReadMailCsReq { uint32 id = 1; } + +message MarkReadMailScRsp { + uint32 retcode = 1; + uint32 id = 2; +} + +message DelMailCsReq { repeated uint32 id_list = 1; } + +message DelMailScRsp { + uint32 retcode = 1; + repeated uint32 id_list = 2; +} + +message TakeMailAttachmentCsReq { repeated uint32 mail_id_list = 1; } + +message ClientMailAttachmentItem { + uint32 mail_id = 1; + uint32 item_id = 2; +} + +message TakeMailAttachmentScRsp { + uint32 retcode = 1; + repeated uint32 succ_mail_id_list = 2; + MailAttachment attachment = 3; + repeated ClientMailAttachmentItem fail_mail_list = 4; +} + +message NewMailScNotify { repeated uint32 mail_id_list = 1; } + +enum CmdMailType { + CmdMailTypeNone = 0; + CmdGetMailCsReq = 801; + CmdGetMailScRsp = 802; + CmdMarkReadMailCsReq = 803; + CmdMarkReadMailScRsp = 804; + CmdDelMailCsReq = 805; + CmdDelMailScRsp = 806; + CmdTakeMailAttachmentCsReq = 807; + CmdTakeMailAttachmentScRsp = 808; + CmdNewMailScNotify = 809; +} + +message MazeFloor { + uint32 floor_id = 1; + SceneInfo scene = 2; +} + +message Maze { + uint32 id = 1; + MazeFloor floor = 2; + uint32 map_entry_id = 3; +} + +message MazeAvatar { + uint32 avatar_id = 1; + uint32 left_hp = 2; + uint32 sp = 3; +} + +message MazeMission { + uint32 sub_mission_id = 1; + MissionStatus status = 2; +} + +message GetMazeCsReq {} + +message GetMazeScRsp { + uint32 retcode = 1; + repeated Maze maze_list = 2; + uint32 cur_series_id = 3; + repeated uint32 finished_plane_list = 4; + repeated uint32 wait_plane_list = 5; + repeated uint32 taken_reward_list = 6; + repeated MazeAvatar avatar_list = 7; + repeated uint32 chosen_ability_list = 8; + repeated uint32 candidate_ability_list = 9; + repeated MazeMission maze_mission_list = 10; +} + +message ChooseMazeSeriesCsReq { uint32 series_id = 1; } + +message ChooseMazeSeriesScRsp { + uint32 retcode = 1; + uint32 series_id = 2; +} + +message ChooseMazeAbilityCsReq { uint32 ability_id = 1; } + +message ChooseMazeAbilityScRsp { + uint32 retcode = 1; + repeated uint32 ability_list = 2; +} + +message EnterMazeCsReq { + uint32 plane_id = 1; + uint32 floor_id = 2; + uint32 entry_id = 3; + uint32 group_id = 4; + uint32 config_id = 5; +} + +message EnterMazeScRsp { + uint32 retcode = 1; + Maze maze = 2; +} + +message MazeBuffScNotify { + uint32 buff_id = 1; + MazeBuffOp op = 2; +} + +message CastMazeSkillCsReq { uint32 skill_id = 1; } + +message CastMazeSkillScRsp { uint32 retcode = 1; } + +message MazePlaneEventScNotify { + RewardData reward = 1; + repeated DropItem drop_list = 2; +} + +message EnterMazeByServerScNotify { Maze maze = 1; } + +message MazePropState { + uint32 group_id = 1; + uint32 config_id = 2; + uint32 state = 3; +} + +message MazeGroup { + uint32 group_id = 1; + uint32 modify_time = 2; +} + +message GetMazeMapInfoCsReq { uint32 entry_id = 1; } + +message GetMazeMapInfoScRsp { + uint32 retcode = 1; + uint32 entry_id = 2; + repeated uint32 lighten_section_list = 3; + repeated MazePropState maze_prop_list = 4; + repeated MazeGroup maze_group_list = 5; +} + +enum CmdMazeType { + CmdMazeTypeNode = 0; + CmdGetMazeCsReq = 1001; + CmdGetMazeScRsp = 1002; + CmdChooseMazeSeriesCsReq = 1003; + CmdChooseMazeSeriesScRsp = 1004; + CmdChooseMazeAbilityCsReq = 1005; + CmdChooseMazeAbilityScRsp = 1006; + CmdEnterMazeCsReq = 1007; + CmdEnterMazeScRsp = 1008; + CmdMazeBuffScNotify = 1011; + CmdCastMazeSkillCsReq = 1012; + CmdCastMazeSkillScRsp = 1013; + CmdMazePlaneEventScNotify = 1014; + CmdEnterMazeByServerScNotify = 1015; + CmdGetMazeMapInfoCsReq = 1016; + CmdGetMazeMapInfoScRsp = 1017; +} + +enum MazeBuffOp { + MAZE_BUFF_OP_NONE = 0; + MAZE_BUFF_OP_ADD = 1; + MAZE_BUFF_OP_DEL = 2; +} + +message GetMissionDataCsReq {} + +message Mission { + uint32 id = 1; + MissionStatus status = 2; + uint32 progress = 3; +} + +message GetMissionDataScRsp { + uint32 retcode = 1; + repeated Mission mission_list = 2; + repeated uint32 finished_main_mission_id_list = 3; +} + +message FinishTalkMissionCsReq { string talk_str = 1; } + +message FinishTalkMissionScRsp { + uint32 retcode = 1; + string talk_str = 2; +} + +message MissionRewardScNotify { + uint32 main_mission_id = 1; + RewardData reward = 2; +} + +message SyncTaskCsReq { string key = 1; } + +message SyncTaskScRsp { + uint32 retcode = 1; + string key = 2; +} + +message DailyTask { + uint32 main_mission_id = 1; + bool is_finished = 2; +} + +message DailyTaskDataScNotify { + bool is_taken_extra_reward = 1; + uint32 finished_num = 2; + repeated DailyTask daily_task_list = 3; +} + +message TakeDailyTaskExtraRewardCsReq {} + +message TakeDailyTaskExtraRewardScRsp { + uint32 retcode = 1; + RewardData reward = 2; +} + +message DailyTaskRewardScNotify { + uint32 count = 1; + RewardData reward = 2; +} + +message MissionGroupWarnScNotify { repeated uint32 group_id_list = 1; } + +message FinishCosumeItemMissionCsReq { uint32 sub_mission_id = 1; } + +message FinishCosumeItemMissionScRsp { + uint32 retcode = 1; + uint32 sub_mission_id = 2; +} + +enum CmdMissionType { + CmdMissionTypeNone = 0; + CmdGetMissionDataCsReq = 1201; + CmdGetMissionDataScRsp = 1202; + CmdFinishTalkMissionCsReq = 1203; + CmdFinishTalkMissionScRsp = 1204; + CmdMissionRewardScNotify = 1205; + CmdSyncTaskCsReq = 1206; + CmdSyncTaskScRsp = 1207; + CmdDailyTaskDataScNotify = 1208; + CmdTakeDailyTaskExtraRewardCsReq = 1209; + CmdTakeDailyTaskExtraRewardScRsp = 1210; + CmdDailyTaskRewardScNotify = 1211; + CmdMissionGroupWarnScNotify = 1212; + CmdFinishCosumeItemMissionCsReq = 1213; + CmdFinishCosumeItemMissionScRsp = 1214; +} + +message PlayerLoginCsReq { + PlatformType platform = 1; + string cps = 2; + string device_uuid = 3; + string device_info = 4; + string system_info = 5; + string client_version = 6; + LanguageType language = 7; + uint32 last_server_packet_id = 8; + string check_sum_1 = 9; + string check_sum_2 = 10; + string signature = 11; + string resolution = 12; + uint64 login_random = 13; + string system_language = 14; + uint32 res_version = 15; +} + +message PlayerLoginScRsp { + uint32 retcode = 1; + bool is_new_player = 2; + PlayerBasicInfo basic_info = 3; + uint64 server_timestamp_ms = 4; + uint32 stamina = 5; + bool is_relay = 6; + uint64 login_random = 7; +} + +message PlayerLogoutCsReq {} + +message PlayerGetTokenCsReq { + uint32 channel_id = 1; + string account_uid = 2; + string token = 3; + uint32 uid = 4; + string device = 5; +} + +message PlayerGetTokenScRsp { + uint32 retcode = 1; + uint32 uid = 2; + BlackInfo black_info = 3; + string msg = 4; + uint64 secret_key_seed = 5; +} + +message PlayerKeepAliveNotify {} + +message GmTalkScNotify { string msg = 1; } + +message PlayerKickOutScNotify { + KickType kick_type = 1; + enum KickType { + KICK_SQUEEZED = 0; + KICK_BLACK = 1; + KICK_CHANGE_PWD = 2; + } + + BlackInfo black_info = 2; +} + +message GmTalkCsReq { string msg = 1; } + +message GmTalkScRsp { + uint32 retcode = 1; + string retmsg = 2; +} + +message GetStaminaExchangeCsReq {} + +message GetStaminaExchangeScRsp { + uint32 retcode = 1; + uint32 next_recover_time = 2; + uint32 exchange_times = 3; +} + +message ExchangeStaminaCsReq {} + +message ExchangeStaminaScRsp { + uint32 retcode = 1; + uint32 stamina_add = 2; + repeated ItemCost item_cost_list = 3; + uint32 last_recover_time = 4; + uint32 exchange_times = 5; +} + +message GetAuthkeyCsReq { + string auth_appid = 1; + uint32 sign_type = 2; + uint32 authkey_ver = 3; +} + +message GetAuthkeyScRsp { + uint32 retcode = 1; + string authkey = 2; + string auth_appid = 3; + uint32 sign_type = 4; + uint32 authkey_ver = 5; +} + +message RegionStopScNotify { + uint32 stop_begin_time = 1; + uint32 stop_end_time = 2; +} + +message AntiAddictScNotify { + uint32 msg_type = 1; + string msg = 2; + string level = 3; +} + +message SetNicknameCsReq { + string nickname = 1; + bool is_modify = 2; +} + +message SetNicknameScRsp { uint32 retcode = 1; } + +message GetLevelRewardTakenListCsReq {} + +message GetLevelRewardTakenListScRsp { + uint32 retcode = 1; + repeated uint32 taken_level_list = 2; +} + +message GetLevelRewardCsReq { uint32 level = 1; } + +message GetLevelRewardScRsp { + uint32 retcode = 1; + RewardData reward = 2; +} + +message SyncTimeCsReq { uint64 client_time_ms = 1; } + +message SyncTimeScRsp { + uint32 retcode = 1; + uint64 client_time_ms = 2; + uint64 server_time_ms = 3; +} + +message SetLanguageCsReq { LanguageType language = 1; } + +message SetLanguageScRsp { + uint32 retcode = 1; + LanguageType language = 2; +} + +message AnnounceData { + uint32 config_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + string center_system_text = 4; + string count_down_text = 5; + string dungeon_confirm_text = 6; + uint32 center_system_frequency = 7; + uint32 count_down_frequency = 8; + bool is_center_system_last_5_every_minutes = 9; +} + +message ServerAnnounceNotify { repeated AnnounceData announce_data_list = 1; } + +enum CmdPlayerType { + CmdPlayerTypeNone = 0; + CmdPlayerLoginCsReq = 1; + CmdPlayerLoginScRsp = 2; + CmdPlayerLogoutCsReq = 3; + CmdPlayerLogoutScRsp = 4; + CmdPlayerGetTokenCsReq = 5; + CmdPlayerGetTokenScRsp = 6; + CmdPlayerKeepAliveNotify = 7; + CmdGmTalkScNotify = 8; + CmdPlayerKickOutScNotify = 9; + CmdGmTalkCsReq = 10; + CmdGmTalkScRsp = 11; + CmdGetStaminaExchangeCsReq = 12; + CmdGetStaminaExchangeScRsp = 13; + CmdExchangeStaminaCsReq = 14; + CmdExchangeStaminaScRsp = 15; + CmdGetAuthkeyCsReq = 16; + CmdGetAuthkeyScRsp = 17; + CmdRegionStopScNotify = 18; + CmdAntiAddictScNotify = 19; + CmdSetNicknameCsReq = 20; + CmdSetNicknameScRsp = 21; + CmdGetLevelRewardTakenListCsReq = 22; + CmdGetLevelRewardTakenListScRsp = 23; + CmdGetLevelRewardCsReq = 24; + CmdGetLevelRewardScRsp = 25; + CmdSyncTimeCsReq = 26; + CmdSyncTimeScRsp = 27; + CmdSetLanguageCsReq = 28; + CmdSetLanguageScRsp = 29; + CmdServerAnnounceNotify = 30; +} + +enum AuthkeySignType { + AUTHKEY_SIGN_TYPE_NONE = 0; + AUTHKEY_SIGN_TYPE_DEFAULT = 1; + AUTHKEY_SIGN_TYPE_RSA = 2; +} + +message FinishPlotCsReq { uint32 plot_id = 1; } + +message FinishPlotScRsp { + uint32 retcode = 1; + uint32 plot_id = 2; +} + +enum CmdPlotType { + CmdPlotTypeNone = 0; + CmdFinishPlotCsReq = 1101; + CmdFinishPlotScRsp = 1102; +} + +message GetQuestDataCsReq {} + +message Quest { + uint32 id = 1; + QuestStatus status = 2; + uint32 progress = 3; +} + +message GetQuestDataScRsp { + uint32 retcode = 1; + repeated Quest quest_list = 2; +} + +message TakeQuestRewardCsReq { repeated uint32 quest_id_list = 1; } + +message TakeQuestRewardScRsp { + uint32 retcode = 1; + RewardData reward = 2; + repeated uint32 succ_quest_id_list = 3; +} + +enum CmdQuestType { + CmdQuestTypeNone = 0; + CmdGetQuestDataCsReq = 901; + CmdGetQuestDataScRsp = 902; + CmdTakeQuestRewardCsReq = 903; + CmdTakeQuestRewardScRsp = 904; +} + +enum QuestStatus { + QUEST_NONE = 0; + QUEST_DOING = 1; + QUEST_FINISH = 2; + QUEST_CLOSE = 3; + QUEST_DELETE = 4; +} + +message Vector { + sint32 x = 1; + sint32 y = 2; + sint32 z = 3; +} + +message MotionInfo { + Vector pos = 1; + Vector rot = 2; +} + +message SceneActorInfo { + uint32 uid = 1; + AvatarType avatar_type = 2; + uint32 avatar_id = 3; +} + +message SceneNpcMonsterInfo { + uint32 monster_id = 1; + bool is_gen_monster = 2; +} + +message SceneNpcInfo { uint32 npc_id = 1; } + +message ScenePropInfo { + uint32 prop_id = 1; + uint32 prop_state = 2; + uint64 create_time_ms = 3; + uint32 life_time_ms = 4; +} + +message SceneEntityInfo { + uint32 entity_id = 1; + MotionInfo motion = 2; + uint32 group_id = 3; + uint32 inst_id = 4; + + oneof entity { + SceneActorInfo actor = 5; + SceneNpcMonsterInfo npc_monster = 6; + SceneNpcInfo npc = 7; + ScenePropInfo prop = 8; + } +} + +message BuffInfo { + uint32 buff_id = 1; + uint32 level = 2; + uint64 add_time_ms = 3; + float life_time = 4; + uint32 count = 5; + uint32 caster_avatar_id = 6; + map dynamic_values = 7; +} + +message SceneInfo { + uint32 map_id = 1; + uint32 plane_id = 2; + uint32 floor_id = 3; + repeated SceneEntityInfo entity_list = 4; + repeated uint32 lighten_section_list = 5; + uint32 leader_entity_id = 6; + uint32 entry_id = 7; + repeated BuffInfo env_buff_list = 8; +} + +message EntityMotion { + uint32 entity_id = 1; + MotionInfo motion = 2; +} + +message SceneEntityMoveCsReq { + repeated EntityMotion entity_motion_list = 1; + uint32 entry_id = 2; +} + +message SceneEntityMoveScRsp { uint32 retcode = 1; } + +message SceneEntityMoveScNotify { + uint32 entity_id = 1; + MotionInfo motion = 2; +} + +message InteractPropCsReq { + uint32 prop_entity_id = 1; + uint32 interact_id = 2; +} + +message InteractPropScRsp { + uint32 retcode = 1; + uint32 prop_entity_id = 2; + uint32 prop_state = 3; +} + +message SceneCastSkillCsReq { + uint32 cast_entity_id = 1; + uint32 skill_index = 2; + uint32 ability_target_entity_id = 3; + repeated uint32 hit_target_entity_id_list = 4; + repeated uint32 assist_monster_entity_id_list = 5; + MotionInfo target_motion = 6; +} + +message SceneCastSkillScRsp { + uint32 retcode = 1; + SceneBattleInfo battle_info = 2; +} + +message SceneEnterStageCsReq { uint32 stage_id = 1; } + +message SceneEnterStageScRsp { + uint32 retcode = 1; + SceneBattleInfo battle_info = 2; +} + +message GetCurSceneInfoCsReq {} + +message GetCurSceneInfoScRsp { + uint32 retcode = 1; + SceneInfo scene = 2; +} + +message SceneEntityUpdateScNotify { repeated SceneEntityInfo entity_list = 1; } + +message SceneEntityDisappearScNotify { repeated uint32 entity_id_list = 1; } + +message WaitCustomStringCsReq { + string custom_string = 3; + + oneof key { + uint32 prop_entity_id = 1; + uint32 sub_mission_id = 2; + } +} + +message WaitCustomStringScRsp { + uint32 retcode = 1; + string custom_string = 4; + + oneof key { + uint32 prop_entity_id = 2; + uint32 sub_mission_id = 3; + } +} + +message SpringTransferCsReq { + uint32 plane_id = 1; + uint32 floor_id = 2; + uint32 prop_entity_id = 3; +} + +message SpringTransferScRsp { uint32 retcode = 1; } + +message UpdateBuffScNotify { + uint32 entity_id = 1; + BuffInfo buff = 2; +} + +message DelBuffScNotify { + uint32 entity_id = 1; + uint32 buff_id = 2; +} + +message SpringRefreshCsReq { + uint32 plane_id = 1; + uint32 floor_id = 2; + uint32 prop_entity_id = 3; +} + +message SpringRefreshScRsp { uint32 retcode = 1; } + +message LastSpringRefreshTimeNotify { uint32 last_time = 1; } + +message ReturnLastTownCsReq {} + +message ReturnLastTownScRsp { + uint32 retcode = 1; + SceneInfo scene = 2; +} + +message EnterSectionCsReq { uint32 section_id = 1; } + +message EnterSectionScRsp { uint32 retcode = 1; } + +message SetCurInteractEntityCsReq { uint32 entity_id = 1; } + +message SetCurInteractEntityScRsp { uint32 retcode = 1; } + +message RecoverAllLineupCsReq {} + +message RecoverAllLineupScRsp { uint32 retcode = 1; } + +message SavePointsInfoNotify { + uint32 valid_times = 1; + uint32 refresh_time = 2; +} + +message StartCocoonStageCsReq { + uint32 prop_entity_id = 1; + uint32 cocoon_id = 2; + uint32 wave = 3; +} + +message StartCocoonStageScRsp { + uint32 retcode = 1; + SceneBattleInfo battle_info = 2; + uint32 prop_entity_id = 3; + uint32 cocoon_id = 4; + uint32 wave = 5; +} + +message EntityBindPropCsReq { + bool is_bind = 1; + MotionInfo motion = 2; +} + +message EntityBindPropScRsp { uint32 retcode = 1; } + +message SetClientPausedCsReq { bool paused = 1; } + +message SetClientPausedScRsp { + uint32 retcode = 1; + bool paused = 2; +} + +message PropBeHitCsReq { uint32 prop_entity_id = 1; } + +message PropBeHitScRsp { + uint32 retcode = 1; + uint32 prop_entity_id = 2; +} + +enum CmdSceneType { + CmdSceneTypeNone = 0; + CmdSceneEntityMoveCsReq = 1401; + CmdSceneEntityMoveScRsp = 1402; + CmdInteractPropCsReq = 1403; + CmdInteractPropScRsp = 1404; + CmdSceneCastSkillCsReq = 1405; + CmdSceneCastSkillScRsp = 1406; + CmdGetCurSceneInfoCsReq = 1407; + CmdGetCurSceneInfoScRsp = 1408; + CmdSceneEntityUpdateScNotify = 1409; + CmdSceneEntityDisappearScNotify = 1410; + CmdSceneEntityMoveScNotify = 1411; + CmdWaitCustomStringCsReq = 1412; + CmdWaitCustomStringScRsp = 1413; + CmdSpringTransferCsReq = 1414; + CmdSpringTransferScRsp = 1415; + CmdUpdateBuffScNotify = 1416; + CmdDelBuffScNotify = 1417; + CmdSpringRefreshCsReq = 1418; + CmdSpringRefreshScRsp = 1419; + CmdLastSpringRefreshTimeNotify = 1420; + CmdReturnLastTownCsReq = 1421; + CmdReturnLastTownScRsp = 1422; + CmdSceneEnterStageCsReq = 1423; + CmdSceneEnterStageScRsp = 1424; + CmdEnterSectionCsReq = 1427; + CmdEnterSectionScRsp = 1428; + CmdSetCurInteractEntityCsReq = 1431; + CmdSetCurInteractEntityScRsp = 1432; + CmdRecoverAllLineupCsReq = 1433; + CmdRecoverAllLineupScRsp = 1434; + CmdSavePointsInfoNotify = 1435; + CmdStartCocoonStageCsReq = 1436; + CmdStartCocoonStageScRsp = 1437; + CmdEntityBindPropCsReq = 1438; + CmdEntityBindPropScRsp = 1439; + CmdSetClientPausedCsReq = 1440; + CmdSetClientPausedScRsp = 1441; + CmdPropBeHitCsReq = 1442; + CmdPropBeHitScRsp = 1443; +} + +message Shop { + uint32 shop_id = 1; + uint32 begin_time = 2; + uint32 end_time = 3; + repeated Goods goods_list = 4; +} + +message Goods { + uint32 goods_id = 1; + uint32 buy_times = 2; + uint32 begin_time = 3; + uint32 end_time = 4; +} + +message GetShopListCsReq { uint32 shop_type = 1; } + +message GetShopListScRsp { + uint32 retcode = 1; + repeated Shop shop_list = 2; + uint32 shop_type = 3; +} + +message BuyGoodsCsReq { + uint32 shop_id = 1; + uint32 goods_id = 2; + uint32 goods_num = 3; +} + +message BuyGoodsScRsp { + uint32 retcode = 1; + uint32 shop_id = 2; + uint32 goods_id = 3; + uint32 goods_buy_times = 4; +} + +enum CmdShopType { + CmdShopTypeNone = 0; + CmdGetShopListCsReq = 1501; + CmdGetShopListScRsp = 1502; + CmdBuyGoodsCsReq = 1503; + CmdBuyGoodsScRsp = 1504; +} + +message Stage { + uint32 id = 1; + uint32 win_times = 2; + uint32 challenge_value = 3; +} + +message GetStageDataCsReq { repeated uint32 stage_id_list = 1; } + +message GetStageDataScRsp { + uint32 retcode = 1; + repeated Stage stage_list = 2; + bool is_all = 3; +} + +message StageBeginCsReq { + uint32 stage_id = 1; + uint32 lineup_index = 2; +} + +message StageBeginScRsp { + uint32 retcode = 1; + uint32 logic_random_seed = 2; + uint32 stage_id = 3; + repeated BattleAvatar battle_avatar_list = 4; +} + +enum CmdStageType { + CmdStageTypeNone = 0; + CmdGetStageDataCsReq = 201; + CmdGetStageDataScRsp = 202; + CmdStageBeginCsReq = 203; + CmdStageBeginScRsp = 204; +} + +message BasicModuleSync { uint32 stamina = 1; } + +message AvatarSync { repeated Avatar avatar_list = 1; } + +message MissionSync { + repeated Mission mission_list = 1; + repeated uint32 finished_main_mission_id_list = 2; + repeated uint32 del_mission_id_list = 3; + repeated uint32 del_main_mission_id_list = 4; +} + +message PlayerSyncScNotify { + PlayerBasicInfo basic_info = 1; + AvatarSync avatar_sync = 2; + repeated Equipment equipment_list = 3; + repeated uint32 del_equipment_list = 4; + repeated Material material_list = 5; + repeated Quest quest_list = 6; + MissionSync mission_sync = 7; + BasicModuleSync basic_module_sync = 8; +} + +enum CmdPlayerSyncType { + CmdPlayerSyncNone = 0; + CmdPlayerSyncScNotify = 601; +} + +message Tutorial { + uint32 id = 1; + TutorialStatus status = 2; +} + +message TutorialGuide { + uint32 id = 1; + TutorialStatus status = 2; +} + +message GetTutorialCsReq {} + +message GetTutorialScRsp { + uint32 retcode = 1; + repeated Tutorial tutorial_list = 2; +} + +message GetTutorialGuideCsReq {} + +message GetTutorialGuideScRsp { + uint32 retcode = 1; + repeated TutorialGuide tutorial_guide_list = 2; +} + +message UnlockTutorialCsReq { uint32 tutorial_id = 1; } + +message UnlockTutorialScRsp { + uint32 retcode = 1; + Tutorial tutorial = 2; +} + +message UnlockTutorialGuideCsReq { uint32 group_id = 1; } + +message UnlockTutorialGuideScRsp { + uint32 retcode = 1; + TutorialGuide tutorial_guide = 2; +} + +message FinishTutorialCsReq { uint32 tutorial_id = 1; } + +message FinishTutorialScRsp { + uint32 retcode = 1; + Tutorial tutorial = 2; +} + +message FinishTutorialGuideCsReq { uint32 group_id = 1; } + +message FinishTutorialGuideScRsp { + uint32 retcode = 1; + TutorialGuide tutorial_guide = 2; + RewardData reward = 3; +} + +enum CmdTutorialType { + CmdTutorialTypeNone = 0; + CmdGetTutorialCsReq = 1601; + CmdGetTutorialScRsp = 1602; + CmdGetTutorialGuideCsReq = 1603; + CmdGetTutorialGuideScRsp = 1604; + CmdUnlockTutorialCsReq = 1605; + CmdUnlockTutorialScRsp = 1606; + CmdUnlockTutorialGuideCsReq = 1607; + CmdUnlockTutorialGuideScRsp = 1608; + CmdFinishTutorialCsReq = 1609; + CmdFinishTutorialScRsp = 1610; + CmdFinishTutorialGuideCsReq = 1611; + CmdFinishTutorialGuideScRsp = 1612; +} + +enum TutorialStatus { + TUTORIAL_NONE = 0; + TUTORIAL_UNLOCK = 1; + TUTORIAL_FINISH = 2; +} + +message Waypoint { + uint32 id = 1; + uint32 finish_times = 2; + bool is_new = 3; +} + +message ChapterBrief { + uint32 id = 1; + uint32 finish_challenge_num = 2; + repeated uint32 taken_reward_id_list = 3; + bool is_new = 4; +} + +message Chapter { + ChapterBrief brief_info = 1; + repeated Waypoint waypoint_list = 2; +} + +message GetWaypointCsReq { uint32 chapter_id = 1; } + +message GetWaypointScRsp { + uint32 retcode = 1; + Chapter chapter = 2; + uint32 cur_waypoint_id = 3; +} + +message SetCurWaypointCsReq { uint32 waypoint_id = 1; } + +message SetCurWaypointScRsp { + uint32 retcode = 1; + uint32 cur_waypoint_id = 2; +} + +message GetChapterCsReq {} + +message GetChapterScRsp { + uint32 retcode = 1; + repeated ChapterBrief chapter_list = 2; + uint32 cur_waypoint_id = 3; +} + +message WaypointShowNewCsNotify { + uint32 waypoint_id = 1; + uint32 chapter_id = 2; +} + +message TakeChapterRewardCsReq { + uint32 chapter_id = 1; + uint32 chapter_reward_id = 2; +} + +message TakeChapterRewardScRsp { + uint32 retcode = 1; + uint32 chapter_id = 2; + uint32 chapter_reward_id = 3; +} + +enum CmdWaypointType { + CmdWaypointTypeNone = 0; + CmdGetWaypointCsReq = 401; + CmdGetWaypointScRsp = 402; + CmdSetCurWaypointCsReq = 403; + CmdSetCurWaypointScRsp = 404; + CmdGetChapterCsReq = 405; + CmdGetChapterScRsp = 406; + CmdWaypointShowNewCsNotify = 407; + CmdTakeChapterRewardCsReq = 408; + CmdTakeChapterRewardScRsp = 409; +} + +enum WaypointType { + WAYPOINT_TYPE_NONE = 0; + WAYPOINT_TYPE_STAGE = 1; + WAYPOINT_TYPE_PLOT = 2; +} + +enum WaypointUnlockType { + WAYPOINT_UNLOCK_NONE = 0; + WAYPOINT_UNLOCK_PRE = 1; + WAYPOINT_UNLOCK_LEVEL = 2; +} + +message PacketHead { + uint32 packet_id = 1; + uint32 sign_type = 2; + uint32 sign = 3; + uint32 user_id = 4; + uint32 src_addr = 5; + uint32 dst_addr = 6; + uint32 dispatch_type = 7; + uint32 server_type = 8; + uint32 dispatch_key = 9; + uint32 user_session_id = 10; + uint32 id = 11; + uint32 coroutine_id = 12; + uint32 hop_cnt = 13; +} + +enum DispatchType { + DISPATCH_TYPE_NONE = 0; + DISPATCH_TYPE_BY_ADDR = 1; + DISPATCH_TYPE_BY_MOD = 2; + DISPATCH_TYPE_BY_RAND = 3; + DISPATCH_TYPE_BY_CHASH = 4; + DISPATCH_TYPE_BY_STICKY_SESSION = 5; + DISPATCH_TYPE_BY_OBJECT = 6; +} \ No newline at end of file diff --git a/RPG.Network.Proto/server_only.proto b/RPG.Network.Proto/server_only.proto new file mode 100644 index 0000000..c892c55 --- /dev/null +++ b/RPG.Network.Proto/server_only.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +option csharp_namespace = "RPG.Network.Proto"; + +enum RPGServiceType +{ + SERVICE_TYPE_NONE = 0; + SERVICE_TYPE_SDK = 1; + SERVICE_TYPE_GATESERVER = 2; + SERVICE_TYPE_GAMESERVER = 3; +} + +message ActionMetadata +{ + RPGServiceType sender_type = 1; + uint64 session_id = 2; + uint32 player_uid = 3; +} + +message ForwardGameMessageNotify +{ + uint32 cmd_type = 1; + bytes payload = 2; +} \ No newline at end of file diff --git a/RPG.Services.Core/RPG.Services.Core.csproj b/RPG.Services.Core/RPG.Services.Core.csproj new file mode 100644 index 0000000..6b584d4 --- /dev/null +++ b/RPG.Services.Core/RPG.Services.Core.csproj @@ -0,0 +1,18 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + diff --git a/RPG.Services.Core/RPGServiceBase.cs b/RPG.Services.Core/RPGServiceBase.cs new file mode 100644 index 0000000..6a29dd4 --- /dev/null +++ b/RPG.Services.Core/RPGServiceBase.cs @@ -0,0 +1,15 @@ +using Microsoft.Extensions.Hosting; + +namespace RPG.Services.Core; +public abstract class RPGServiceBase : IHostedService +{ + public virtual Task StartAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public virtual Task StopAsync(CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} diff --git a/RPG.Services.Gameserver/Program.cs b/RPG.Services.Gameserver/Program.cs new file mode 100644 index 0000000..98f13a6 --- /dev/null +++ b/RPG.Services.Gameserver/Program.cs @@ -0,0 +1,9 @@ +namespace RPG.Services.Gameserver; + +internal class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + } +} diff --git a/RPG.Services.Gameserver/RPG.Services.Gameserver.csproj b/RPG.Services.Gameserver/RPG.Services.Gameserver.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/RPG.Services.Gameserver/RPG.Services.Gameserver.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/RPG.Services.Gateserver/Program.cs b/RPG.Services.Gateserver/Program.cs new file mode 100644 index 0000000..00230ad --- /dev/null +++ b/RPG.Services.Gateserver/Program.cs @@ -0,0 +1,9 @@ +namespace RPG.Services.Gateserver; + +internal class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + } +} diff --git a/RPG.Services.Gateserver/RPG.Services.Gateserver.csproj b/RPG.Services.Gateserver/RPG.Services.Gateserver.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/RPG.Services.Gateserver/RPG.Services.Gateserver.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/RPG.Services.SDK/Handlers/AuthHandler.cs b/RPG.Services.SDK/Handlers/AuthHandler.cs new file mode 100644 index 0000000..18e6763 --- /dev/null +++ b/RPG.Services.SDK/Handlers/AuthHandler.cs @@ -0,0 +1,59 @@ +using Microsoft.AspNetCore.Http.HttpResults; +using RPG.Services.SDK.Models.Auth; + +namespace RPG.Services.SDK.Handlers; + +public static class AuthHandler +{ + public static JsonHttpResult LoginWithPassword(string productName) + { + _ = productName; + + return TypedResults.Json(new MdkLoginRsp + { + Retcode = 0, + Message = "OK", + Data = new MdkLoginRsp.LoginData + { + Account = new MdkLoginRsp.MdkAccount + { + Name = "Snowflake Player", + Token = "mostsecuretokenever", + Uid = "1337" + } + } + }); + } + + public static JsonHttpResult OnGranterVerification(string productName) + { + _ = productName; + + return TypedResults.Json(new GranterVerificationRsp + { + Retcode = 0, + Message = "OK", + Data = new GranterVerificationRsp.GranterData + { + ComboId = 1, + OpenId = 1337, + ComboToken = "mostsecuretokenever", + AccountType = 1 + } + }); + } + + public static JsonHttpResult OnRiskyApiCheck() + { + return TypedResults.Json(new RiskyApiCheckRsp + { + Retcode = 0, + Message = "OK", + Data = new RiskyApiCheckRsp.Info + { + Id = "06611ed14c3131a676b19c0d34c0644b", + Action = "ACTION_NONE" + } + }); + } +} diff --git a/RPG.Services.SDK/Handlers/DispatchHandler.cs b/RPG.Services.SDK/Handlers/DispatchHandler.cs new file mode 100644 index 0000000..c6d03bf --- /dev/null +++ b/RPG.Services.SDK/Handlers/DispatchHandler.cs @@ -0,0 +1,52 @@ +using Microsoft.AspNetCore.Http.HttpResults; +using RPG.Services.SDK.Models; +using RPG.Services.SDK.Models.Region; + +namespace RPG.Services.SDK.Handlers; + +public static class DispatchHandler +{ + private const string QueryGatewayUrl = "http://127.0.0.1:8888/query_gateway"; + + public static JsonHttpResult OnQueryDispatch() + { + return TypedResults.Json(new QueryDispatchHttpRsp + { + Retcode = 0, + TopServerRegionName = "Snowflake", + RegionList = + [ + new RegionInfo + { + EnvType = "2", + DispatchUrl = QueryGatewayUrl, + Name = "Snowflake", + Title = "Snowflake" + } + ] + }); + } + + public static JsonHttpResult OnQueryGateway() + { + return TypedResults.Json(new QueryGatewayHttpRsp + { + Retcode = 0, + Message = "OK", + AsbRelogin = 1, + RegionName = "Snowflake", + Gateway = new GatewayInfo + { + Ip = "127.0.0.1", + Port = 20301 + }, + Ext = new ExtAssetInfo + { + UpdateStreamingAsb = "0", + DataUseAssetBundle = "0", + ForbidRecharge = "0", + ResUseAssetBundle = "0" + } + }); + } +} diff --git a/RPG.Services.SDK/Models/Auth/GranterVerificationRsp.cs b/RPG.Services.SDK/Models/Auth/GranterVerificationRsp.cs new file mode 100644 index 0000000..0773a90 --- /dev/null +++ b/RPG.Services.SDK/Models/Auth/GranterVerificationRsp.cs @@ -0,0 +1,42 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Auth; + +public record GranterVerificationRsp +{ + [JsonPropertyName("retcode")] + public required int Retcode { get; init; } + + [JsonPropertyName("message")] + public required string Message { get; init; } + + [JsonPropertyName("data")] + public GranterData? Data { get; init; } + + public record GranterData + { + [JsonPropertyName("combo_id")] + public required int ComboId { get; init; } + + [JsonPropertyName("open_id")] + public required int OpenId { get; init; } + + [JsonPropertyName("combo_token")] + public required string ComboToken { get; init; } + + [JsonPropertyName("heartbeat")] + public bool Heartbeat { get; init; } + + [JsonPropertyName("account_type")] + public required int AccountType { get; init; } + + [JsonPropertyName("data")] + public GuestLoginData Data { get; } = new(); + } + + public record GuestLoginData + { + [JsonPropertyName("guest")] + public bool Guest { get; init; } + } +} diff --git a/RPG.Services.SDK/Models/Auth/MdkLoginRsp.cs b/RPG.Services.SDK/Models/Auth/MdkLoginRsp.cs new file mode 100644 index 0000000..c51be48 --- /dev/null +++ b/RPG.Services.SDK/Models/Auth/MdkLoginRsp.cs @@ -0,0 +1,33 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Auth; + +public record MdkLoginRsp +{ + [JsonPropertyName("retcode")] + public required int Retcode { get; init; } + + [JsonPropertyName("message")] + public required string Message { get; init; } + + [JsonPropertyName("data")] + public required LoginData Data { get; init; } + + public record MdkAccount + { + [JsonPropertyName("name")] + public required string Name { get; init; } + + [JsonPropertyName("token")] + public required string Token { get; init; } + + [JsonPropertyName("uid")] + public required string Uid { get; init; } + } + + public record LoginData + { + [JsonPropertyName("account")] + public MdkAccount? Account { get; init; } + } +} diff --git a/RPG.Services.SDK/Models/Auth/RiskyApiCheckRsp.cs b/RPG.Services.SDK/Models/Auth/RiskyApiCheckRsp.cs new file mode 100644 index 0000000..9f873a1 --- /dev/null +++ b/RPG.Services.SDK/Models/Auth/RiskyApiCheckRsp.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Auth; + +public record RiskyApiCheckRsp +{ + [JsonPropertyName("retcode")] + public required int Retcode { get; init; } + + [JsonPropertyName("message")] + public required string Message { get; init; } + + [JsonPropertyName("data")] + public required Info Data { get; init; } + + public record Info + { + [JsonPropertyName("id")] + public required string Id { get; init; } + + [JsonPropertyName("action")] + public required string Action { get; init; } + } +} diff --git a/RPG.Services.SDK/Models/Region/ExtAssetInfo.cs b/RPG.Services.SDK/Models/Region/ExtAssetInfo.cs new file mode 100644 index 0000000..71b5257 --- /dev/null +++ b/RPG.Services.SDK/Models/Region/ExtAssetInfo.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Region; + +public record ExtAssetInfo +{ + [JsonPropertyName("data_use_asset_bundle")] + public required string DataUseAssetBundle { get; set; } + + [JsonPropertyName("forbid_recharge")] + public required string ForbidRecharge { get; set; } + + [JsonPropertyName("res_use_asset_bundle")] + public required string ResUseAssetBundle { get; set; } + + [JsonPropertyName("update_streaming_asb")] + public required string UpdateStreamingAsb { get; set; } +} diff --git a/RPG.Services.SDK/Models/Region/GatewayInfo.cs b/RPG.Services.SDK/Models/Region/GatewayInfo.cs new file mode 100644 index 0000000..db328ec --- /dev/null +++ b/RPG.Services.SDK/Models/Region/GatewayInfo.cs @@ -0,0 +1,12 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Region; + +public record GatewayInfo +{ + [JsonPropertyName("ip")] + public required string Ip { get; set; } + + [JsonPropertyName("port")] + public required int Port { get; set; } +} diff --git a/RPG.Services.SDK/Models/Region/QueryDispatchHttpRsp.cs b/RPG.Services.SDK/Models/Region/QueryDispatchHttpRsp.cs new file mode 100644 index 0000000..9c93ea4 --- /dev/null +++ b/RPG.Services.SDK/Models/Region/QueryDispatchHttpRsp.cs @@ -0,0 +1,15 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Region; + +public record QueryDispatchHttpRsp +{ + [JsonPropertyName("retcode")] + public int Retcode { get; set; } + + [JsonPropertyName("region_list")] + public List RegionList { get; set; } = []; + + [JsonPropertyName("top_server_region_name")] + public required string TopServerRegionName { get; set; } +} diff --git a/RPG.Services.SDK/Models/Region/QueryGatewayHttpRsp.cs b/RPG.Services.SDK/Models/Region/QueryGatewayHttpRsp.cs new file mode 100644 index 0000000..807425c --- /dev/null +++ b/RPG.Services.SDK/Models/Region/QueryGatewayHttpRsp.cs @@ -0,0 +1,48 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Region; + +public record QueryGatewayHttpRsp +{ + [JsonPropertyName("asb_memo")] + public string AsbMemo { get; set; } = string.Empty; + + [JsonPropertyName("asb_relogin")] + public int AsbRelogin { get; set; } + + [JsonPropertyName("asset_bundle_url")] + public string AssetBundleUrl { get; set; } = string.Empty; + + [JsonPropertyName("client_secret_key")] + public string ClientSecretKey { get; set; } = string.Empty; + + [JsonPropertyName("design_data_memo")] + public string DesignDataMemo { get; set; } = string.Empty; + + [JsonPropertyName("ex_resource_url")] + public string ExResourceUrl { get; set; } = string.Empty; + + [JsonPropertyName("ext")] + public required ExtAssetInfo Ext { get; set; } + + [JsonPropertyName("gateway")] + public required GatewayInfo Gateway { get; set; } + + [JsonPropertyName("lua_url")] + public string LuaUrl { get; set; } = string.Empty; + + [JsonPropertyName("region_name")] + public required string RegionName { get; set; } + + [JsonPropertyName("retcode")] + public required int Retcode { get; set; } + + [JsonPropertyName("message")] + public required string Message { get; set; } + + [JsonPropertyName("stopBeginTime")] + public int StopBeginTime { get; set; } + + [JsonPropertyName("stopEndTime")] + public int StopEndTime { get; set; } +} diff --git a/RPG.Services.SDK/Models/Region/RegionInfo.cs b/RPG.Services.SDK/Models/Region/RegionInfo.cs new file mode 100644 index 0000000..12602dc --- /dev/null +++ b/RPG.Services.SDK/Models/Region/RegionInfo.cs @@ -0,0 +1,18 @@ +using System.Text.Json.Serialization; + +namespace RPG.Services.SDK.Models.Region; + +public record RegionInfo +{ + [JsonPropertyName("env_type")] + public required string EnvType { get; set; } + + [JsonPropertyName("dispatch_url")] + public required string DispatchUrl { get; set; } + + [JsonPropertyName("name")] + public required string Name { get; set; } + + [JsonPropertyName("title")] + public required string Title { get; set; } +} diff --git a/RPG.Services.SDK/Program.cs b/RPG.Services.SDK/Program.cs new file mode 100644 index 0000000..aabf0e5 --- /dev/null +++ b/RPG.Services.SDK/Program.cs @@ -0,0 +1,25 @@ +using RPG.Services.SDK.Handlers; + +namespace RPG.Services.SDK; + +internal static class Program +{ + private static async Task Main(string[] args) + { + Console.Title = "Snowflake | SDK"; + + WebApplicationBuilder builder = WebApplication.CreateBuilder(args); + + builder.WebHost.UseUrls("http://*:8888"); + WebApplication app = builder.Build(); + + app.MapGet("/query_dispatch", DispatchHandler.OnQueryDispatch); + app.MapGet("/query_gateway", DispatchHandler.OnQueryGateway); + + app.MapPost("/account/risky/api/check", AuthHandler.OnRiskyApiCheck); + app.MapPost("/{productName}/mdk/shield/api/login", AuthHandler.LoginWithPassword); + app.MapPost("/{productName}/combo/granter/login/v2/login", AuthHandler.OnGranterVerification); + + await app.RunAsync(); + } +} diff --git a/RPG.Services.SDK/Properties/launchSettings.json b/RPG.Services.SDK/Properties/launchSettings.json new file mode 100644 index 0000000..6ea335a --- /dev/null +++ b/RPG.Services.SDK/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "RPG.Services.SDK": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:52654;http://localhost:52655" + } + } +} \ No newline at end of file diff --git a/RPG.Services.SDK/RPG.Services.SDK.csproj b/RPG.Services.SDK/RPG.Services.SDK.csproj new file mode 100644 index 0000000..791df35 --- /dev/null +++ b/RPG.Services.SDK/RPG.Services.SDK.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/Snowflake.sln b/Snowflake.sln new file mode 100644 index 0000000..5b3e1f1 --- /dev/null +++ b/Snowflake.sln @@ -0,0 +1,67 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.Network.Proto", "RPG.Network.Proto\RPG.Network.Proto.csproj", "{7DA70126-3F73-407B-A024-5856F354FA97}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.GameCore", "RPG.GameCore\RPG.GameCore.csproj", "{74042D70-7EA0-4348-9BDB-D1E5D0FC868A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{0FF9D567-C413-43F0-9EDF-09D4D36154B7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{F199706E-4A92-4A2F-BDDD-25DA4691D43E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.Services.SDK", "RPG.Services.SDK\RPG.Services.SDK.csproj", "{855DA130-974F-4CE8-8DB5-2BD59DC2C3AA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.Services.Gateserver", "RPG.Services.Gateserver\RPG.Services.Gateserver.csproj", "{EB7A2038-E2AF-4565-944C-D850D6AEAEED}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.Services.Gameserver", "RPG.Services.Gameserver\RPG.Services.Gameserver.csproj", "{565F9857-3E97-4363-9A5D-05CED8718116}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RPG.Services.Core", "RPG.Services.Core\RPG.Services.Core.csproj", "{1B434662-DEC9-40C9-A709-CE87026191D9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7DA70126-3F73-407B-A024-5856F354FA97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DA70126-3F73-407B-A024-5856F354FA97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DA70126-3F73-407B-A024-5856F354FA97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DA70126-3F73-407B-A024-5856F354FA97}.Release|Any CPU.Build.0 = Release|Any CPU + {74042D70-7EA0-4348-9BDB-D1E5D0FC868A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74042D70-7EA0-4348-9BDB-D1E5D0FC868A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74042D70-7EA0-4348-9BDB-D1E5D0FC868A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74042D70-7EA0-4348-9BDB-D1E5D0FC868A}.Release|Any CPU.Build.0 = Release|Any CPU + {855DA130-974F-4CE8-8DB5-2BD59DC2C3AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {855DA130-974F-4CE8-8DB5-2BD59DC2C3AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {855DA130-974F-4CE8-8DB5-2BD59DC2C3AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {855DA130-974F-4CE8-8DB5-2BD59DC2C3AA}.Release|Any CPU.Build.0 = Release|Any CPU + {EB7A2038-E2AF-4565-944C-D850D6AEAEED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB7A2038-E2AF-4565-944C-D850D6AEAEED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB7A2038-E2AF-4565-944C-D850D6AEAEED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB7A2038-E2AF-4565-944C-D850D6AEAEED}.Release|Any CPU.Build.0 = Release|Any CPU + {565F9857-3E97-4363-9A5D-05CED8718116}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {565F9857-3E97-4363-9A5D-05CED8718116}.Debug|Any CPU.Build.0 = Debug|Any CPU + {565F9857-3E97-4363-9A5D-05CED8718116}.Release|Any CPU.ActiveCfg = Release|Any CPU + {565F9857-3E97-4363-9A5D-05CED8718116}.Release|Any CPU.Build.0 = Release|Any CPU + {1B434662-DEC9-40C9-A709-CE87026191D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B434662-DEC9-40C9-A709-CE87026191D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B434662-DEC9-40C9-A709-CE87026191D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B434662-DEC9-40C9-A709-CE87026191D9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7DA70126-3F73-407B-A024-5856F354FA97} = {0FF9D567-C413-43F0-9EDF-09D4D36154B7} + {74042D70-7EA0-4348-9BDB-D1E5D0FC868A} = {0FF9D567-C413-43F0-9EDF-09D4D36154B7} + {855DA130-974F-4CE8-8DB5-2BD59DC2C3AA} = {F199706E-4A92-4A2F-BDDD-25DA4691D43E} + {EB7A2038-E2AF-4565-944C-D850D6AEAEED} = {F199706E-4A92-4A2F-BDDD-25DA4691D43E} + {565F9857-3E97-4363-9A5D-05CED8718116} = {F199706E-4A92-4A2F-BDDD-25DA4691D43E} + {1B434662-DEC9-40C9-A709-CE87026191D9} = {0FF9D567-C413-43F0-9EDF-09D4D36154B7} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9B5CE103-882A-419D-8FA3-89C8642687F6} + EndGlobalSection +EndGlobal