Factorio: implement backwards compatible printing
This commit is contained in:
parent
eaae4af832
commit
6d6fc52481
|
@ -151,6 +151,9 @@ class FactorioContext(CommonContext):
|
||||||
command_processor = FactorioCommandProcessor
|
command_processor = FactorioCommandProcessor
|
||||||
game = "Factorio"
|
game = "Factorio"
|
||||||
|
|
||||||
|
# updated by spinup server
|
||||||
|
mod_version: Utils.Version = Utils.Version(0, 0, 0)
|
||||||
|
|
||||||
def __init__(self, server_address, password):
|
def __init__(self, server_address, password):
|
||||||
super(FactorioContext, self).__init__(server_address, password)
|
super(FactorioContext, self).__init__(server_address, password)
|
||||||
self.send_index = 0
|
self.send_index = 0
|
||||||
|
@ -179,23 +182,29 @@ class FactorioContext(CommonContext):
|
||||||
def on_print(self, args: dict):
|
def on_print(self, args: dict):
|
||||||
logger.info(args["text"])
|
logger.info(args["text"])
|
||||||
if self.rcon_client:
|
if self.rcon_client:
|
||||||
cleaned_text = args['text'].replace('"', '')
|
self.print_to_game(args['text'])
|
||||||
self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] "
|
|
||||||
f"{cleaned_text}")
|
|
||||||
|
|
||||||
def on_print_json(self, args: dict):
|
def on_print_json(self, args: dict):
|
||||||
text = self.raw_json_text_parser(copy.deepcopy(args["data"]))
|
text = self.raw_json_text_parser(copy.deepcopy(args["data"]))
|
||||||
logger.info(text)
|
logger.info(text)
|
||||||
if self.rcon_client:
|
if self.rcon_client:
|
||||||
text = self.factorio_json_text_parser(args["data"])
|
text = self.factorio_json_text_parser(args["data"])
|
||||||
cleaned_text = text.replace('"', '')
|
self.print_to_game(text)
|
||||||
self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] "
|
|
||||||
f"{cleaned_text}")
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def savegame_name(self) -> str:
|
def savegame_name(self) -> str:
|
||||||
return f"AP_{self.seed_name}_{self.auth}.zip"
|
return f"AP_{self.seed_name}_{self.auth}.zip"
|
||||||
|
|
||||||
|
def print_to_game(self, text):
|
||||||
|
# TODO: remove around version 0.2
|
||||||
|
if self.mod_version < Utils.Version(0, 1, 6):
|
||||||
|
text = text.replace('"', '')
|
||||||
|
self.rcon_client.send_command(f"/sc game.print(\"[font=default-large-bold]Archipelago:[/font] "
|
||||||
|
f"{text}\")")
|
||||||
|
else:
|
||||||
|
self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] "
|
||||||
|
f"{text}")
|
||||||
|
|
||||||
|
|
||||||
async def game_watcher(ctx: FactorioContext):
|
async def game_watcher(ctx: FactorioContext):
|
||||||
bridge_logger = logging.getLogger("FactorioWatcher")
|
bridge_logger = logging.getLogger("FactorioWatcher")
|
||||||
|
@ -332,18 +341,24 @@ async def factorio_spinup_server(ctx: FactorioContext):
|
||||||
while not factorio_queue.empty():
|
while not factorio_queue.empty():
|
||||||
msg = factorio_queue.get()
|
msg = factorio_queue.get()
|
||||||
factorio_server_logger.info(msg)
|
factorio_server_logger.info(msg)
|
||||||
|
if "Loading mod AP-" and msg.endswith("(data.lua)"):
|
||||||
|
parts = msg.split()
|
||||||
|
ctx.mod_version = Utils.Version(*(int(number) for number in parts[-2].split(".")))
|
||||||
if not rcon_client and "Starting RCON interface at IP ADDR:" in msg:
|
if not rcon_client and "Starting RCON interface at IP ADDR:" in msg:
|
||||||
rcon_client = factorio_rcon.RCONClient("localhost", rcon_port, rcon_password)
|
rcon_client = factorio_rcon.RCONClient("localhost", rcon_port, rcon_password)
|
||||||
get_info(ctx, rcon_client)
|
get_info(ctx, rcon_client)
|
||||||
await asyncio.sleep(0.01)
|
await asyncio.sleep(0.01)
|
||||||
|
|
||||||
|
if ctx.mod_version == ctx.__class__.mod_version:
|
||||||
|
raise Exception("No Archipelago mod was loaded. Aborting.")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
logging.error("Aborted Factorio Server Bridge")
|
logging.error("Aborted Factorio Server Bridge")
|
||||||
ctx.exit_event.set()
|
ctx.exit_event.set()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logger.info(f"Got World Information from AP Mod for seed {ctx.seed_name} in slot {ctx.auth}")
|
logger.info(f"Got World Information from AP Mod {tuple(ctx.mod_version)} for seed {ctx.seed_name} in slot {ctx.auth}")
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
factorio_process.terminate()
|
factorio_process.terminate()
|
||||||
|
|
Loading…
Reference in New Issue