forked from PekanMmd/Pokemon-XD-Code
-
Notifications
You must be signed in to change notification settings - Fork 0
/
XGiOSExtensions.swift
110 lines (77 loc) · 2.76 KB
/
XGiOSExtensions.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
// XGiOSExtensions.swift
// GoD Tool
//
// Created by StarsMmd on 20/08/2017.
//
//
import Foundation
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let region = XGRegions.US
var verbose = true
let date = Date(timeIntervalSinceNow: 0)
var logString = ""
func printg(_ args: Any...) {
for arg in args {
print(arg, separator: " ", terminator: " ")
}
print("") // automatically adds new line
for arg in args {
logString = logString + String(describing: arg) + " "
}
logString = logString + "\n"
XGUtility.saveString(logString, toFile: .log(date))
}
extension GoDTexture {
func importImage(file: XGFiles) {
XGTexturePNGReimporter.replaceTextureData(textureFile: self.file, withImage: file)
}
func saveImage(file: XGFiles) {
return
}
}
extension XGStringTable {
func replaceString(_ string: XGString, alert: Bool) -> Bool {
let copyStream = self.stringTable.getCharStreamFromOffset(0, length: self.stringOffsets[string.id]!)
let dataCopy = XGMutableData(byteStream: copyStream, file: self.file)
let oldText = self.stringWithID(string.id)!
let difference = string.dataLength - oldText.dataLength
if difference <= self.extraCharacters {
let stream = string.byteStream
dataCopy.appendBytes(stream)
let oldEnd = self.endOffsetForStringId(string.id)
let newEnd = stringTable.getCharStreamFromOffset(oldEnd, length: fileSize - oldEnd)
let endData = XGMutableData(byteStream: newEnd, file: self.file)
dataCopy.appendBytes(endData.charStream)
if string.dataLength > oldText.dataLength {
for _ in 0 ..< difference {
let currentOff = dataCopy.length - 1
let range = NSMakeRange(currentOff, 1)
dataCopy.deleteBytesInRange(range)
}
self.increaseOffsetsAfter(stringOffsets[string.id]!, byCharacters: difference)
}
if string.dataLength < oldText.dataLength {
let difference = oldText.dataLength - string.dataLength
var emptyByte : UInt8 = 0x0
for _ in 0 ..< difference {
dataCopy.data.append(&emptyByte, length: 1)
}
self.decreaseOffsetsAfter(stringOffsets[string.id]!, byCharacters: difference)
}
self.stringTable = dataCopy
self.updateOffsets()
self.save()
if alert {
XGAlertView(title: "String Replacement", message: "The string replacement was successful.", doneButtonTitle: "Sweet", otherButtonTitles: nil, buttonAction: nil).show()
}
stringsLoaded = false
return true
} else {
if alert {
XGAlertView(title: "String Replacement", message: "The new string was too long. String replacement was aborted.", doneButtonTitle: "Cool", otherButtonTitles: nil, buttonAction: nil).show()
}
}
return false
}
}