KH2: Reduce unnecessary packets sent/requested by the client (#4035)
This commit is contained in:
parent
8f307c226b
commit
a9435dc6bb
|
@ -110,6 +110,7 @@ class KH2Context(CommonContext):
|
||||||
18: TWTNW_Checks,
|
18: TWTNW_Checks,
|
||||||
# 255: {}, # starting screen
|
# 255: {}, # starting screen
|
||||||
}
|
}
|
||||||
|
self.last_world_int = -1
|
||||||
# 0x2A09C00+0x40 is the sve anchor. +1 is the last saved room
|
# 0x2A09C00+0x40 is the sve anchor. +1 is the last saved room
|
||||||
# self.sveroom = 0x2A09C00 + 0x41
|
# self.sveroom = 0x2A09C00 + 0x41
|
||||||
# 0 not in battle 1 in yellow battle 2 red battle #short
|
# 0 not in battle 1 in yellow battle 2 red battle #short
|
||||||
|
@ -387,13 +388,15 @@ class KH2Context(CommonContext):
|
||||||
async def checkWorldLocations(self):
|
async def checkWorldLocations(self):
|
||||||
try:
|
try:
|
||||||
currentworldint = self.kh2_read_byte(self.Now)
|
currentworldint = self.kh2_read_byte(self.Now)
|
||||||
await self.send_msgs([{
|
if self.last_world_int != currentworldint:
|
||||||
"cmd": "Set", "key": "Slot: " + str(self.slot) + " :CurrentWorld",
|
self.last_world_int = currentworldint
|
||||||
"default": 0, "want_reply": True, "operations": [{
|
await self.send_msgs([{
|
||||||
"operation": "replace",
|
"cmd": "Set", "key": "Slot: " + str(self.slot) + " :CurrentWorld",
|
||||||
"value": currentworldint
|
"default": 0, "want_reply": False, "operations": [{
|
||||||
}]
|
"operation": "replace",
|
||||||
}])
|
"value": currentworldint
|
||||||
|
}]
|
||||||
|
}])
|
||||||
if currentworldint in self.worldid_to_locations:
|
if currentworldint in self.worldid_to_locations:
|
||||||
curworldid = self.worldid_to_locations[currentworldint]
|
curworldid = self.worldid_to_locations[currentworldint]
|
||||||
for location, data in curworldid.items():
|
for location, data in curworldid.items():
|
||||||
|
@ -804,7 +807,7 @@ class KH2Context(CommonContext):
|
||||||
logger.info("line 840")
|
logger.info("line 840")
|
||||||
|
|
||||||
|
|
||||||
def finishedGame(ctx: KH2Context, message):
|
def finishedGame(ctx: KH2Context):
|
||||||
if ctx.kh2slotdata['FinalXemnas'] == 1:
|
if ctx.kh2slotdata['FinalXemnas'] == 1:
|
||||||
if not ctx.final_xemnas and ctx.kh2_read_byte(ctx.Save + all_world_locations[LocationName.FinalXemnas].addrObtained) \
|
if not ctx.final_xemnas and ctx.kh2_read_byte(ctx.Save + all_world_locations[LocationName.FinalXemnas].addrObtained) \
|
||||||
& 0x1 << all_world_locations[LocationName.FinalXemnas].bitIndex > 0:
|
& 0x1 << all_world_locations[LocationName.FinalXemnas].bitIndex > 0:
|
||||||
|
@ -836,8 +839,9 @@ def finishedGame(ctx: KH2Context, message):
|
||||||
elif ctx.kh2slotdata['Goal'] == 2:
|
elif ctx.kh2slotdata['Goal'] == 2:
|
||||||
# for backwards compat
|
# for backwards compat
|
||||||
if "hitlist" in ctx.kh2slotdata:
|
if "hitlist" in ctx.kh2slotdata:
|
||||||
|
locations = ctx.sending
|
||||||
for boss in ctx.kh2slotdata["hitlist"]:
|
for boss in ctx.kh2slotdata["hitlist"]:
|
||||||
if boss in message[0]["locations"]:
|
if boss in locations:
|
||||||
ctx.hitlist_bounties += 1
|
ctx.hitlist_bounties += 1
|
||||||
if ctx.hitlist_bounties >= ctx.kh2slotdata["BountyRequired"] or ctx.kh2_seed_save_cache["AmountInvo"]["Amount"]["Bounty"] >= ctx.kh2slotdata["BountyRequired"]:
|
if ctx.hitlist_bounties >= ctx.kh2slotdata["BountyRequired"] or ctx.kh2_seed_save_cache["AmountInvo"]["Amount"]["Bounty"] >= ctx.kh2slotdata["BountyRequired"]:
|
||||||
if ctx.kh2_read_byte(ctx.Save + 0x36B3) < 1:
|
if ctx.kh2_read_byte(ctx.Save + 0x36B3) < 1:
|
||||||
|
@ -878,11 +882,12 @@ async def kh2_watcher(ctx: KH2Context):
|
||||||
await asyncio.create_task(ctx.verifyChests())
|
await asyncio.create_task(ctx.verifyChests())
|
||||||
await asyncio.create_task(ctx.verifyItems())
|
await asyncio.create_task(ctx.verifyItems())
|
||||||
await asyncio.create_task(ctx.verifyLevel())
|
await asyncio.create_task(ctx.verifyLevel())
|
||||||
message = [{"cmd": 'LocationChecks', "locations": ctx.sending}]
|
if finishedGame(ctx) and not ctx.kh2_finished_game:
|
||||||
if finishedGame(ctx, message) and not ctx.kh2_finished_game:
|
|
||||||
await ctx.send_msgs([{"cmd": "StatusUpdate", "status": ClientStatus.CLIENT_GOAL}])
|
await ctx.send_msgs([{"cmd": "StatusUpdate", "status": ClientStatus.CLIENT_GOAL}])
|
||||||
ctx.kh2_finished_game = True
|
ctx.kh2_finished_game = True
|
||||||
await ctx.send_msgs(message)
|
if ctx.sending:
|
||||||
|
message = [{"cmd": 'LocationChecks', "locations": ctx.sending}]
|
||||||
|
await ctx.send_msgs(message)
|
||||||
elif not ctx.kh2connected and ctx.serverconneced:
|
elif not ctx.kh2connected and ctx.serverconneced:
|
||||||
logger.info("Game Connection lost. waiting 15 seconds until trying to reconnect.")
|
logger.info("Game Connection lost. waiting 15 seconds until trying to reconnect.")
|
||||||
ctx.kh2 = None
|
ctx.kh2 = None
|
||||||
|
|
Loading…
Reference in New Issue