diff --git a/titles/pokken/base.py b/titles/pokken/base.py index 6c2bf26..1a9d5da 100644 --- a/titles/pokken/base.py +++ b/titles/pokken/base.py @@ -1,8 +1,10 @@ from datetime import datetime, timedelta import json, logging from typing import Any, Dict +import random -from core.config import CoreConfig +from core.data import Data +from core import CoreConfig from titles.pokken.config import PokkenConfig from titles.pokken.proto import jackal_pb2 @@ -13,6 +15,7 @@ class PokkenBase: self.game_cfg = game_cfg self.version = 0 self.logger = logging.getLogger("pokken") + self.data = Data(core_cfg) def handle_noop(self, request: Any) -> bytes: res = jackal_pb2.Response() @@ -123,7 +126,94 @@ class PokkenBase: ranking.event_end = True ranking.modify_date = int(datetime.now().timestamp() / 1000) res.load_ranking.CopyFrom(ranking) + return res.SerializeToString() + def handle_load_user(self, request: jackal_pb2.Request) -> bytes: + res = jackal_pb2.Response() + res.result = 1 + res.type = jackal_pb2.MessageType.LOAD_USER + access_code = request.load_user.access_code + user_id = self.data.card.get_user_id_from_card(access_code) + + if user_id is None: # TODO: Toggle auto-register + user_id = self.data.user.create_user() + card_id = self.data.card.create_card(user_id, access_code) + + self.logger.info(f"Register new card {access_code} (UserId {user_id}, CardId {card_id})") + + # TODO: Check for user data. For now just treat ever card-in as a new user + + load_usr = jackal_pb2.LoadUserResponseData() + load_usr.commidserv_result = 1 + load_usr.load_hash = 1 + load_usr.cardlock_status = False + load_usr.banapass_id = user_id + load_usr.access_code = access_code + load_usr.new_card_flag = True + load_usr.precedent_release_flag = 0xFFFFFFFF + load_usr.navi_newbie_flag = True + load_usr.navi_enable_flag = True + load_usr.pad_vibrate_flag = True + load_usr.home_region_code = 0 + load_usr.home_loc_name = "" + load_usr.pref_code = 0 + load_usr.trainer_name = "Newb" + str(random.randint(1111,999999)) + load_usr.trainer_rank_point = 0 + load_usr.wallet = 0 + load_usr.fight_money = 0 + load_usr.score_point = 0 + load_usr.grade_max_num = 0 + load_usr.total_play_days = 0 + load_usr.play_date_time = 0 + load_usr.lucky_box_fail_num = 0 + load_usr.event_reward_get_flag = 0 + load_usr.rank_pvp_all = 0 + load_usr.rank_pvp_loc = 0 + load_usr.rank_cpu_all = 0 + load_usr.rank_cpu_loc = 0 + load_usr.rank_event = 0 + load_usr.awake_num = 0 + load_usr.use_support_num = 0 + load_usr.rankmatch_flag = 0 + load_usr.title_text_id = 0 + load_usr.title_plate_id = 0 + load_usr.title_decoration_id = 0 + load_usr.navi_trainer = 0 + load_usr.navi_version_id = 0 + load_usr.aid_skill = 0 + load_usr.comment_text_id = 0 + load_usr.comment_word_id = 0 + load_usr.latest_use_pokemon = 0 + load_usr.ex_ko_num = 0 + load_usr.wko_num = 0 + load_usr.timeup_win_num = 0 + load_usr.cool_ko_num = 0 + load_usr.perfect_ko_num = 0 + load_usr.record_flag = 0 + load_usr.site_register_status = 0 + load_usr.continue_num = 0 + load_usr.event_state = 0 + load_usr.event_id = 0 + load_usr.sp_bonus_category_id_1 = 0 + load_usr.sp_bonus_key_value_1 = 0 + load_usr.sp_bonus_category_id_2 = 0 + load_usr.sp_bonus_key_value_2 = 0 + + res.load_user.CopyFrom(load_usr) + return res.SerializeToString() + + def handle_set_bnpassid_lock(self, data: jackal_pb2.Request) -> bytes: + res = jackal_pb2.Response() + res.result = 1 + res.type = jackal_pb2.MessageType.SET_BNPASSID_LOCK + return res.SerializeToString() + + def handle_save_ingame_log(self, data: jackal_pb2.Request) -> bytes: + res = jackal_pb2.Response() + res.result = 1 + res.type = jackal_pb2.MessageType.SET_BNPASSID_LOCK + return res.SerializeToString() + def handle_matching_noop(self, data: Dict = {}, client_ip: str = "127.0.0.1") -> Dict: return {} diff --git a/titles/pokken/index.py b/titles/pokken/index.py index 42a5a0e..a7a328f 100644 --- a/titles/pokken/index.py +++ b/titles/pokken/index.py @@ -124,7 +124,6 @@ class PokkenServlet(resource.Resource): self.logger.debug(pokken_request) ret = handler(pokken_request) - self.logger.debug(f"Response: {ret}") return ret def handle_matching(self, request: Request) -> bytes: