Compare commits
4 Commits
2f13596885
...
b0ca37815b
Author | SHA1 | Date | |
---|---|---|---|
b0ca37815b | |||
f39317301b | |||
389784ce82 | |||
36d338e618 |
@ -51,7 +51,7 @@ ALTER TABLE mai2_item_favorite MODIFY COLUMN itemKind int(11) NOT NULL;
|
|||||||
|
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN seasonId int(11) NOT NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN seasonId int(11) NOT NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN point int(11) NOT NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN point int(11) NOT NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rank int(11) NOT NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN `rank` int(11) NOT NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rewardGet tinyint(1) NOT NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rewardGet tinyint(1) NOT NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN userName varchar(8) NOT NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN userName varchar(8) NOT NULL;
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ ALTER TABLE mai2_item_favorite MODIFY COLUMN itemKind int(11) NULL;
|
|||||||
|
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN seasonId int(11) NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN seasonId int(11) NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN point int(11) NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN point int(11) NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rank int(11) NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN `rank` int(11) NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rewardGet tinyint(1) NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN rewardGet tinyint(1) NULL;
|
||||||
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN userName varchar(8) NULL;
|
ALTER TABLE mai2_item_friend_season_ranking MODIFY COLUMN userName varchar(8) NULL;
|
||||||
|
|
||||||
|
@ -129,6 +129,6 @@ class CardMakerServlet:
|
|||||||
if resp is None:
|
if resp is None:
|
||||||
resp = {"returnCode": 1}
|
resp = {"returnCode": 1}
|
||||||
|
|
||||||
self.logger.info(f"Response {resp}")
|
self.logger.debug(f"Response {resp}")
|
||||||
|
|
||||||
return zlib.compress(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
|
return zlib.compress(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
|
||||||
|
@ -89,8 +89,7 @@ class CardMakerReader(BaseReader):
|
|||||||
version_ids = {
|
version_ids = {
|
||||||
"v2_00": ChuniConstants.VER_CHUNITHM_NEW,
|
"v2_00": ChuniConstants.VER_CHUNITHM_NEW,
|
||||||
"v2_05": ChuniConstants.VER_CHUNITHM_NEW_PLUS,
|
"v2_05": ChuniConstants.VER_CHUNITHM_NEW_PLUS,
|
||||||
# Chunithm SUN, ignore for now
|
"v2_10": ChuniConstants.VER_CHUNITHM_SUN,
|
||||||
"v2_10": ChuniConstants.VER_CHUNITHM_NEW_PLUS + 1,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for root, dirs, files in os.walk(base_dir):
|
for root, dirs, files in os.walk(base_dir):
|
||||||
@ -138,8 +137,7 @@ class CardMakerReader(BaseReader):
|
|||||||
version_ids = {
|
version_ids = {
|
||||||
"v2_00": ChuniConstants.VER_CHUNITHM_NEW,
|
"v2_00": ChuniConstants.VER_CHUNITHM_NEW,
|
||||||
"v2_05": ChuniConstants.VER_CHUNITHM_NEW_PLUS,
|
"v2_05": ChuniConstants.VER_CHUNITHM_NEW_PLUS,
|
||||||
# Chunithm SUN, ignore for now
|
"v2_10": ChuniConstants.VER_CHUNITHM_SUN,
|
||||||
"v2_10": ChuniConstants.VER_CHUNITHM_NEW_PLUS + 1,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for root, dirs, files in os.walk(base_dir):
|
for root, dirs, files in os.walk(base_dir):
|
||||||
@ -226,6 +224,12 @@ class CardMakerReader(BaseReader):
|
|||||||
True if troot.find("disable").text == "false" else False
|
True if troot.find("disable").text == "false" else False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# check if a date is part of the name and disable the
|
||||||
|
# card if it is
|
||||||
|
enabled = (
|
||||||
|
False if re.search(r"\d{2}/\d{2}/\d{2}", name) else enabled
|
||||||
|
)
|
||||||
|
|
||||||
self.mai2_data.static.put_card(
|
self.mai2_data.static.put_card(
|
||||||
version, card_id, name, enabled=enabled
|
version, card_id, name, enabled=enabled
|
||||||
)
|
)
|
||||||
|
@ -568,176 +568,3 @@ class Mai2DX(Mai2Base):
|
|||||||
"nextIndex": next_index,
|
"nextIndex": next_index,
|
||||||
"userMusicList": [{"userMusicDetailList": music_detail_list}],
|
"userMusicList": [{"userMusicDetailList": music_detail_list}],
|
||||||
}
|
}
|
||||||
|
|
||||||
def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
|
||||||
p = self.data.profile.get_profile_detail(data["userId"], self.version)
|
|
||||||
if p is None:
|
|
||||||
return {}
|
|
||||||
|
|
||||||
return {
|
|
||||||
"userName": p["userName"],
|
|
||||||
"rating": p["playerRating"],
|
|
||||||
# hardcode lastDataVersion for CardMaker 1.34
|
|
||||||
"lastDataVersion": "1.20.00",
|
|
||||||
"isLogin": False,
|
|
||||||
"isExistSellingCard": False,
|
|
||||||
}
|
|
||||||
|
|
||||||
def handle_cm_get_user_data_api_request(self, data: Dict) -> Dict:
|
|
||||||
# user already exists, because the preview checks that already
|
|
||||||
p = self.data.profile.get_profile_detail(data["userId"], self.version)
|
|
||||||
|
|
||||||
cards = self.data.card.get_user_cards(data["userId"])
|
|
||||||
if cards is None or len(cards) == 0:
|
|
||||||
# This should never happen
|
|
||||||
self.logger.error(
|
|
||||||
f"handle_get_user_data_api_request: Internal error - No cards found for user id {data['userId']}"
|
|
||||||
)
|
|
||||||
return {}
|
|
||||||
|
|
||||||
# get the dict representation of the row so we can modify values
|
|
||||||
user_data = p._asdict()
|
|
||||||
|
|
||||||
# remove the values the game doesn't want
|
|
||||||
user_data.pop("id")
|
|
||||||
user_data.pop("user")
|
|
||||||
user_data.pop("version")
|
|
||||||
|
|
||||||
return {"userId": data["userId"], "userData": user_data}
|
|
||||||
|
|
||||||
def handle_cm_login_api_request(self, data: Dict) -> Dict:
|
|
||||||
return {"returnCode": 1}
|
|
||||||
|
|
||||||
def handle_cm_logout_api_request(self, data: Dict) -> Dict:
|
|
||||||
return {"returnCode": 1}
|
|
||||||
|
|
||||||
def handle_cm_get_selling_card_api_request(self, data: Dict) -> Dict:
|
|
||||||
selling_cards = self.data.static.get_enabled_cards(self.version)
|
|
||||||
if selling_cards is None:
|
|
||||||
return {"length": 0, "sellingCardList": []}
|
|
||||||
|
|
||||||
selling_card_list = []
|
|
||||||
for card in selling_cards:
|
|
||||||
tmp = card._asdict()
|
|
||||||
tmp.pop("id")
|
|
||||||
tmp.pop("version")
|
|
||||||
tmp.pop("cardName")
|
|
||||||
tmp.pop("enabled")
|
|
||||||
|
|
||||||
tmp["startDate"] = datetime.strftime(tmp["startDate"], "%Y-%m-%d %H:%M:%S")
|
|
||||||
tmp["endDate"] = datetime.strftime(tmp["endDate"], "%Y-%m-%d %H:%M:%S")
|
|
||||||
tmp["noticeStartDate"] = datetime.strftime(
|
|
||||||
tmp["noticeStartDate"], "%Y-%m-%d %H:%M:%S"
|
|
||||||
)
|
|
||||||
tmp["noticeEndDate"] = datetime.strftime(
|
|
||||||
tmp["noticeEndDate"], "%Y-%m-%d %H:%M:%S"
|
|
||||||
)
|
|
||||||
|
|
||||||
selling_card_list.append(tmp)
|
|
||||||
|
|
||||||
return {"length": len(selling_card_list), "sellingCardList": selling_card_list}
|
|
||||||
|
|
||||||
def handle_cm_get_user_card_api_request(self, data: Dict) -> Dict:
|
|
||||||
user_cards = self.data.item.get_cards(data["userId"])
|
|
||||||
if user_cards is None:
|
|
||||||
return {"returnCode": 1, "length": 0, "nextIndex": 0, "userCardList": []}
|
|
||||||
|
|
||||||
max_ct = data["maxCount"]
|
|
||||||
next_idx = data["nextIndex"]
|
|
||||||
start_idx = next_idx
|
|
||||||
end_idx = max_ct + start_idx
|
|
||||||
|
|
||||||
if len(user_cards[start_idx:]) > max_ct:
|
|
||||||
next_idx += max_ct
|
|
||||||
else:
|
|
||||||
next_idx = 0
|
|
||||||
|
|
||||||
card_list = []
|
|
||||||
for card in user_cards:
|
|
||||||
tmp = card._asdict()
|
|
||||||
tmp.pop("id")
|
|
||||||
tmp.pop("user")
|
|
||||||
|
|
||||||
tmp["startDate"] = datetime.strftime(tmp["startDate"], "%Y-%m-%d %H:%M:%S")
|
|
||||||
tmp["endDate"] = datetime.strftime(tmp["endDate"], "%Y-%m-%d %H:%M:%S")
|
|
||||||
card_list.append(tmp)
|
|
||||||
|
|
||||||
return {
|
|
||||||
"returnCode": 1,
|
|
||||||
"length": len(card_list[start_idx:end_idx]),
|
|
||||||
"nextIndex": next_idx,
|
|
||||||
"userCardList": card_list[start_idx:end_idx],
|
|
||||||
}
|
|
||||||
|
|
||||||
def handle_cm_get_user_item_api_request(self, data: Dict) -> Dict:
|
|
||||||
super().handle_get_user_item_api_request(data)
|
|
||||||
|
|
||||||
def handle_cm_get_user_character_api_request(self, data: Dict) -> Dict:
|
|
||||||
characters = self.data.item.get_characters(data["userId"])
|
|
||||||
|
|
||||||
chara_list = []
|
|
||||||
for chara in characters:
|
|
||||||
chara_list.append(
|
|
||||||
{
|
|
||||||
"characterId": chara["characterId"],
|
|
||||||
# no clue why those values are even needed
|
|
||||||
"point": 0,
|
|
||||||
"count": 0,
|
|
||||||
"level": chara["level"],
|
|
||||||
"nextAwake": 0,
|
|
||||||
"nextAwakePercent": 0,
|
|
||||||
"favorite": False,
|
|
||||||
"awakening": chara["awakening"],
|
|
||||||
"useCount": chara["useCount"],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
|
||||||
"returnCode": 1,
|
|
||||||
"length": len(chara_list),
|
|
||||||
"userCharacterList": chara_list,
|
|
||||||
}
|
|
||||||
|
|
||||||
def handle_cm_get_user_card_print_error_api_request(self, data: Dict) -> Dict:
|
|
||||||
return {"length": 0, "userPrintDetailList": []}
|
|
||||||
|
|
||||||
def handle_cm_upsert_user_print_api_request(self, data: Dict) -> Dict:
|
|
||||||
user_id = data["userId"]
|
|
||||||
upsert = data["userPrintDetail"]
|
|
||||||
|
|
||||||
# set a random card serial number
|
|
||||||
serial_id = "".join([str(randint(0, 9)) for _ in range(20)])
|
|
||||||
|
|
||||||
user_card = upsert["userCard"]
|
|
||||||
self.data.item.put_card(
|
|
||||||
user_id,
|
|
||||||
user_card["cardId"],
|
|
||||||
user_card["cardTypeId"],
|
|
||||||
user_card["charaId"],
|
|
||||||
user_card["mapId"],
|
|
||||||
)
|
|
||||||
|
|
||||||
# properly format userPrintDetail for the database
|
|
||||||
upsert.pop("userCard")
|
|
||||||
upsert.pop("serialId")
|
|
||||||
upsert["printDate"] = datetime.strptime(upsert["printDate"], "%Y-%m-%d")
|
|
||||||
|
|
||||||
self.data.item.put_user_print_detail(user_id, serial_id, upsert)
|
|
||||||
|
|
||||||
return {
|
|
||||||
"returnCode": 1,
|
|
||||||
"orderId": 0,
|
|
||||||
"serialId": serial_id,
|
|
||||||
"startDate": "2018-01-01 00:00:00",
|
|
||||||
"endDate": "2038-01-01 00:00:00",
|
|
||||||
}
|
|
||||||
|
|
||||||
def handle_cm_upsert_user_printlog_api_request(self, data: Dict) -> Dict:
|
|
||||||
return {
|
|
||||||
"returnCode": 1,
|
|
||||||
"orderId": 0,
|
|
||||||
"serialId": data["userPrintlog"]["serialId"],
|
|
||||||
}
|
|
||||||
|
|
||||||
def handle_cm_upsert_buy_card_api_request(self, data: Dict) -> Dict:
|
|
||||||
return {"returnCode": 1}
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
from titles.mai2.dx import Mai2DX
|
from titles.mai2.universeplus import Mai2UniversePlus
|
||||||
from titles.mai2.const import Mai2Constants
|
from titles.mai2.const import Mai2Constants
|
||||||
from titles.mai2.config import Mai2Config
|
from titles.mai2.config import Mai2Config
|
||||||
|
|
||||||
|
|
||||||
class Mai2Festival(Mai2DX):
|
class Mai2Festival(Mai2UniversePlus):
|
||||||
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
||||||
super().__init__(cfg, game_cfg)
|
super().__init__(cfg, game_cfg)
|
||||||
self.version = Mai2Constants.VER_MAIMAI_DX_FESTIVAL
|
self.version = Mai2Constants.VER_MAIMAI_DX_FESTIVAL
|
||||||
@ -14,7 +14,7 @@ class Mai2Festival(Mai2DX):
|
|||||||
def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
|
||||||
user_data = super().handle_cm_get_user_preview_api_request(data)
|
user_data = super().handle_cm_get_user_preview_api_request(data)
|
||||||
|
|
||||||
# hardcode lastDataVersion for CardMaker 1.36
|
# hardcode lastDataVersion for CardMaker 1.35
|
||||||
user_data["lastDataVersion"] = "1.30.00"
|
user_data["lastDataVersion"] = "1.30.00"
|
||||||
return user_data
|
return user_data
|
||||||
|
|
||||||
|
@ -4,12 +4,12 @@ import pytz
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
from titles.mai2.dx import Mai2DX
|
from titles.mai2.dxplus import Mai2DXPlus
|
||||||
from titles.mai2.config import Mai2Config
|
from titles.mai2.config import Mai2Config
|
||||||
from titles.mai2.const import Mai2Constants
|
from titles.mai2.const import Mai2Constants
|
||||||
|
|
||||||
|
|
||||||
class Mai2Splash(Mai2DX):
|
class Mai2Splash(Mai2DXPlus):
|
||||||
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
||||||
super().__init__(cfg, game_cfg)
|
super().__init__(cfg, game_cfg)
|
||||||
self.version = Mai2Constants.VER_MAIMAI_DX_SPLASH
|
self.version = Mai2Constants.VER_MAIMAI_DX_SPLASH
|
||||||
|
@ -4,12 +4,12 @@ import pytz
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
from titles.mai2.dx import Mai2DX
|
from titles.mai2.splash import Mai2Splash
|
||||||
from titles.mai2.config import Mai2Config
|
from titles.mai2.config import Mai2Config
|
||||||
from titles.mai2.const import Mai2Constants
|
from titles.mai2.const import Mai2Constants
|
||||||
|
|
||||||
|
|
||||||
class Mai2SplashPlus(Mai2DX):
|
class Mai2SplashPlus(Mai2Splash):
|
||||||
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
||||||
super().__init__(cfg, game_cfg)
|
super().__init__(cfg, game_cfg)
|
||||||
self.version = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS
|
self.version = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS
|
||||||
|
@ -5,12 +5,12 @@ import pytz
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
from titles.mai2.dx import Mai2DX
|
from titles.mai2.splashplus import Mai2SplashPlus
|
||||||
from titles.mai2.const import Mai2Constants
|
from titles.mai2.const import Mai2Constants
|
||||||
from titles.mai2.config import Mai2Config
|
from titles.mai2.config import Mai2Config
|
||||||
|
|
||||||
|
|
||||||
class Mai2Universe(Mai2DX):
|
class Mai2Universe(Mai2SplashPlus):
|
||||||
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
||||||
super().__init__(cfg, game_cfg)
|
super().__init__(cfg, game_cfg)
|
||||||
self.version = Mai2Constants.VER_MAIMAI_DX_UNIVERSE
|
self.version = Mai2Constants.VER_MAIMAI_DX_UNIVERSE
|
||||||
@ -70,13 +70,13 @@ class Mai2Universe(Mai2DX):
|
|||||||
tmp.pop("cardName")
|
tmp.pop("cardName")
|
||||||
tmp.pop("enabled")
|
tmp.pop("enabled")
|
||||||
|
|
||||||
tmp["startDate"] = datetime.strftime(tmp["startDate"], "%Y-%m-%d %H:%M:%S")
|
tmp["startDate"] = datetime.strftime(tmp["startDate"], Mai2Constants.DATE_TIME_FORMAT)
|
||||||
tmp["endDate"] = datetime.strftime(tmp["endDate"], "%Y-%m-%d %H:%M:%S")
|
tmp["endDate"] = datetime.strftime(tmp["endDate"], Mai2Constants.DATE_TIME_FORMAT)
|
||||||
tmp["noticeStartDate"] = datetime.strftime(
|
tmp["noticeStartDate"] = datetime.strftime(
|
||||||
tmp["noticeStartDate"], "%Y-%m-%d %H:%M:%S"
|
tmp["noticeStartDate"], Mai2Constants.DATE_TIME_FORMAT
|
||||||
)
|
)
|
||||||
tmp["noticeEndDate"] = datetime.strftime(
|
tmp["noticeEndDate"] = datetime.strftime(
|
||||||
tmp["noticeEndDate"], "%Y-%m-%d %H:%M:%S"
|
tmp["noticeEndDate"], Mai2Constants.DATE_TIME_FORMAT
|
||||||
)
|
)
|
||||||
|
|
||||||
selling_card_list.append(tmp)
|
selling_card_list.append(tmp)
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
from titles.mai2.dx import Mai2DX
|
from titles.mai2.universe import Mai2Universe
|
||||||
from titles.mai2.const import Mai2Constants
|
from titles.mai2.const import Mai2Constants
|
||||||
from titles.mai2.config import Mai2Config
|
from titles.mai2.config import Mai2Config
|
||||||
|
|
||||||
|
|
||||||
class Mai2UniversePlus(Mai2DX):
|
class Mai2UniversePlus(Mai2Universe):
|
||||||
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
|
||||||
super().__init__(cfg, game_cfg)
|
super().__init__(cfg, game_cfg)
|
||||||
self.version = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS
|
self.version = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS
|
||||||
|
Loading…
Reference in New Issue
Block a user