Trim long strings in UnityTextModifier printouts
This commit is contained in:
@@ -13,6 +13,19 @@ if not os.path.isdir(sys.argv[3]):
|
|||||||
exit()
|
exit()
|
||||||
|
|
||||||
class ScriptEdit:
|
class ScriptEdit:
|
||||||
|
@staticmethod
|
||||||
|
def truncateString(string):
|
||||||
|
trimmed = False
|
||||||
|
if len(string) > 60:
|
||||||
|
trimmed = True
|
||||||
|
string = string[:60]
|
||||||
|
if "\n" in string:
|
||||||
|
trimmed = True
|
||||||
|
string = string.partition("\n")[0].rstrip()
|
||||||
|
if trimmed:
|
||||||
|
string += "..."
|
||||||
|
return string
|
||||||
|
|
||||||
def __init__(self, currentEnglish, currentJapanese, newEnglish, newJapanese, discriminator=None):
|
def __init__(self, currentEnglish, currentJapanese, newEnglish, newJapanese, discriminator=None):
|
||||||
self.currentEnglish = currentEnglish
|
self.currentEnglish = currentEnglish
|
||||||
self.currentJapanese = currentJapanese
|
self.currentJapanese = currentJapanese
|
||||||
@@ -21,6 +34,8 @@ class ScriptEdit:
|
|||||||
self.discriminator = discriminator
|
self.discriminator = discriminator
|
||||||
if (newJapanese is None) != (currentJapanese is None):
|
if (newJapanese is None) != (currentJapanese is None):
|
||||||
raise ValueError("Include either both NewJapanese and CurrentJapanese or neither, but not just one!")
|
raise ValueError("Include either both NewJapanese and CurrentJapanese or neither, but not just one!")
|
||||||
|
self.shortString = ScriptEdit.truncateString(self.currentEnglish) if newJapanese is None else ScriptEdit.truncateString(self.currentEnglish) + " / " + ScriptEdit.truncateString(self.currentJapanese)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def fromJSON(json):
|
def fromJSON(json):
|
||||||
@@ -57,14 +72,14 @@ class ScriptEdit:
|
|||||||
offsets.append(offset)
|
offsets.append(offset)
|
||||||
start = offset + 1
|
start = offset + 1
|
||||||
if len(offsets) == 0:
|
if len(offsets) == 0:
|
||||||
raise IndexError(f"No asset found for {self.currentEnglish} / {self.currentJapanese}")
|
raise IndexError(f"No asset found for {self.shortString}")
|
||||||
if self.discriminator == None:
|
if self.discriminator == None:
|
||||||
if len(offsets) > 1:
|
if len(offsets) > 1:
|
||||||
raise IndexError(f"Multiple assets found for {self.currentEnglish} / {self.currentJapanese}, candidates are " + ", ".join(f"{index}: 0x{offset:x}" for index, offset in enumerate(offsets)) + ". Please select one and add a Discriminator tag for it.")
|
raise IndexError(f"Multiple assets found for {self.shortString}, candidates are " + ", ".join(f"{index}: 0x{offset:x}" for index, offset in enumerate(offsets)) + ". Please select one and add a Discriminator tag for it.")
|
||||||
self.offset = offsets[0]
|
self.offset = offsets[0]
|
||||||
else:
|
else:
|
||||||
if len(offsets) <= self.discriminator:
|
if len(offsets) <= self.discriminator:
|
||||||
raise IndexError(f"Not enough offsets found for ${self.currentEnglish} / {self.currentJapanese} to meet request for #{self.discriminator}, there were only {len(offsets)}")
|
raise IndexError(f"Not enough offsets found for ${self.trimmedE} / {self.trimmedJ} to meet request for #{self.discriminator}, there were only {len(offsets)}")
|
||||||
self.offset = offsets[self.discriminator]
|
self.offset = offsets[self.discriminator]
|
||||||
|
|
||||||
def checkObject(self, id, object, bundle):
|
def checkObject(self, id, object, bundle):
|
||||||
@@ -74,13 +89,13 @@ class ScriptEdit:
|
|||||||
expectedBytes = self.expectedBytes
|
expectedBytes = self.expectedBytes
|
||||||
smallOffset = self.currentData.find(expectedBytes)
|
smallOffset = self.currentData.find(expectedBytes)
|
||||||
self.newData = self.currentData[:smallOffset] + self.newBytes + self.currentData[(smallOffset + len(expectedBytes)):]
|
self.newData = self.currentData[:smallOffset] + self.newBytes + self.currentData[(smallOffset + len(expectedBytes)):]
|
||||||
print(f"Found {self.currentEnglish} / {self.currentJapanese} in object #{id}")
|
print(f"Found {self.shortString} in object #{id}")
|
||||||
|
|
||||||
def write(self, folder):
|
def write(self, folder):
|
||||||
try:
|
try:
|
||||||
self.newData
|
self.newData
|
||||||
except:
|
except:
|
||||||
print(f"Failed to find object id for {self.currentEnglish} / {self.currentJapanese}!")
|
print(f"Failed to find object id for {self.shortString}!")
|
||||||
return
|
return
|
||||||
filename = folder + "/" + str(self.id) + ".dat"
|
filename = folder + "/" + str(self.id) + ".dat"
|
||||||
with open(filename, "wb") as outputFile:
|
with open(filename, "wb") as outputFile:
|
||||||
@@ -109,7 +124,7 @@ with open(sys.argv[1], "rb") as assetsFile:
|
|||||||
try:
|
try:
|
||||||
edit.findInAssetBundle(bundle)
|
edit.findInAssetBundle(bundle)
|
||||||
newEdits.append(edit)
|
newEdits.append(edit)
|
||||||
print(f"Found {edit.currentEnglish} / {edit.currentJapanese} at offset 0x{edit.offset:x}")
|
print(f"Found {edit.shortString} at offset 0x{edit.offset:x}")
|
||||||
except IndexError as e:
|
except IndexError as e:
|
||||||
print(e)
|
print(e)
|
||||||
edits = newEdits
|
edits = newEdits
|
||||||
|
|||||||
Reference in New Issue
Block a user