Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: utf8
- # Cossacks Mod manager version 1.1.1
- # Require python 3.5 to work: https://python.org/dowload
- import sys
- def olderversionthan(a, b):
- a = a.split('.')
- b = b.split('.')
- for _a, _b in zip(a, b):
- if _a < _b:
- return True
- elif _a > _b:
- return False
- return False
- def loadmodlist():
- data = {}
- for name, version in [line.split(" version ") for line in open("c3mm.ini", "r").read().split("\n") if line != ""]:
- data[name] = version
- return data
- def savemodlist(modlist):
- data = ""
- for key in modlist:
- data += key + " version " + modlist[key] + "\n"
- open("c3mm.ini", "w").write(data)
- def main(argv):
- modlist = loadmodlist()
- if len (argv) == 1:
- printhelp()
- return
- if argv[1] == "install":
- if len(argv) < 2:
- mod = input("Please type name of mod file: ")
- else:
- mod = argv[2]
- mod = loadmoddata(mod)
- if not mod["name"] in modlist:
- modlist[mod["name"]] = mod["version"]
- elif modlist[mod["name"]] == mod["version"]:
- print(mod["name"], "version", mod["version"], "already installed!")
- exit()
- elif olderversionthan(modlist[mod["name"]], mod["version"]):
- print("Unistall", mod["name"], "version", modlist[mod["name"]])
- uninstall(mod, modlist[mod["name"]])
- modlist[mod["name"]] = mod["version"]
- elif olderversionthan(mod["version"], modlist[mod["name"]]) :
- print(mod["name"], "version", modlist[mod["name"]], " is already installed. Are you sure to install an older version?", "(" + mod["version"] + ")")
- choice = input("yes/no:")
- if choice == "yes":
- print("Unistall", mod["name"], "version", modlist[mod["name"]])
- uninstall(mod, modlist[mod["name"]])
- modlist[mod["name"]] = mod["version"]
- else:
- return
- print("Install", mod["name"], "version", mod["version"])
- install(mod)
- mkuninstall(mod)
- elif argv[1] == "uninstall":
- if len(argv) < 2:
- mod = input("Please type name of mod file: ")
- else:
- mod = argv[2]
- mod = loadmoddata(mod)
- if not mod["name"] in modlist or modlist[mod["name"]] == mod["version"]:
- print(mod["name"], "version", mod["version"], "doesn't exist, impossible to uninstall it.")
- exit()
- print("Unistall", mod["name"], "version", modlist[mod["name"]])
- uninstall(mod, modlist[mod["name"]])
- del modlist[mod["name"]]
- elif argv[1] == "help":
- printhelp ()
- else:
- print("Unknow command", argv[1])
- printhelp()
- savemodlist(modlist)
- def install(mod):
- for file in mod["files"]:
- if not apply(mod["files"][file], file):
- print("Fatal error")
- return
- else:
- print("Patching of", file, "succed!")
- def uninstall(mod, oldversion):
- unistall = loadmoddata(mod["name"] + " " + oldversion + " uninstall")
- install(unistall)
- def backup(path):
- try:
- try:
- open(path + ".backup", "r")
- print("A backup of", path, "already exist")
- except:
- open(path + ".backup", "w").write(open(path, "r").read())
- print("Backup of", path, "suceed!")
- return True
- except:
- print("Impossible to write in", path)
- return False
- def apply(instruction, path):
- if not backup (path):
- return False
- try:
- txt = open(path, "r").read()
- except:
- print("File", path, "don't exist or you havn't access to it.")
- return
- for old, new in instruction:
- txt = txt.replace(old, new)
- try:
- open(path, "w").write(txt)
- except:
- print("Impossible to write in", path)
- return False
- return True
- def printhelp():
- print("python c3mm.py [instruction] [options]\n\t Instruction:\n\tinstall + path : install a cossacks3 mod file.\n\tuninstall + path : uninstall a cossacks3 mod file")
- def loadmoddata(path):
- info, mod = open(path, "r").read().split('\n', 1)
- name, version = info.split(" version ")
- data = {}
- data["name"] = name
- data["version"] = version
- data["files"] = {}
- for file in mod.split("*PATH*"):
- if file == "":
- continue
- path, instruction = file.split("\n", 1)
- instruction = [(old, new) for old, new in [line.split("*REPLACE*") for line in instruction.split("*END*") if line != ""]]
- data["files"][path] = instruction
- return data
- def mkuninstall(mod):
- data = ""
- data += mod["name"] + " version " + mod["version"] + " cleaner\n"
- for file in mod["files"]:
- data += "*PATH*" + file + "\n"
- for old, new in mod["files"][file]:
- data += new + "*REPLACE*" + old + "*END*"
- open(mod["name"] + " " + mod["version"] + " uninstall", "w").write(data)
- if __name__ == "__main__":
- main(sys.argv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement