diff --git a/titles/chuni/base.py b/titles/chuni/base.py index c3b9ca2..9e8a634 100644 --- a/titles/chuni/base.py +++ b/titles/chuni/base.py @@ -811,6 +811,12 @@ class ChuniBase: upsert = data["upsertUserAll"] user_id = data["userId"] + if int(user_id) & 0x1000000000001 == 0x1000000000001: + place_id = int(user_id) & 0xFFFC00000000 + + self.logger.info("Guest play from place ID %d, ignoring.", place_id) + return {"returnCode": "1"} + if "userData" in upsert: try: upsert["userData"][0]["userName"] = self.read_wtf8( diff --git a/titles/mai2/base.py b/titles/mai2/base.py index 5a5edb9..a75a94f 100644 --- a/titles/mai2/base.py +++ b/titles/mai2/base.py @@ -238,8 +238,10 @@ class Mai2Base: user_id = data["userId"] upsert = data["upsertUserAll"] - if int(user_id) & 1000000000001 == 1000000000001: - self.logger.info("Guest play, ignoring.") + if int(user_id) & 0x1000000000001 == 0x1000000000001: + place_id = int(user_id) & 0xFFFC00000000 + + self.logger.info("Guest play from place ID %d, ignoring.", place_id) return {"returnCode": 1, "apiName": "UpsertUserAllApi"} if "userData" in upsert and len(upsert["userData"]) > 0: diff --git a/titles/mai2/dx.py b/titles/mai2/dx.py index 0d3bddd..8d6e738 100644 --- a/titles/mai2/dx.py +++ b/titles/mai2/dx.py @@ -121,8 +121,10 @@ class Mai2DX(Mai2Base): user_id = data["userId"] upsert = data["upsertUserAll"] - if int(user_id) & 1000000000001 == 1000000000001: - self.logger.info("Guest play, ignoring.") + if int(user_id) & 0x1000000000001 == 0x1000000000001: + place_id = int(user_id) & 0xFFFC00000000 + + self.logger.info("Guest play from place ID %d, ignoring.", place_id) return {"returnCode": 1, "apiName": "UpsertUserAllApi"} if "userData" in upsert and len(upsert["userData"]) > 0: diff --git a/titles/ongeki/base.py b/titles/ongeki/base.py index 57a7363..e454dc3 100644 --- a/titles/ongeki/base.py +++ b/titles/ongeki/base.py @@ -293,7 +293,9 @@ class OngekiBase: async def handle_upsert_user_gplog_api_request(self, data: Dict) -> Dict: user = data["userId"] - if user >= 200000000000000: # Account for guest play + + # If playing as guest, the user ID is or(0x1000000000001, (placeId & 65535) << 32) + if user & 0x1000000000001 == 0x1000000000001: user = None await self.data.log.put_gp_log( @@ -945,6 +947,12 @@ class OngekiBase: upsert = data["upsertUserAll"] user_id = data["userId"] + if user_id & 0x1000000000001 == 0x1000000000001: + place_id = int(user_id) & 0xFFFC00000000 + + self.logger.info("Guest play from place ID %d, ignoring.", place_id) + return {"returnCode": 1, "apiName": "UpsertUserAllApi"} + # The isNew fields are new as of Red and up. We just won't use them for now. if "userData" in upsert and len(upsert["userData"]) > 0: