FF1: fix printjson
This commit is contained in:
		
							parent
							
								
									99d2caa57d
								
							
						
					
					
						commit
						88a225764a
					
				| 
						 | 
					@ -5,6 +5,7 @@ import urllib.parse
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import typing
 | 
					import typing
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
 | 
					import functools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ModuleUpdate
 | 
					import ModuleUpdate
 | 
				
			||||||
ModuleUpdate.update()
 | 
					ModuleUpdate.update()
 | 
				
			||||||
| 
						 | 
					@ -17,7 +18,8 @@ if __name__ == "__main__":
 | 
				
			||||||
    Utils.init_logging("TextClient", exception_logger="Client")
 | 
					    Utils.init_logging("TextClient", exception_logger="Client")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from MultiServer import CommandProcessor
 | 
					from MultiServer import CommandProcessor
 | 
				
			||||||
from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission, NetworkSlot
 | 
					from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, \
 | 
				
			||||||
 | 
					    ClientStatus, Permission, NetworkSlot, RawJSONtoTextParser
 | 
				
			||||||
from Utils import Version, stream_input
 | 
					from Utils import Version, stream_input
 | 
				
			||||||
from worlds import network_data_package, AutoWorldRegister
 | 
					from worlds import network_data_package, AutoWorldRegister
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
| 
						 | 
					@ -204,6 +206,10 @@ class CommonContext:
 | 
				
			||||||
        # execution
 | 
					        # execution
 | 
				
			||||||
        self.keep_alive_task = asyncio.create_task(keep_alive(self), name="Bouncy")
 | 
					        self.keep_alive_task = asyncio.create_task(keep_alive(self), name="Bouncy")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @functools.cached_property
 | 
				
			||||||
 | 
					    def raw_text_parser(self) -> RawJSONtoTextParser:
 | 
				
			||||||
 | 
					        return RawJSONtoTextParser(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def total_locations(self) -> typing.Optional[int]:
 | 
					    def total_locations(self) -> typing.Optional[int]:
 | 
				
			||||||
        """Will return None until connected."""
 | 
					        """Will return None until connected."""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										45
									
								
								FF1Client.py
								
								
								
								
							
							
						
						
									
										45
									
								
								FF1Client.py
								
								
								
								
							| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
import asyncio
 | 
					import asyncio
 | 
				
			||||||
 | 
					import copy
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
from asyncio import StreamReader, StreamWriter
 | 
					from asyncio import StreamReader, StreamWriter
 | 
				
			||||||
| 
						 | 
					@ -6,7 +7,7 @@ from typing import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Utils
 | 
					import Utils
 | 
				
			||||||
from CommonClient import CommonContext, server_loop, gui_enabled, console_loop, ClientCommandProcessor, logger, \
 | 
					from CommonClient import CommonContext, server_loop, gui_enabled, ClientCommandProcessor, logger, \
 | 
				
			||||||
    get_base_parser
 | 
					    get_base_parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SYSTEM_MESSAGE_ID = 0
 | 
					SYSTEM_MESSAGE_ID = 0
 | 
				
			||||||
| 
						 | 
					@ -64,7 +65,7 @@ class FF1Context(CommonContext):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _set_message(self, msg: str, msg_id: int):
 | 
					    def _set_message(self, msg: str, msg_id: int):
 | 
				
			||||||
        if DISPLAY_MSGS:
 | 
					        if DISPLAY_MSGS:
 | 
				
			||||||
            self.messages[(time.time(), msg_id)] = msg
 | 
					            self.messages[time.time(), msg_id] = msg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def on_package(self, cmd: str, args: dict):
 | 
					    def on_package(self, cmd: str, args: dict):
 | 
				
			||||||
        if cmd == 'Connected':
 | 
					        if cmd == 'Connected':
 | 
				
			||||||
| 
						 | 
					@ -76,29 +77,23 @@ class FF1Context(CommonContext):
 | 
				
			||||||
        elif cmd == "ReceivedItems":
 | 
					        elif cmd == "ReceivedItems":
 | 
				
			||||||
            msg = f"Received {', '.join([self.item_names[item.item] for item in args['items']])}"
 | 
					            msg = f"Received {', '.join([self.item_names[item.item] for item in args['items']])}"
 | 
				
			||||||
            self._set_message(msg, SYSTEM_MESSAGE_ID)
 | 
					            self._set_message(msg, SYSTEM_MESSAGE_ID)
 | 
				
			||||||
        elif cmd == 'PrintJSON':
 | 
					
 | 
				
			||||||
            print_type = args['type']
 | 
					    def on_print_json(self, args: dict):
 | 
				
			||||||
            item = args['item']
 | 
					        relevant = args.get("type", None) in {"Hint", "ItemSend"}
 | 
				
			||||||
            receiving_player_id = args['receiving']
 | 
					        if relevant:
 | 
				
			||||||
            receiving_player_name = self.player_names[receiving_player_id]
 | 
					            item = args["item"]
 | 
				
			||||||
            sending_player_id = item.player
 | 
					            # goes to this world
 | 
				
			||||||
            sending_player_name = self.player_names[item.player]
 | 
					            if self.slot_concerns_self(args["receiving"]):
 | 
				
			||||||
            if print_type == 'Hint':
 | 
					                relevant = True
 | 
				
			||||||
                msg = f"Hint: Your {self.item_names[item.item]} is at" \
 | 
					            # found in this world
 | 
				
			||||||
                      f" {self.player_names[item.player]}'s {self.location_names[item.location]}"
 | 
					            elif self.slot_concerns_self(item.player):
 | 
				
			||||||
                self._set_message(msg, item.item)
 | 
					                relevant = True
 | 
				
			||||||
            elif print_type == 'ItemSend' and receiving_player_id != self.slot:
 | 
					            # not related
 | 
				
			||||||
                if sending_player_id == self.slot:
 | 
					            else:
 | 
				
			||||||
                    if receiving_player_id == self.slot:
 | 
					                relevant = False
 | 
				
			||||||
                        msg = f"You found your own {self.item_names[item.item]}"
 | 
					            if relevant:
 | 
				
			||||||
                    else:
 | 
					                item = args["item"]
 | 
				
			||||||
                        msg = f"You sent {self.item_names[item.item]} to {receiving_player_name}"
 | 
					                msg = self.raw_text_parser(copy.deepcopy(args["data"]))
 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    if receiving_player_id == sending_player_id:
 | 
					 | 
				
			||||||
                        msg = f"{sending_player_name} found their {self.item_names[item.item]}"
 | 
					 | 
				
			||||||
                    else:
 | 
					 | 
				
			||||||
                        msg = f"{sending_player_name} sent {self.item_names[item.item]} to " \
 | 
					 | 
				
			||||||
                              f"{receiving_player_name}"
 | 
					 | 
				
			||||||
                self._set_message(msg, item.item)
 | 
					                self._set_message(msg, item.item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run_gui(self):
 | 
					    def run_gui(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -743,6 +743,7 @@ async def countdown(ctx: Context, timer: int):
 | 
				
			||||||
        broadcast_countdown(ctx, 0, f"[Server]: GO")
 | 
					        broadcast_countdown(ctx, 0, f"[Server]: GO")
 | 
				
			||||||
        ctx.countdown_timer = 0
 | 
					        ctx.countdown_timer = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def broadcast_text_all(ctx: Context, text: str, additional_arguments: dict = {}):
 | 
					def broadcast_text_all(ctx: Context, text: str, additional_arguments: dict = {}):
 | 
				
			||||||
    old_clients, new_clients = [], []
 | 
					    old_clients, new_clients = [], []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -755,8 +756,10 @@ def broadcast_text_all(ctx: Context, text: str, additional_arguments: dict = {})
 | 
				
			||||||
    ctx.broadcast(old_clients, [{"cmd": "Print", "text": text }])
 | 
					    ctx.broadcast(old_clients, [{"cmd": "Print", "text": text }])
 | 
				
			||||||
    ctx.broadcast(new_clients, [{**{"cmd": "PrintJSON", "data": [{ "text": text }]}, **additional_arguments}])
 | 
					    ctx.broadcast(new_clients, [{**{"cmd": "PrintJSON", "data": [{ "text": text }]}, **additional_arguments}])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def broadcast_countdown(ctx: Context, timer: int, message: str):
 | 
					def broadcast_countdown(ctx: Context, timer: int, message: str):
 | 
				
			||||||
    broadcast_text_all(ctx, message, { "type": "Countdown", "countdown": timer })
 | 
					    broadcast_text_all(ctx, message, {"type": "Countdown", "countdown": timer})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_players_string(ctx: Context):
 | 
					def get_players_string(ctx: Context):
 | 
				
			||||||
    auth_clients = {(c.team, c.slot) for c in ctx.endpoints if c.auth}
 | 
					    auth_clients = {(c.team, c.slot) for c in ctx.endpoints if c.auth}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,9 +15,6 @@ import typing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from json import loads, dumps
 | 
					from json import loads, dumps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ModuleUpdate
 | 
					 | 
				
			||||||
ModuleUpdate.update()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from Utils import init_logging, messagebox
 | 
					from Utils import init_logging, messagebox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,11 +135,6 @@ class SC2Context(CommonContext):
 | 
				
			||||||
    last_loc_list = None
 | 
					    last_loc_list = None
 | 
				
			||||||
    difficulty_override = -1
 | 
					    difficulty_override = -1
 | 
				
			||||||
    mission_id_to_location_ids: typing.Dict[int, typing.List[int]] = {}
 | 
					    mission_id_to_location_ids: typing.Dict[int, typing.List[int]] = {}
 | 
				
			||||||
    raw_text_parser: RawJSONtoTextParser
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, *args, **kwargs):
 | 
					 | 
				
			||||||
        super(SC2Context, self).__init__(*args, **kwargs)
 | 
					 | 
				
			||||||
        self.raw_text_parser = RawJSONtoTextParser(self)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def server_auth(self, password_requested: bool = False):
 | 
					    async def server_auth(self, password_requested: bool = False):
 | 
				
			||||||
        if password_requested and not self.password:
 | 
					        if password_requested and not self.password:
 | 
				
			||||||
| 
						 | 
					@ -164,10 +159,13 @@ class SC2Context(CommonContext):
 | 
				
			||||||
                check_mod_install()
 | 
					                check_mod_install()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def on_print_json(self, args: dict):
 | 
					    def on_print_json(self, args: dict):
 | 
				
			||||||
 | 
					        # goes to this world
 | 
				
			||||||
        if "receiving" in args and self.slot_concerns_self(args["receiving"]):
 | 
					        if "receiving" in args and self.slot_concerns_self(args["receiving"]):
 | 
				
			||||||
            relevant = True
 | 
					            relevant = True
 | 
				
			||||||
 | 
					        # found in this world
 | 
				
			||||||
        elif "item" in args and self.slot_concerns_self(args["item"].player):
 | 
					        elif "item" in args and self.slot_concerns_self(args["item"].player):
 | 
				
			||||||
            relevant = True
 | 
					            relevant = True
 | 
				
			||||||
 | 
					        # not related
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            relevant = False
 | 
					            relevant = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue