Visa ett inlägg
Gammal 2015-11-11, 00:14   #4
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 717
Standard Att uppdatera assets för TANE

Detta är väl framförallt riktat till Lan, men det kan ju vara fler som är intresserade.

Jag pratade i en annan tråd om hur man kan förenkla det tråkiga arbetet att uppdatera assets till att fungera med TANE, ett första steg skulle vara att automatiskt öka kuid-nummer, eller byta trainz-build-nummer. Detta kan man naturligtvis göra med Python, så det tänkte jag dela med mig av!

Detta script körs på en bunt med assetmappar och gör följande med deras configar:
  • Uppdaterar Kuid-nummer
    • <kuid:xxxx:yyyy> blir <kuid2:xxxx:yyyy:2>
    • <kuid2:xxxx:yyyy:z> blir <kuid2:xxxx:yyyy:z+1> (ett snäpp högre versionsnummer)
  • Uppdaterar trainz-build-numret till 3.9

Först och främst så måste man ladda ned Python, för man måste ha en interpretator(ett program som kör Python-kod) lokalt på datorn om man vill köra detta script, inte som förra exemplet där vi använde Blenders inbyggda Python interpretator eller en webbaserad.
Denna laddas ned härifrån:
https://www.python.org/downloads/release/python-350/
Välj Windows x86-64 executable installer för er som har 64bitars Windows (eller den utan som heter Windows x86 executable installer om ni har 32-bitar, vilket är mindre troligt)
Sedan är det bara att installera som ett vanligt program.

Skapa en uppdateringsmapp någonstans på datorn där alla assets skall ligga medans de uppdateras, döp den till valfritt namn.

Nästa steg är att öppna de assets från TS2009/10/12 som ni vill uppdatera. Markera ett par stycken assets i CM som ni vill uppdatera (börja med ett fåtal för att kunna se att det fungerar) och kopiera assetsmapparna ifrån UserData/editing till den tomma uppdateringsmappen som du skapade nyss. Reverta de öppnade assetsen i CM.

I uppdateringsmappen som assetmapparna ligger i nu, skapa en ny fil, kalla den tane_update.py, högerklicka på den och välj Edit with IDLE>Edit with IDLE 3.5 (64-bit) för att använda Pythons egna texteditor.
Kopiera in följande kod:
Kod:
import os
import traceback

REPLACE_BUILD_NO = "3.9"

"""
Updates an kuid line to next version. A kuid will be turned int a kuid2 and
a kuid2 will be bumped one version
"""
def update_kuid_line(line):
    before, kuid = line.split('<')
    kuid, after = kuid.split('>')
    
    if(kuid.startswith("kuid2")):
        s = kuid.split(':')
        kuid = s[0] + ':' + s[1] + ':' + s[2] + ':' + str(int(s[3])+1)
    else:
        s = kuid.split(':')
        kuid = "kuid2:" + s[1] + ':' + s[2] + ":2"
        
    return before + '<' + kuid + '>' + after


"""
Updates an kuid line to next version. A kuid will be turned int a kuid2 and
a kuid2 will be bumped one version
"""
def update_trainz_build_line(line):
    #splits like: ("trainz-build    2", "9   \n")
    parts = line.split('.')
    return parts[0][:-1] + REPLACE_BUILD_NO + parts[1][1:]
    
    

"""
Iterates the file line by line to update it.
"""
def update_config_lines(config_lines):
    for i in range(len(config_lines)):
        line = config_lines[i]
        if line.startswith(("kuid ", "kuid\t")):
            config_lines[i] = update_kuid_line(line)
        elif line.startswith("trainz-build"):
            config_lines[i] = update_trainz_build_line(line)


"""
Updates the config.txt that is located in the directory asset_dir
"""
def update_config(asset_dir):
    config_fname = asset_dir + "\\config.txt"

    #Read the file
    f = open(config_fname, 'r')
    lines = f.readlines()
    f.close()

    #Update the content of the file
    update_config_lines(lines)

    #Write back to the file
    f = open(config_fname, 'w')
    f.writelines(lines)
    f.close()
    


"""
Returns a list of all subdirectories in the CWD
"""
def list_asset_dirs():
    return [x[0] for x in os.walk(".") if x[0] != '.']

if __name__ == "__main__":
    dirs = list_asset_dirs()
    #print(dirs)
    for asset in dirs:
        try:
            update_config(asset)
            print("[ OK ] Successfully updated " + asset)
        except Exception as e:
            print("[FAIL] Something went wrong when trying to update " + asset + ":")
            traceback.print_exc()
I menyn högst upp i IDLE:n, välj Run>Run Module (eller tryck F5), så kommer Python interpretatorn att öppnas och scriptet kommer att köras i den mappen som scriptfilen ligger i på alla assets där.



Kontrollera att configfilerna ser okey ut och sedan är det bara att dra in alla assetmappar i TANEs CM, commita dem och fortsätta att fixa lite roligare fel och varningar som uppstått.

(Glöm inte att radera alla assetmappar i uppdateringsmappen när de är inne i TANE, sedan är det bara att kopiera över nya från TS20xx och upprepa proceduren!)
Högst upp i scriptet kan man enkelt ställa in vilken trainz-build den skall byta till, standard är 3.9 som är första betan av TANE.
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat