forked from Hay1tsme/artemis
ongeki: card maker config added, small fixes, improved credits
- Changed the credits config to the default 370 instead of 360 - Added `start_date` to the events to show new events - Fixed Card Maker Gachas to only allow "Select Gacha" once - Fixed the `get_profile_rating_log` database query
This commit is contained in:
parent
36d338e618
commit
6a41dac46c
2
core/data/schema/versions/SDDT_4_rollback.sql
Normal file
2
core/data/schema/versions/SDDT_4_rollback.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE ongeki_static_events
|
||||||
|
DROP COLUMN startDate;
|
2
core/data/schema/versions/SDDT_5_upgrade.sql
Normal file
2
core/data/schema/versions/SDDT_5_upgrade.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE ongeki_static_events
|
||||||
|
ADD COLUMN startDate TIMESTAMP NOT NULL DEFAULT current_timestamp();
|
@ -230,12 +230,12 @@ python dbutils.py --game SBZV upgrade
|
|||||||
|------------|----------------------------|
|
|------------|----------------------------|
|
||||||
| 0 | O.N.G.E.K.I. |
|
| 0 | O.N.G.E.K.I. |
|
||||||
| 1 | O.N.G.E.K.I. + |
|
| 1 | O.N.G.E.K.I. + |
|
||||||
| 2 | O.N.G.E.K.I. Summer |
|
| 2 | O.N.G.E.K.I. SUMMER |
|
||||||
| 3 | O.N.G.E.K.I. Summer + |
|
| 3 | O.N.G.E.K.I. SUMMER + |
|
||||||
| 4 | O.N.G.E.K.I. Red |
|
| 4 | O.N.G.E.K.I. R.E.D. |
|
||||||
| 5 | O.N.G.E.K.I. Red + |
|
| 5 | O.N.G.E.K.I. R.E.D. + |
|
||||||
| 6 | O.N.G.E.K.I. Bright |
|
| 6 | O.N.G.E.K.I. bright |
|
||||||
| 7 | O.N.G.E.K.I. Bright Memory |
|
| 7 | O.N.G.E.K.I. bright MEMORY |
|
||||||
|
|
||||||
|
|
||||||
### Importer
|
### Importer
|
||||||
@ -285,12 +285,12 @@ python dbutils.py --game SDDT upgrade
|
|||||||
* Card Maker 1.30:
|
* Card Maker 1.30:
|
||||||
* CHUNITHM NEW!!: Yes
|
* CHUNITHM NEW!!: Yes
|
||||||
* maimai DX UNiVERSE: Yes
|
* maimai DX UNiVERSE: Yes
|
||||||
* O.N.G.E.K.I. Bright: Yes
|
* O.N.G.E.K.I. bright: Yes
|
||||||
|
|
||||||
* Card Maker 1.35:
|
* Card Maker 1.35:
|
||||||
* CHUNITHM SUN: Yes (NEW PLUS!! up to A032)
|
* CHUNITHM SUN: Yes (NEW PLUS!! up to A032)
|
||||||
* maimai DX FESTiVAL: Yes (up to A035) (UNiVERSE PLUS up to A031)
|
* maimai DX FESTiVAL: Yes (up to A035) (UNiVERSE PLUS up to A031)
|
||||||
* O.N.G.E.K.I. Bright Memory: Yes
|
* O.N.G.E.K.I. bright MEMORY: Yes
|
||||||
|
|
||||||
|
|
||||||
### Importer
|
### Importer
|
||||||
@ -347,6 +347,14 @@ version:
|
|||||||
ongeki: 1.35.03
|
ongeki: 1.35.03
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For now you also need to update your `config/ongeki.yaml` with the correct version number, for example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version:
|
||||||
|
7: # O.N.G.E.K.I. bright MEMORY
|
||||||
|
card_maker: 1.35.03
|
||||||
|
```
|
||||||
|
|
||||||
### O.N.G.E.K.I.
|
### O.N.G.E.K.I.
|
||||||
|
|
||||||
Gacha "無料ガチャ" can only pull from the free cards with the following probabilities: 94%: R, 5% SR and 1% chance of
|
Gacha "無料ガチャ" can only pull from the free cards with the following probabilities: 94%: R, 5% SR and 1% chance of
|
||||||
|
@ -29,3 +29,9 @@ gachas:
|
|||||||
- 1156
|
- 1156
|
||||||
- 1163
|
- 1163
|
||||||
- 1164
|
- 1164
|
||||||
|
|
||||||
|
version:
|
||||||
|
6:
|
||||||
|
card_maker: 1.30.01
|
||||||
|
7:
|
||||||
|
card_maker: 1.35.03
|
||||||
|
@ -21,7 +21,7 @@ Games listed below have been tested and confirmed working. Only game versions ol
|
|||||||
+ 1.35
|
+ 1.35
|
||||||
|
|
||||||
+ O.N.G.E.K.I.
|
+ O.N.G.E.K.I.
|
||||||
+ All versions up to Bright Memory
|
+ All versions up to bright MEMORY
|
||||||
|
|
||||||
+ WACCA
|
+ WACCA
|
||||||
+ Lily R
|
+ Lily R
|
||||||
|
@ -7,4 +7,4 @@ index = OngekiServlet
|
|||||||
database = OngekiData
|
database = OngekiData
|
||||||
reader = OngekiReader
|
reader = OngekiReader
|
||||||
game_codes = [OngekiConstants.GAME_CODE]
|
game_codes = [OngekiConstants.GAME_CODE]
|
||||||
current_schema_version = 4
|
current_schema_version = 5
|
||||||
|
@ -142,7 +142,7 @@ class OngekiBase:
|
|||||||
|
|
||||||
def handle_get_game_point_api_request(self, data: Dict) -> Dict:
|
def handle_get_game_point_api_request(self, data: Dict) -> Dict:
|
||||||
"""
|
"""
|
||||||
Sets the GP ammount for A and B sets for 1 - 3 crdits
|
Sets the GP amount for A and B sets for 1 - 3 credits
|
||||||
"""
|
"""
|
||||||
return {
|
return {
|
||||||
"length": 6,
|
"length": 6,
|
||||||
@ -155,13 +155,13 @@ class OngekiBase:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 1,
|
"type": 1,
|
||||||
"cost": 200,
|
"cost": 230,
|
||||||
"startDate": "2000-01-01 05:00:00.0",
|
"startDate": "2000-01-01 05:00:00.0",
|
||||||
"endDate": "2099-01-01 05:00:00.0",
|
"endDate": "2099-01-01 05:00:00.0",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": 2,
|
"type": 2,
|
||||||
"cost": 300,
|
"cost": 370,
|
||||||
"startDate": "2000-01-01 05:00:00.0",
|
"startDate": "2000-01-01 05:00:00.0",
|
||||||
"endDate": "2099-01-01 05:00:00.0",
|
"endDate": "2099-01-01 05:00:00.0",
|
||||||
},
|
},
|
||||||
@ -256,7 +256,11 @@ class OngekiBase:
|
|||||||
{
|
{
|
||||||
"type": event["type"],
|
"type": event["type"],
|
||||||
"id": event["eventId"],
|
"id": event["eventId"],
|
||||||
"startDate": "2017-12-05 07:00:00.0",
|
# actually use the startDate from the import so it
|
||||||
|
# properly shows all the events when new ones are imported
|
||||||
|
"startDate": datetime.strftime(
|
||||||
|
event["startDate"], "%Y-%m-%d %H:%M:%S.0"
|
||||||
|
),
|
||||||
"endDate": "2099-12-31 00:00:00.0",
|
"endDate": "2099-12-31 00:00:00.0",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -560,7 +564,11 @@ class OngekiBase:
|
|||||||
def handle_get_user_recent_rating_api_request(self, data: Dict) -> Dict:
|
def handle_get_user_recent_rating_api_request(self, data: Dict) -> Dict:
|
||||||
recent_rating = self.data.profile.get_profile_recent_rating(data["userId"])
|
recent_rating = self.data.profile.get_profile_recent_rating(data["userId"])
|
||||||
if recent_rating is None:
|
if recent_rating is None:
|
||||||
return {}
|
return {
|
||||||
|
"userId": data["userId"],
|
||||||
|
"length": 0,
|
||||||
|
"userRecentRatingList": [],
|
||||||
|
}
|
||||||
|
|
||||||
userRecentRatingList = recent_rating["recentRating"]
|
userRecentRatingList = recent_rating["recentRating"]
|
||||||
|
|
||||||
|
@ -43,15 +43,15 @@ class OngekiBright(OngekiBase):
|
|||||||
user_data.pop("user")
|
user_data.pop("user")
|
||||||
user_data.pop("version")
|
user_data.pop("version")
|
||||||
|
|
||||||
# TODO: replace datetime objects with strings
|
|
||||||
|
|
||||||
# add access code that we don't store
|
# add access code that we don't store
|
||||||
user_data["accessCode"] = cards[0]["access_code"]
|
user_data["accessCode"] = cards[0]["access_code"]
|
||||||
|
|
||||||
# hardcode Card Maker version for now
|
# add the compatible card maker version from config
|
||||||
# Card Maker 1.34.00 = 1.30.01
|
card_maker_ver = self.game_cfg.version.version(self.version)
|
||||||
# Card Maker 1.36.00 = 1.35.04
|
if card_maker_ver and card_maker_ver.get("card_maker"):
|
||||||
user_data["compatibleCmVersion"] = "1.30.01"
|
# Card Maker 1.30 = 1.30.01+
|
||||||
|
# Card Maker 1.35 = 1.35.03+
|
||||||
|
user_data["compatibleCmVersion"] = card_maker_ver.get("card_maker")
|
||||||
|
|
||||||
return {"userId": data["userId"], "userData": user_data}
|
return {"userId": data["userId"], "userData": user_data}
|
||||||
|
|
||||||
@ -333,6 +333,8 @@ class OngekiBright(OngekiBase):
|
|||||||
select_point = data["selectPoint"]
|
select_point = data["selectPoint"]
|
||||||
|
|
||||||
total_gacha_count, ceiling_gacha_count = 0, 0
|
total_gacha_count, ceiling_gacha_count = 0, 0
|
||||||
|
# 0 = can still use Gacha Select, 1 = already used Gacha Select
|
||||||
|
use_select_point = 0
|
||||||
daily_gacha_cnt, five_gacha_cnt, eleven_gacha_cnt = 0, 0, 0
|
daily_gacha_cnt, five_gacha_cnt, eleven_gacha_cnt = 0, 0, 0
|
||||||
daily_gacha_date = datetime.strptime("2000-01-01", "%Y-%m-%d")
|
daily_gacha_date = datetime.strptime("2000-01-01", "%Y-%m-%d")
|
||||||
|
|
||||||
@ -344,6 +346,9 @@ class OngekiBright(OngekiBase):
|
|||||||
daily_gacha_cnt = user_gacha["dailyGachaCnt"]
|
daily_gacha_cnt = user_gacha["dailyGachaCnt"]
|
||||||
five_gacha_cnt = user_gacha["fiveGachaCnt"]
|
five_gacha_cnt = user_gacha["fiveGachaCnt"]
|
||||||
eleven_gacha_cnt = user_gacha["elevenGachaCnt"]
|
eleven_gacha_cnt = user_gacha["elevenGachaCnt"]
|
||||||
|
# if the Gacha Select has been used, make sure to keep it
|
||||||
|
if user_gacha["useSelectPoint"] == 1:
|
||||||
|
use_select_point = 1
|
||||||
# parse just the year, month and date
|
# parse just the year, month and date
|
||||||
daily_gacha_date = user_gacha["dailyGachaDate"]
|
daily_gacha_date = user_gacha["dailyGachaDate"]
|
||||||
|
|
||||||
@ -359,7 +364,7 @@ class OngekiBright(OngekiBase):
|
|||||||
totalGachaCnt=total_gacha_count + gacha_count,
|
totalGachaCnt=total_gacha_count + gacha_count,
|
||||||
ceilingGachaCnt=ceiling_gacha_count + gacha_count,
|
ceilingGachaCnt=ceiling_gacha_count + gacha_count,
|
||||||
selectPoint=select_point,
|
selectPoint=select_point,
|
||||||
useSelectPoint=0,
|
useSelectPoint=use_select_point,
|
||||||
dailyGachaCnt=daily_gacha_cnt + gacha_count,
|
dailyGachaCnt=daily_gacha_cnt + gacha_count,
|
||||||
fiveGachaCnt=five_gacha_cnt + 1 if gacha_count == 5 else five_gacha_cnt,
|
fiveGachaCnt=five_gacha_cnt + 1 if gacha_count == 5 else five_gacha_cnt,
|
||||||
elevenGachaCnt=eleven_gacha_cnt + 1
|
elevenGachaCnt=eleven_gacha_cnt + 1
|
||||||
|
@ -136,14 +136,3 @@ class OngekiBrightMemory(OngekiBright):
|
|||||||
|
|
||||||
def handle_get_game_music_release_state_api_request(self, data: Dict) -> Dict:
|
def handle_get_game_music_release_state_api_request(self, data: Dict) -> Dict:
|
||||||
return {"techScore": 0, "cardNum": 0}
|
return {"techScore": 0, "cardNum": 0}
|
||||||
|
|
||||||
def handle_cm_get_user_data_api_request(self, data: Dict) -> Dict:
|
|
||||||
# check for a bright memory profile
|
|
||||||
user_data = super().handle_cm_get_user_data_api_request(data)
|
|
||||||
|
|
||||||
# hardcode Card Maker version for now
|
|
||||||
# Card Maker 1.34 = 1.30.01
|
|
||||||
# Card Maker 1.35 = 1.35.03
|
|
||||||
user_data["userData"]["compatibleCmVersion"] = "1.35.03"
|
|
||||||
|
|
||||||
return user_data
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from ast import Dict
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
@ -33,7 +34,23 @@ class OngekiGachaConfig:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class OngekiCardMakerVersionConfig:
|
||||||
|
def __init__(self, parent_config: "OngekiConfig") -> None:
|
||||||
|
self.__config = parent_config
|
||||||
|
|
||||||
|
def version(self, version: int) -> Dict:
|
||||||
|
"""
|
||||||
|
in the form of:
|
||||||
|
<ongeki version>: {"card_maker": <compatible card maker version>}
|
||||||
|
6: {"card_maker": 1.30.01}
|
||||||
|
"""
|
||||||
|
return CoreConfig.get_config_field(
|
||||||
|
self.__config, "ongeki", "version", default={}
|
||||||
|
).get(version)
|
||||||
|
|
||||||
|
|
||||||
class OngekiConfig(dict):
|
class OngekiConfig(dict):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.server = OngekiServerConfig(self)
|
self.server = OngekiServerConfig(self)
|
||||||
self.gachas = OngekiGachaConfig(self)
|
self.gachas = OngekiGachaConfig(self)
|
||||||
|
self.version = OngekiCardMakerVersionConfig(self)
|
||||||
|
@ -67,12 +67,12 @@ class OngekiConstants:
|
|||||||
VERSION_NAMES = (
|
VERSION_NAMES = (
|
||||||
"ONGEKI",
|
"ONGEKI",
|
||||||
"ONGEKI +",
|
"ONGEKI +",
|
||||||
"ONGEKI Summer",
|
"ONGEKI SUMMER",
|
||||||
"ONGEKI Summer+",
|
"ONGEKI SUMMER +",
|
||||||
"ONGEKI Red",
|
"ONGEKI R.E.D.",
|
||||||
"ONGEKI Red+",
|
"ONGEKI R.E.D. +",
|
||||||
"ONGEKI Bright",
|
"ONGEKI bright",
|
||||||
"ONGEKI Bright Memory",
|
"ONGEKI bright MEMORY",
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -11,6 +11,7 @@ from os import path
|
|||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
from core.config import CoreConfig
|
from core.config import CoreConfig
|
||||||
|
from core.utils import Utils
|
||||||
from titles.ongeki.config import OngekiConfig
|
from titles.ongeki.config import OngekiConfig
|
||||||
from titles.ongeki.const import OngekiConstants
|
from titles.ongeki.const import OngekiConstants
|
||||||
from titles.ongeki.base import OngekiBase
|
from titles.ongeki.base import OngekiBase
|
||||||
@ -101,6 +102,7 @@ class OngekiServlet:
|
|||||||
url_split = url_path.split("/")
|
url_split = url_path.split("/")
|
||||||
internal_ver = 0
|
internal_ver = 0
|
||||||
endpoint = url_split[len(url_split) - 1]
|
endpoint = url_split[len(url_split) - 1]
|
||||||
|
client_ip = Utils.get_ip_addr(request)
|
||||||
|
|
||||||
if version < 105: # 1.0
|
if version < 105: # 1.0
|
||||||
internal_ver = OngekiConstants.VER_ONGEKI
|
internal_ver = OngekiConstants.VER_ONGEKI
|
||||||
@ -137,7 +139,10 @@ class OngekiServlet:
|
|||||||
|
|
||||||
req_data = json.loads(unzip)
|
req_data = json.loads(unzip)
|
||||||
|
|
||||||
self.logger.info(f"v{version} {endpoint} request - {req_data}")
|
self.logger.info(
|
||||||
|
f"v{version} {endpoint} request from {client_ip}"
|
||||||
|
)
|
||||||
|
self.logger.debug(req_data)
|
||||||
|
|
||||||
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
|
func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
|
||||||
|
|
||||||
@ -156,6 +161,6 @@ class OngekiServlet:
|
|||||||
if resp == None:
|
if resp == 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"))
|
||||||
|
@ -316,7 +316,7 @@ class OngekiProfileData(BaseData):
|
|||||||
return result.fetchone()
|
return result.fetchone()
|
||||||
|
|
||||||
def get_profile_rating_log(self, aime_id: int) -> Optional[List[Row]]:
|
def get_profile_rating_log(self, aime_id: int) -> Optional[List[Row]]:
|
||||||
sql = select(rating_log).where(recent_rating.c.user == aime_id)
|
sql = select(rating_log).where(rating_log.c.user == aime_id)
|
||||||
|
|
||||||
result = self.execute(sql)
|
result = self.execute(sql)
|
||||||
if result is None:
|
if result is None:
|
||||||
|
@ -16,6 +16,7 @@ events = Table(
|
|||||||
Column("eventId", Integer),
|
Column("eventId", Integer),
|
||||||
Column("type", Integer),
|
Column("type", Integer),
|
||||||
Column("name", String(255)),
|
Column("name", String(255)),
|
||||||
|
Column("startDate", TIMESTAMP, server_default=func.now()),
|
||||||
Column("enabled", Boolean, server_default="1"),
|
Column("enabled", Boolean, server_default="1"),
|
||||||
UniqueConstraint("version", "eventId", "type", name="ongeki_static_events_uk"),
|
UniqueConstraint("version", "eventId", "type", name="ongeki_static_events_uk"),
|
||||||
mysql_charset="utf8mb4",
|
mysql_charset="utf8mb4",
|
||||||
|
Loading…
Reference in New Issue
Block a user