Patch: update to version 4 (#312)

This commit is contained in:
Fabian Dill
2022-03-18 04:53:09 +01:00
committed by GitHub
parent b02a710bc5
commit 7394598aff
14 changed files with 334 additions and 118 deletions

View File

@@ -7,12 +7,14 @@ import threading
import json
import jinja2
import Utils
import shutil
import Utils
import Patch
from . import Options
from BaseClasses import MultiWorld
from .Technologies import tech_table, rocket_recipes, recipes, free_sample_blacklist, progressive_technology_table, \
base_tech_table, tech_to_progressive_lookup, progressive_tech_table, liquids
from .Technologies import tech_table, recipes, free_sample_blacklist, progressive_technology_table, \
base_tech_table, tech_to_progressive_lookup, liquids
template_env: Optional[jinja2.Environment] = None
@@ -54,6 +56,22 @@ recipe_time_ranges = {
}
class FactorioModFile(Patch.APContainer):
game = "Factorio"
compression_method = zipfile.ZIP_DEFLATED # Factorio can't load LZMA archives
def write_contents(self, opened_zipfile: zipfile.ZipFile):
# directory containing Factorio mod has to come first, or Factorio won't recognize this file as a mod.
mod_dir = self.path[:-4] # cut off .zip
for root, dirs, files in os.walk(mod_dir):
for file in files:
opened_zipfile.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(mod_dir, '..')))
# now we can add extras.
super(FactorioModFile, self).write_contents(opened_zipfile)
def generate_mod(world, output_directory: str):
player = world.player
multiworld = world.world
@@ -159,10 +177,7 @@ def generate_mod(world, output_directory: str):
# zip the result
zf_path = os.path.join(mod_dir + ".zip")
with zipfile.ZipFile(zf_path, compression=zipfile.ZIP_DEFLATED, mode='w') as zf:
for root, dirs, files in os.walk(mod_dir):
for file in files:
zf.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(mod_dir, '..')))
mod = FactorioModFile(zf_path, player=player, player_name=multiworld.player_name[player])
mod.write()
shutil.rmtree(mod_dir)