mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-15 20:27:29 +08:00
reformat with black in preperation for merge to master
This commit is contained in:
@@ -74,27 +74,21 @@ class PokkenBase:
|
||||
|
||||
return res.SerializeToString()
|
||||
|
||||
def handle_save_client_log(
|
||||
self, request: jackal_pb2.Request
|
||||
) -> bytes:
|
||||
def handle_save_client_log(self, request: jackal_pb2.Request) -> bytes:
|
||||
res = jackal_pb2.Response()
|
||||
res.result = 1
|
||||
res.type = jackal_pb2.MessageType.SAVE_CLIENT_LOG
|
||||
|
||||
return res.SerializeToString()
|
||||
|
||||
def handle_check_diagnosis(
|
||||
self, request: jackal_pb2.Request
|
||||
) -> bytes:
|
||||
def handle_check_diagnosis(self, request: jackal_pb2.Request) -> bytes:
|
||||
res = jackal_pb2.Response()
|
||||
res.result = 1
|
||||
res.type = jackal_pb2.MessageType.CHECK_DIAGNOSIS
|
||||
|
||||
return res.SerializeToString()
|
||||
|
||||
def handle_load_client_settings(
|
||||
self, request: jackal_pb2.Request
|
||||
) -> bytes:
|
||||
def handle_load_client_settings(self, request: jackal_pb2.Request) -> bytes:
|
||||
res = jackal_pb2.Response()
|
||||
res.result = 1
|
||||
res.type = jackal_pb2.MessageType.LOAD_CLIENT_SETTINGS
|
||||
@@ -129,26 +123,28 @@ class PokkenBase:
|
||||
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
|
||||
access_code = request.load_user.access_code
|
||||
load_usr = jackal_pb2.LoadUserResponseData()
|
||||
user_id = self.data.card.get_user_id_from_card(access_code)
|
||||
|
||||
if user_id is None and self.game_cfg.server.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})")
|
||||
|
||||
|
||||
self.logger.info(
|
||||
f"Register new card {access_code} (UserId {user_id}, CardId {card_id})"
|
||||
)
|
||||
|
||||
elif user_id is None:
|
||||
self.logger.info(f"Registration of card {access_code} blocked!")
|
||||
res.load_user.CopyFrom(load_usr)
|
||||
return res.SerializeToString()
|
||||
|
||||
|
||||
"""
|
||||
TODO: Add repeated values
|
||||
tutorial_progress_flag
|
||||
@@ -168,12 +164,12 @@ class PokkenBase:
|
||||
load_usr.load_hash = 1
|
||||
load_usr.cardlock_status = False
|
||||
load_usr.banapass_id = user_id
|
||||
load_usr.access_code = access_code
|
||||
load_usr.access_code = access_code
|
||||
load_usr.precedent_release_flag = 0xFFFFFFFF
|
||||
|
||||
|
||||
if profile is None:
|
||||
profile_id = self.data.profile.create_profile(user_id)
|
||||
profile_dict = {'id': profile_id, 'user': user_id}
|
||||
profile_id = self.data.profile.create_profile(user_id)
|
||||
profile_dict = {"id": profile_id, "user": user_id}
|
||||
pokemon_data = []
|
||||
tutorial_progress = []
|
||||
rankmatch_progress = []
|
||||
@@ -181,10 +177,12 @@ class PokkenBase:
|
||||
event_achievement_flag = []
|
||||
event_achievement_param = []
|
||||
load_usr.new_card_flag = True
|
||||
|
||||
|
||||
else:
|
||||
profile_dict = { k: v for k, v in profile._asdict().items() if v is not None }
|
||||
self.logger.info(f"Card-in user {user_id} (Trainer name {profile_dict.get('trainer_name', '')})")
|
||||
profile_dict = {k: v for k, v in profile._asdict().items() if v is not None}
|
||||
self.logger.info(
|
||||
f"Card-in user {user_id} (Trainer name {profile_dict.get('trainer_name', '')})"
|
||||
)
|
||||
pokemon_data = self.data.profile.get_all_pokemon_data(user_id)
|
||||
tutorial_progress = []
|
||||
rankmatch_progress = []
|
||||
@@ -193,76 +191,78 @@ class PokkenBase:
|
||||
event_achievement_param = []
|
||||
load_usr.new_card_flag = False
|
||||
|
||||
load_usr.navi_newbie_flag = profile_dict.get('navi_newbie_flag', True)
|
||||
load_usr.navi_enable_flag = profile_dict.get('navi_enable_flag', True)
|
||||
load_usr.pad_vibrate_flag = profile_dict.get('pad_vibrate_flag', True)
|
||||
load_usr.home_region_code = profile_dict.get('home_region_code', 0)
|
||||
load_usr.home_loc_name = profile_dict.get('home_loc_name', "")
|
||||
load_usr.pref_code = profile_dict.get('pref_code', 0)
|
||||
load_usr.trainer_name = profile_dict.get('trainer_name', "Newb" + str(random.randint(1111,999999)))
|
||||
load_usr.trainer_rank_point = profile_dict.get('trainer_rank_point', 0)
|
||||
load_usr.wallet = profile_dict.get('wallet', 0)
|
||||
load_usr.fight_money = profile_dict.get('fight_money', 0)
|
||||
load_usr.score_point = profile_dict.get('score_point', 0)
|
||||
load_usr.grade_max_num = profile_dict.get('grade_max_num', 0)
|
||||
load_usr.extra_counter = profile_dict.get('extra_counter', 0)
|
||||
load_usr.total_play_days = profile_dict.get('total_play_days', 0)
|
||||
load_usr.play_date_time = profile_dict.get('play_date_time', 0)
|
||||
load_usr.lucky_box_fail_num = profile_dict.get('lucky_box_fail_num', 0)
|
||||
load_usr.event_reward_get_flag = profile_dict.get('event_reward_get_flag', 0)
|
||||
load_usr.rank_pvp_all = profile_dict.get('rank_pvp_all', 0)
|
||||
load_usr.rank_pvp_loc = profile_dict.get('rank_pvp_loc', 0)
|
||||
load_usr.rank_cpu_all = profile_dict.get('rank_cpu_all', 0)
|
||||
load_usr.rank_cpu_loc = profile_dict.get('rank_cpu_loc', 0)
|
||||
load_usr.rank_event = profile_dict.get('rank_event', 0)
|
||||
load_usr.awake_num = profile_dict.get('awake_num', 0)
|
||||
load_usr.use_support_num = profile_dict.get('use_support_num', 0)
|
||||
load_usr.rankmatch_flag = profile_dict.get('rankmatch_flag', 0)
|
||||
load_usr.rankmatch_max = profile_dict.get('rankmatch_max', 0)
|
||||
load_usr.rankmatch_success = profile_dict.get('rankmatch_success', 0)
|
||||
load_usr.beat_num = profile_dict.get('beat_num', 0)
|
||||
load_usr.title_text_id = profile_dict.get('title_text_id', 0)
|
||||
load_usr.title_plate_id = profile_dict.get('title_plate_id', 0)
|
||||
load_usr.title_decoration_id = profile_dict.get('title_decoration_id', 0)
|
||||
load_usr.navi_trainer = profile_dict.get('navi_trainer', 0)
|
||||
load_usr.navi_version_id = profile_dict.get('navi_version_id', 0)
|
||||
load_usr.aid_skill = profile_dict.get('aid_skill', 0)
|
||||
load_usr.comment_text_id = profile_dict.get('comment_text_id', 0)
|
||||
load_usr.comment_word_id = profile_dict.get('comment_word_id', 0)
|
||||
load_usr.latest_use_pokemon = profile_dict.get('latest_use_pokemon', 0)
|
||||
load_usr.ex_ko_num = profile_dict.get('ex_ko_num', 0)
|
||||
load_usr.wko_num = profile_dict.get('wko_num', 0)
|
||||
load_usr.timeup_win_num = profile_dict.get('timeup_win_num', 0)
|
||||
load_usr.cool_ko_num = profile_dict.get('cool_ko_num', 0)
|
||||
load_usr.perfect_ko_num = profile_dict.get('perfect_ko_num', 0)
|
||||
load_usr.record_flag = profile_dict.get('record_flag', 0)
|
||||
load_usr.site_register_status = profile_dict.get('site_register_status', 0)
|
||||
load_usr.continue_num = profile_dict.get('continue_num', 0)
|
||||
load_usr.navi_newbie_flag = profile_dict.get("navi_newbie_flag", True)
|
||||
load_usr.navi_enable_flag = profile_dict.get("navi_enable_flag", True)
|
||||
load_usr.pad_vibrate_flag = profile_dict.get("pad_vibrate_flag", True)
|
||||
load_usr.home_region_code = profile_dict.get("home_region_code", 0)
|
||||
load_usr.home_loc_name = profile_dict.get("home_loc_name", "")
|
||||
load_usr.pref_code = profile_dict.get("pref_code", 0)
|
||||
load_usr.trainer_name = profile_dict.get(
|
||||
"trainer_name", "Newb" + str(random.randint(1111, 999999))
|
||||
)
|
||||
load_usr.trainer_rank_point = profile_dict.get("trainer_rank_point", 0)
|
||||
load_usr.wallet = profile_dict.get("wallet", 0)
|
||||
load_usr.fight_money = profile_dict.get("fight_money", 0)
|
||||
load_usr.score_point = profile_dict.get("score_point", 0)
|
||||
load_usr.grade_max_num = profile_dict.get("grade_max_num", 0)
|
||||
load_usr.extra_counter = profile_dict.get("extra_counter", 0)
|
||||
load_usr.total_play_days = profile_dict.get("total_play_days", 0)
|
||||
load_usr.play_date_time = profile_dict.get("play_date_time", 0)
|
||||
load_usr.lucky_box_fail_num = profile_dict.get("lucky_box_fail_num", 0)
|
||||
load_usr.event_reward_get_flag = profile_dict.get("event_reward_get_flag", 0)
|
||||
load_usr.rank_pvp_all = profile_dict.get("rank_pvp_all", 0)
|
||||
load_usr.rank_pvp_loc = profile_dict.get("rank_pvp_loc", 0)
|
||||
load_usr.rank_cpu_all = profile_dict.get("rank_cpu_all", 0)
|
||||
load_usr.rank_cpu_loc = profile_dict.get("rank_cpu_loc", 0)
|
||||
load_usr.rank_event = profile_dict.get("rank_event", 0)
|
||||
load_usr.awake_num = profile_dict.get("awake_num", 0)
|
||||
load_usr.use_support_num = profile_dict.get("use_support_num", 0)
|
||||
load_usr.rankmatch_flag = profile_dict.get("rankmatch_flag", 0)
|
||||
load_usr.rankmatch_max = profile_dict.get("rankmatch_max", 0)
|
||||
load_usr.rankmatch_success = profile_dict.get("rankmatch_success", 0)
|
||||
load_usr.beat_num = profile_dict.get("beat_num", 0)
|
||||
load_usr.title_text_id = profile_dict.get("title_text_id", 0)
|
||||
load_usr.title_plate_id = profile_dict.get("title_plate_id", 0)
|
||||
load_usr.title_decoration_id = profile_dict.get("title_decoration_id", 0)
|
||||
load_usr.navi_trainer = profile_dict.get("navi_trainer", 0)
|
||||
load_usr.navi_version_id = profile_dict.get("navi_version_id", 0)
|
||||
load_usr.aid_skill = profile_dict.get("aid_skill", 0)
|
||||
load_usr.comment_text_id = profile_dict.get("comment_text_id", 0)
|
||||
load_usr.comment_word_id = profile_dict.get("comment_word_id", 0)
|
||||
load_usr.latest_use_pokemon = profile_dict.get("latest_use_pokemon", 0)
|
||||
load_usr.ex_ko_num = profile_dict.get("ex_ko_num", 0)
|
||||
load_usr.wko_num = profile_dict.get("wko_num", 0)
|
||||
load_usr.timeup_win_num = profile_dict.get("timeup_win_num", 0)
|
||||
load_usr.cool_ko_num = profile_dict.get("cool_ko_num", 0)
|
||||
load_usr.perfect_ko_num = profile_dict.get("perfect_ko_num", 0)
|
||||
load_usr.record_flag = profile_dict.get("record_flag", 0)
|
||||
load_usr.site_register_status = profile_dict.get("site_register_status", 0)
|
||||
load_usr.continue_num = profile_dict.get("continue_num", 0)
|
||||
|
||||
load_usr.avatar_body = profile_dict.get('avatar_body', 0)
|
||||
load_usr.avatar_gender = profile_dict.get('avatar_gender', 0)
|
||||
load_usr.avatar_background = profile_dict.get('avatar_background', 0)
|
||||
load_usr.avatar_head = profile_dict.get('avatar_head', 0)
|
||||
load_usr.avatar_battleglass = profile_dict.get('avatar_battleglass', 0)
|
||||
load_usr.avatar_face0 = profile_dict.get('avatar_face0', 0)
|
||||
load_usr.avatar_face1 = profile_dict.get('avatar_face1', 0)
|
||||
load_usr.avatar_face2 = profile_dict.get('avatar_face2', 0)
|
||||
load_usr.avatar_bodyall = profile_dict.get('avatar_bodyall', 0)
|
||||
load_usr.avatar_wear = profile_dict.get('avatar_wear', 0)
|
||||
load_usr.avatar_accessory = profile_dict.get('avatar_accessory', 0)
|
||||
load_usr.avatar_stamp = profile_dict.get('avatar_stamp', 0)
|
||||
load_usr.avatar_body = profile_dict.get("avatar_body", 0)
|
||||
load_usr.avatar_gender = profile_dict.get("avatar_gender", 0)
|
||||
load_usr.avatar_background = profile_dict.get("avatar_background", 0)
|
||||
load_usr.avatar_head = profile_dict.get("avatar_head", 0)
|
||||
load_usr.avatar_battleglass = profile_dict.get("avatar_battleglass", 0)
|
||||
load_usr.avatar_face0 = profile_dict.get("avatar_face0", 0)
|
||||
load_usr.avatar_face1 = profile_dict.get("avatar_face1", 0)
|
||||
load_usr.avatar_face2 = profile_dict.get("avatar_face2", 0)
|
||||
load_usr.avatar_bodyall = profile_dict.get("avatar_bodyall", 0)
|
||||
load_usr.avatar_wear = profile_dict.get("avatar_wear", 0)
|
||||
load_usr.avatar_accessory = profile_dict.get("avatar_accessory", 0)
|
||||
load_usr.avatar_stamp = profile_dict.get("avatar_stamp", 0)
|
||||
|
||||
load_usr.event_state = profile_dict.get('event_state', 0)
|
||||
load_usr.event_id = profile_dict.get('event_id', 0)
|
||||
load_usr.sp_bonus_category_id_1 = profile_dict.get('sp_bonus_category_id_1', 0)
|
||||
load_usr.sp_bonus_key_value_1 = profile_dict.get('sp_bonus_key_value_1', 0)
|
||||
load_usr.sp_bonus_category_id_2 = profile_dict.get('sp_bonus_category_id_2', 0)
|
||||
load_usr.sp_bonus_key_value_2 = profile_dict.get('sp_bonus_key_value_2', 0)
|
||||
load_usr.last_play_event_id = profile_dict.get('last_play_event_id', 0)
|
||||
load_usr.event_state = profile_dict.get("event_state", 0)
|
||||
load_usr.event_id = profile_dict.get("event_id", 0)
|
||||
load_usr.sp_bonus_category_id_1 = profile_dict.get("sp_bonus_category_id_1", 0)
|
||||
load_usr.sp_bonus_key_value_1 = profile_dict.get("sp_bonus_key_value_1", 0)
|
||||
load_usr.sp_bonus_category_id_2 = profile_dict.get("sp_bonus_category_id_2", 0)
|
||||
load_usr.sp_bonus_key_value_2 = profile_dict.get("sp_bonus_key_value_2", 0)
|
||||
load_usr.last_play_event_id = profile_dict.get("last_play_event_id", 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
|
||||
@@ -288,22 +288,30 @@ class PokkenBase:
|
||||
res.type = jackal_pb2.MessageType.SAVE_CHARGE
|
||||
return res.SerializeToString()
|
||||
|
||||
def handle_matching_noop(self, data: Dict = {}, client_ip: str = "127.0.0.1") -> Dict:
|
||||
return {}
|
||||
|
||||
def handle_matching_start_matching(self, data: Dict = {}, client_ip: str = "127.0.0.1") -> Dict:
|
||||
def handle_matching_noop(
|
||||
self, data: Dict = {}, client_ip: str = "127.0.0.1"
|
||||
) -> Dict:
|
||||
return {}
|
||||
|
||||
def handle_matching_is_matching(self, data: Dict = {}, client_ip: str = "127.0.0.1") -> Dict:
|
||||
def handle_matching_start_matching(
|
||||
self, data: Dict = {}, client_ip: str = "127.0.0.1"
|
||||
) -> Dict:
|
||||
return {}
|
||||
|
||||
def handle_matching_is_matching(
|
||||
self, data: Dict = {}, client_ip: str = "127.0.0.1"
|
||||
) -> Dict:
|
||||
"""
|
||||
"sessionId":"12345678",
|
||||
"A":{
|
||||
"pcb_id": data["data"]["must"]["pcb_id"],
|
||||
"gip": client_ip
|
||||
},
|
||||
},
|
||||
"list":[]
|
||||
"""
|
||||
return {}
|
||||
|
||||
def handle_matching_stop_matching(self, data: Dict = {}, client_ip: str = "127.0.0.1") -> Dict:
|
||||
return {}
|
||||
|
||||
def handle_matching_stop_matching(
|
||||
self, data: Dict = {}, client_ip: str = "127.0.0.1"
|
||||
) -> Dict:
|
||||
return {}
|
||||
|
||||
@@ -59,6 +59,7 @@ class PokkenServerConfig:
|
||||
self.__config, "pokken", "server", "auto_register", default=True
|
||||
)
|
||||
|
||||
|
||||
class PokkenConfig(dict):
|
||||
def __init__(self) -> None:
|
||||
self.server = PokkenServerConfig(self)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class PokkenConstants:
|
||||
GAME_CODE = "SDAK"
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ from core.config import CoreConfig
|
||||
|
||||
from .schema import *
|
||||
|
||||
|
||||
class PokkenData(Data):
|
||||
def __init__(self, cfg: CoreConfig) -> None:
|
||||
super().__init__(cfg)
|
||||
|
||||
@@ -114,19 +114,19 @@ class PokkenServlet(resource.Resource):
|
||||
endpoint = jackal_pb2.MessageType.DESCRIPTOR.values_by_number[
|
||||
pokken_request.type
|
||||
].name.lower()
|
||||
|
||||
|
||||
self.logger.debug(pokken_request)
|
||||
|
||||
handler = getattr(self.base, f"handle_{endpoint}", None)
|
||||
if handler is None:
|
||||
self.logger.warn(f"No handler found for message type {endpoint}")
|
||||
return self.base.handle_noop(pokken_request)
|
||||
|
||||
|
||||
self.logger.info(f"{endpoint} request from {Utils.get_ip_addr(request)}")
|
||||
|
||||
|
||||
ret = handler(pokken_request)
|
||||
return ret
|
||||
|
||||
|
||||
def handle_matching(self, request: Request) -> bytes:
|
||||
content = request.content.getvalue()
|
||||
client_ip = Utils.get_ip_addr(request)
|
||||
@@ -135,26 +135,37 @@ class PokkenServlet(resource.Resource):
|
||||
self.logger.info("Empty matching request")
|
||||
return json.dumps(self.base.handle_matching_noop()).encode()
|
||||
|
||||
json_content = ast.literal_eval(content.decode().replace('null', 'None').replace('true', 'True').replace('false', 'False'))
|
||||
json_content = ast.literal_eval(
|
||||
content.decode()
|
||||
.replace("null", "None")
|
||||
.replace("true", "True")
|
||||
.replace("false", "False")
|
||||
)
|
||||
self.logger.info(f"Matching {json_content['call']} request")
|
||||
self.logger.debug(json_content)
|
||||
|
||||
handler = getattr(self.base, f"handle_matching_{inflection.underscore(json_content['call'])}", None)
|
||||
handler = getattr(
|
||||
self.base,
|
||||
f"handle_matching_{inflection.underscore(json_content['call'])}",
|
||||
None,
|
||||
)
|
||||
if handler is None:
|
||||
self.logger.warn(f"No handler found for message type {json_content['call']}")
|
||||
self.logger.warn(
|
||||
f"No handler found for message type {json_content['call']}"
|
||||
)
|
||||
return json.dumps(self.base.handle_matching_noop()).encode()
|
||||
|
||||
|
||||
ret = handler(json_content, client_ip)
|
||||
|
||||
|
||||
if ret is None:
|
||||
ret = {}
|
||||
ret = {}
|
||||
if "result" not in ret:
|
||||
ret["result"] = "true"
|
||||
if "data" not in ret:
|
||||
ret["data"] = {}
|
||||
if "timestamp" not in ret:
|
||||
ret["timestamp"] = int(datetime.now().timestamp() * 1000)
|
||||
|
||||
|
||||
self.logger.debug(f"Response {ret}")
|
||||
|
||||
return json.dumps(ret).encode()
|
||||
|
||||
@@ -9,19 +9,26 @@ from sqlalchemy.dialects.mysql import insert
|
||||
from core.data.schema import BaseData, metadata
|
||||
|
||||
item = Table(
|
||||
'pokken_item',
|
||||
"pokken_item",
|
||||
metadata,
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('user', ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"), nullable=False, unique=True),
|
||||
Column('category', Integer),
|
||||
Column('content', Integer),
|
||||
Column('type', Integer),
|
||||
UniqueConstraint('user', 'category', 'content', 'type', name='pokken_item_uk'),
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
unique=True,
|
||||
),
|
||||
Column("category", Integer),
|
||||
Column("content", Integer),
|
||||
Column("type", Integer),
|
||||
UniqueConstraint("user", "category", "content", "type", name="pokken_item_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class PokkenItemData(BaseData):
|
||||
"""
|
||||
Items obtained as rewards
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
@@ -10,29 +10,35 @@ from core.data.schema import BaseData, metadata
|
||||
|
||||
# Pokken sends depressingly little match data...
|
||||
match_data = Table(
|
||||
'pokken_match_data',
|
||||
"pokken_match_data",
|
||||
metadata,
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('user', ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"), nullable=False),
|
||||
Column('num_games', Integer),
|
||||
Column('play_modes', JSON),
|
||||
Column('results', JSON),
|
||||
Column('ex_ko_num', Integer),
|
||||
Column('wko_num', Integer),
|
||||
Column('timeup_win_num', Integer),
|
||||
Column('cool_ko_num', Integer),
|
||||
Column('perfect_ko_num', Integer),
|
||||
Column('use_navi', Integer),
|
||||
Column('use_navi_cloth', Integer),
|
||||
Column('use_aid_skill', Integer),
|
||||
Column('play_date', TIMESTAMP),
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("num_games", Integer),
|
||||
Column("play_modes", JSON),
|
||||
Column("results", JSON),
|
||||
Column("ex_ko_num", Integer),
|
||||
Column("wko_num", Integer),
|
||||
Column("timeup_win_num", Integer),
|
||||
Column("cool_ko_num", Integer),
|
||||
Column("perfect_ko_num", Integer),
|
||||
Column("use_navi", Integer),
|
||||
Column("use_navi_cloth", Integer),
|
||||
Column("use_aid_skill", Integer),
|
||||
Column("play_date", TIMESTAMP),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class PokkenMatchData(BaseData):
|
||||
"""
|
||||
Match logs
|
||||
"""
|
||||
|
||||
def save_match(self, user_id: int, match_data: Dict) -> Optional[int]:
|
||||
pass
|
||||
|
||||
@@ -43,4 +49,4 @@ class PokkenMatchData(BaseData):
|
||||
pass
|
||||
|
||||
def get_matches(self, limit: int = 20) -> Optional[List[Row]]:
|
||||
pass
|
||||
pass
|
||||
|
||||
@@ -12,150 +12,179 @@ from ..const import PokkenConstants
|
||||
# Some more of the repeated fields could probably be their own tables, for now I just did the ones that made sense to me
|
||||
# Having the profile table be this massive kinda blows for updates but w/e, **kwargs to the rescue
|
||||
profile = Table(
|
||||
'pokken_profile',
|
||||
"pokken_profile",
|
||||
metadata,
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('user', ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"), nullable=False, unique=True),
|
||||
Column('trainer_name', String(16)), # optional
|
||||
Column('home_region_code', Integer),
|
||||
Column('home_loc_name', String(255)),
|
||||
Column('pref_code', Integer),
|
||||
Column('navi_newbie_flag', Boolean),
|
||||
Column('navi_enable_flag', Boolean),
|
||||
Column('pad_vibrate_flag', Boolean),
|
||||
Column('trainer_rank_point', Integer),
|
||||
Column('wallet', Integer),
|
||||
Column('fight_money', Integer),
|
||||
Column('score_point', Integer),
|
||||
Column('grade_max_num', Integer),
|
||||
Column('extra_counter', Integer), # Optional
|
||||
Column('tutorial_progress_flag', JSON), # Repeated, Integer
|
||||
Column('total_play_days', Integer),
|
||||
Column('play_date_time', Integer),
|
||||
Column('achievement_flag', JSON), # Repeated, Integer
|
||||
Column('lucky_box_fail_num', Integer),
|
||||
Column('event_reward_get_flag', Integer),
|
||||
Column('rank_pvp_all', Integer),
|
||||
Column('rank_pvp_loc', Integer),
|
||||
Column('rank_cpu_all', Integer),
|
||||
Column('rank_cpu_loc', Integer),
|
||||
Column('rank_event', Integer),
|
||||
Column('awake_num', Integer),
|
||||
Column('use_support_num', Integer),
|
||||
Column('rankmatch_flag', Integer),
|
||||
Column('rankmatch_max', Integer), # Optional
|
||||
Column('rankmatch_progress', JSON), # Repeated, Integer
|
||||
Column('rankmatch_success', Integer), # Optional
|
||||
Column('beat_num', Integer), # Optional
|
||||
Column('title_text_id', Integer),
|
||||
Column('title_plate_id', Integer),
|
||||
Column('title_decoration_id', Integer),
|
||||
Column('support_pokemon_list', JSON), # Repeated, Integer
|
||||
Column('support_set_1_1', Integer), # Repeated, Integer
|
||||
Column('support_set_1_2', Integer),
|
||||
Column('support_set_2_1', Integer), # Repeated, Integer
|
||||
Column('support_set_2_2', Integer),
|
||||
Column('support_set_3_1', Integer), # Repeated, Integer
|
||||
Column('support_set_3_2', Integer),
|
||||
Column('navi_trainer', Integer),
|
||||
Column('navi_version_id', Integer),
|
||||
Column('aid_skill_list', JSON), # Repeated, Integer
|
||||
Column('aid_skill', Integer),
|
||||
Column('comment_text_id', Integer),
|
||||
Column('comment_word_id', Integer),
|
||||
Column('latest_use_pokemon', Integer),
|
||||
Column('ex_ko_num', Integer),
|
||||
Column('wko_num', Integer),
|
||||
Column('timeup_win_num', Integer),
|
||||
Column('cool_ko_num', Integer),
|
||||
Column('perfect_ko_num', Integer),
|
||||
Column('record_flag', Integer),
|
||||
Column('continue_num', Integer),
|
||||
Column('avatar_body', Integer), # Optional
|
||||
Column('avatar_gender', Integer), # Optional
|
||||
Column('avatar_background', Integer), # Optional
|
||||
Column('avatar_head', Integer), # Optional
|
||||
Column('avatar_battleglass', Integer), # Optional
|
||||
Column('avatar_face0', Integer), # Optional
|
||||
Column('avatar_face1', Integer), # Optional
|
||||
Column('avatar_face2', Integer), # Optional
|
||||
Column('avatar_bodyall', Integer), # Optional
|
||||
Column('avatar_wear', Integer), # Optional
|
||||
Column('avatar_accessory', Integer), # Optional
|
||||
Column('avatar_stamp', Integer), # Optional
|
||||
Column('event_state', Integer),
|
||||
Column('event_id', Integer),
|
||||
Column('sp_bonus_category_id_1', Integer),
|
||||
Column('sp_bonus_key_value_1', Integer),
|
||||
Column('sp_bonus_category_id_2', Integer),
|
||||
Column('sp_bonus_key_value_2', Integer),
|
||||
Column('last_play_event_id', Integer), # Optional
|
||||
Column('event_achievement_flag', JSON), # Repeated, Integer
|
||||
Column('event_achievement_param', JSON), # Repeated, Integer
|
||||
Column('battle_num_vs_wan', Integer), # 4?
|
||||
Column('win_vs_wan', Integer),
|
||||
Column('battle_num_vs_lan', Integer), # 3?
|
||||
Column('win_vs_lan', Integer),
|
||||
Column('battle_num_vs_cpu', Integer), # 2
|
||||
Column('win_cpu', Integer),
|
||||
Column('battle_num_tutorial', Integer), # 1?
|
||||
mysql_charset="utf8mb4"
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
unique=True,
|
||||
),
|
||||
Column("trainer_name", String(16)), # optional
|
||||
Column("home_region_code", Integer),
|
||||
Column("home_loc_name", String(255)),
|
||||
Column("pref_code", Integer),
|
||||
Column("navi_newbie_flag", Boolean),
|
||||
Column("navi_enable_flag", Boolean),
|
||||
Column("pad_vibrate_flag", Boolean),
|
||||
Column("trainer_rank_point", Integer),
|
||||
Column("wallet", Integer),
|
||||
Column("fight_money", Integer),
|
||||
Column("score_point", Integer),
|
||||
Column("grade_max_num", Integer),
|
||||
Column("extra_counter", Integer), # Optional
|
||||
Column("tutorial_progress_flag", JSON), # Repeated, Integer
|
||||
Column("total_play_days", Integer),
|
||||
Column("play_date_time", Integer),
|
||||
Column("achievement_flag", JSON), # Repeated, Integer
|
||||
Column("lucky_box_fail_num", Integer),
|
||||
Column("event_reward_get_flag", Integer),
|
||||
Column("rank_pvp_all", Integer),
|
||||
Column("rank_pvp_loc", Integer),
|
||||
Column("rank_cpu_all", Integer),
|
||||
Column("rank_cpu_loc", Integer),
|
||||
Column("rank_event", Integer),
|
||||
Column("awake_num", Integer),
|
||||
Column("use_support_num", Integer),
|
||||
Column("rankmatch_flag", Integer),
|
||||
Column("rankmatch_max", Integer), # Optional
|
||||
Column("rankmatch_progress", JSON), # Repeated, Integer
|
||||
Column("rankmatch_success", Integer), # Optional
|
||||
Column("beat_num", Integer), # Optional
|
||||
Column("title_text_id", Integer),
|
||||
Column("title_plate_id", Integer),
|
||||
Column("title_decoration_id", Integer),
|
||||
Column("support_pokemon_list", JSON), # Repeated, Integer
|
||||
Column("support_set_1_1", Integer), # Repeated, Integer
|
||||
Column("support_set_1_2", Integer),
|
||||
Column("support_set_2_1", Integer), # Repeated, Integer
|
||||
Column("support_set_2_2", Integer),
|
||||
Column("support_set_3_1", Integer), # Repeated, Integer
|
||||
Column("support_set_3_2", Integer),
|
||||
Column("navi_trainer", Integer),
|
||||
Column("navi_version_id", Integer),
|
||||
Column("aid_skill_list", JSON), # Repeated, Integer
|
||||
Column("aid_skill", Integer),
|
||||
Column("comment_text_id", Integer),
|
||||
Column("comment_word_id", Integer),
|
||||
Column("latest_use_pokemon", Integer),
|
||||
Column("ex_ko_num", Integer),
|
||||
Column("wko_num", Integer),
|
||||
Column("timeup_win_num", Integer),
|
||||
Column("cool_ko_num", Integer),
|
||||
Column("perfect_ko_num", Integer),
|
||||
Column("record_flag", Integer),
|
||||
Column("continue_num", Integer),
|
||||
Column("avatar_body", Integer), # Optional
|
||||
Column("avatar_gender", Integer), # Optional
|
||||
Column("avatar_background", Integer), # Optional
|
||||
Column("avatar_head", Integer), # Optional
|
||||
Column("avatar_battleglass", Integer), # Optional
|
||||
Column("avatar_face0", Integer), # Optional
|
||||
Column("avatar_face1", Integer), # Optional
|
||||
Column("avatar_face2", Integer), # Optional
|
||||
Column("avatar_bodyall", Integer), # Optional
|
||||
Column("avatar_wear", Integer), # Optional
|
||||
Column("avatar_accessory", Integer), # Optional
|
||||
Column("avatar_stamp", Integer), # Optional
|
||||
Column("event_state", Integer),
|
||||
Column("event_id", Integer),
|
||||
Column("sp_bonus_category_id_1", Integer),
|
||||
Column("sp_bonus_key_value_1", Integer),
|
||||
Column("sp_bonus_category_id_2", Integer),
|
||||
Column("sp_bonus_key_value_2", Integer),
|
||||
Column("last_play_event_id", Integer), # Optional
|
||||
Column("event_achievement_flag", JSON), # Repeated, Integer
|
||||
Column("event_achievement_param", JSON), # Repeated, Integer
|
||||
Column("battle_num_vs_wan", Integer), # 4?
|
||||
Column("win_vs_wan", Integer),
|
||||
Column("battle_num_vs_lan", Integer), # 3?
|
||||
Column("win_vs_lan", Integer),
|
||||
Column("battle_num_vs_cpu", Integer), # 2
|
||||
Column("win_cpu", Integer),
|
||||
Column("battle_num_tutorial", Integer), # 1?
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
pokemon_data = Table(
|
||||
'pokken_pokemon_data',
|
||||
"pokken_pokemon_data",
|
||||
metadata,
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('user', ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"), nullable=False),
|
||||
Column('char_id', Integer, nullable=False),
|
||||
Column('illustration_book_no', Integer),
|
||||
Column('pokemon_exp', Integer),
|
||||
Column('battle_num_vs_wan', Integer), # 4?
|
||||
Column('win_vs_wan', Integer),
|
||||
Column('battle_num_vs_lan', Integer), # 3?
|
||||
Column('win_vs_lan', Integer),
|
||||
Column('battle_num_vs_cpu', Integer), # 2
|
||||
Column('win_cpu', Integer),
|
||||
Column('battle_all_num_tutorial', Integer),
|
||||
Column('battle_num_tutorial', Integer), # 1?
|
||||
Column('bp_point_atk', Integer),
|
||||
Column('bp_point_res', Integer),
|
||||
Column('bp_point_def', Integer),
|
||||
Column('bp_point_sp', Integer),
|
||||
UniqueConstraint('user', 'char_id', name="pokken_pokemon_data_uk"),
|
||||
mysql_charset="utf8mb4"
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("char_id", Integer, nullable=False),
|
||||
Column("illustration_book_no", Integer),
|
||||
Column("pokemon_exp", Integer),
|
||||
Column("battle_num_vs_wan", Integer), # 4?
|
||||
Column("win_vs_wan", Integer),
|
||||
Column("battle_num_vs_lan", Integer), # 3?
|
||||
Column("win_vs_lan", Integer),
|
||||
Column("battle_num_vs_cpu", Integer), # 2
|
||||
Column("win_cpu", Integer),
|
||||
Column("battle_all_num_tutorial", Integer),
|
||||
Column("battle_num_tutorial", Integer), # 1?
|
||||
Column("bp_point_atk", Integer),
|
||||
Column("bp_point_res", Integer),
|
||||
Column("bp_point_def", Integer),
|
||||
Column("bp_point_sp", Integer),
|
||||
UniqueConstraint("user", "char_id", name="pokken_pokemon_data_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class PokkenProfileData(BaseData):
|
||||
def create_profile(self, user_id: int) -> Optional[int]:
|
||||
sql = insert(profile).values(user = user_id)
|
||||
conflict = sql.on_duplicate_key_update(user = user_id)
|
||||
|
||||
sql = insert(profile).values(user=user_id)
|
||||
conflict = sql.on_duplicate_key_update(user=user_id)
|
||||
|
||||
result = self.execute(conflict)
|
||||
if result is None:
|
||||
self.logger.error(f"Failed to create pokken profile for user {user_id}!")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
|
||||
def set_profile_name(self, user_id: int, new_name: str) -> None:
|
||||
sql = update(profile).where(profile.c.user == user_id).values(trainer_name = new_name)
|
||||
sql = (
|
||||
update(profile)
|
||||
.where(profile.c.user == user_id)
|
||||
.values(trainer_name=new_name)
|
||||
)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.error(f"Failed to update pokken profile name for user {user_id}!")
|
||||
|
||||
self.logger.error(
|
||||
f"Failed to update pokken profile name for user {user_id}!"
|
||||
)
|
||||
|
||||
def update_profile_tutorial_flags(self, user_id: int, tutorial_flags: Dict) -> None:
|
||||
pass
|
||||
|
||||
def add_profile_points(self, user_id: int, rank_pts: int, money: int, score_pts: int) -> None:
|
||||
def add_profile_points(
|
||||
self, user_id: int, rank_pts: int, money: int, score_pts: int
|
||||
) -> None:
|
||||
pass
|
||||
|
||||
def get_profile(self, user_id: int) -> Optional[Row]:
|
||||
sql = profile.select(profile.c.user == user_id)
|
||||
result = self.execute(sql)
|
||||
if result is None: return None
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def put_pokemon_data(self, user_id: int, pokemon_id: int, illust_no: int, get_exp: int, atk: int, res: int, defe: int, sp: int) -> Optional[int]:
|
||||
def put_pokemon_data(
|
||||
self,
|
||||
user_id: int,
|
||||
pokemon_id: int,
|
||||
illust_no: int,
|
||||
get_exp: int,
|
||||
atk: int,
|
||||
res: int,
|
||||
defe: int,
|
||||
sp: int,
|
||||
) -> Optional[int]:
|
||||
pass
|
||||
|
||||
def get_pokemon_data(self, user_id: int, pokemon_id: int) -> Optional[Row]:
|
||||
@@ -164,13 +193,24 @@ class PokkenProfileData(BaseData):
|
||||
def get_all_pokemon_data(self, user_id: int) -> Optional[List[Row]]:
|
||||
pass
|
||||
|
||||
def put_results(self, user_id: int, pokemon_id: int, match_type: int, match_result: int) -> None:
|
||||
def put_results(
|
||||
self, user_id: int, pokemon_id: int, match_type: int, match_result: int
|
||||
) -> None:
|
||||
"""
|
||||
Records the match stats (type and win/loss) for the pokemon and profile
|
||||
"""
|
||||
pass
|
||||
|
||||
def put_stats(self, user_id: int, exkos: int, wkos: int, timeout_wins: int, cool_kos: int, perfects: int, continues: int) -> None:
|
||||
def put_stats(
|
||||
self,
|
||||
user_id: int,
|
||||
exkos: int,
|
||||
wkos: int,
|
||||
timeout_wins: int,
|
||||
cool_kos: int,
|
||||
perfects: int,
|
||||
continues: int,
|
||||
) -> None:
|
||||
"""
|
||||
Records profile stats
|
||||
"""
|
||||
|
||||
@@ -8,5 +8,6 @@ from sqlalchemy.dialects.mysql import insert
|
||||
|
||||
from core.data.schema import BaseData, metadata
|
||||
|
||||
|
||||
class PokkenStaticData(BaseData):
|
||||
pass
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user