def fixFix(fileName): """Search and replace change on scripts and dialog scripts. Strips spaces from around fix (->) operator.""" rePointer = re.compile(r' -> ?', re.M) init(2) fileInfo = mosh.modInfos[fileName] #--Fix scripts if True: fileRep = mosh.FileRep(fileInfo) fileRep.loadUI(factory={'SCPT': mosh.Scpt}) for script in fileRep.indexed['SCPT'].values(): oldCode = script.sctx.data if rePointer.search(oldCode): newCode = rePointer.sub('->', oldCode) script.setCode(newCode) print script.id fileRep.safeSave() #--Fix dialog scripts if True: fileDials = mosh.FileDials(fileInfo) fileDials.load() for dial in fileDials.dials: for info in dial.infos: for record in info.records: if record.name != 'BNAM': continue if rePointer.search(record.data): print dial.id print ' ', info.text print ' ', record.data print record.setData(rePointer.sub('->', record.data)) info.setChanged() break fileDials.safeSave()
def temp(fileName): init(2) fileInfo = mosh.modInfos[fileName] fileDials = mosh.FileDials(fileInfo) fileDials.load(factory={'INFO': mosh.Info}) #--Replacement defs repls = { 'activator': 'init', 'allowBack': 'back', 'aShort': 's01', 'bShort': 's02', } replKeys = set(repls.keys()) reRepls = re.compile(r'\b(' + ('|'.join(replKeys)) + r')\b') reStartScript = re.compile('^startScript', re.I + re.M) def doRepl(mo): return repls[mo.group(0)] #--Loop over dials for dial in fileDials.dials: print dial.id for info in dial.infos: #--Change id? if info.spId == 'wr_mysMenu_s': info.spId = 'wr_mysCre' info.setChanged() elif info.spId == 'wr_bookMenu_s': info.spId = 'wr_bookCre' info.setChanged() #--Change tests? if info.spId in ('wr_mysCre', 'wr_bookCre'): #--Test vars for index, test in enumerate(info.tests): if not test: pass elif test.text.lower() == 'modder': if test.value == 0 and test.oper == 0: test.text = 'menu' test.value = -1 print ' modder >> menu' else: info.tests[index] = 0 print ' modder X' elif test.text in replKeys: print '', test.text, repls[test.text] test.text = repls[test.text] #--Result if info.script: newScript = reRepls.sub(doRepl, info.script) newScript = reStartScript.sub('player->startScript', newScript) if newScript != info.script: info.script = newScript print ' script subbed' info.setChanged() fileDials.safeSave()