mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 16:04:38 +01:00
refactor: Enumerate quests turned into a struct and loops
This commit is contained in:
@@ -97,64 +97,48 @@ func handleMsgMhfSaveFavoriteQuest(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type QuestMeta struct {
|
||||||
|
pointers []int32
|
||||||
|
strings [][]byte
|
||||||
|
}
|
||||||
|
|
||||||
func readOriginalPointers(stringPointer int32, quest []byte) []byte {
|
func readOriginalPointers(stringPointer int32, quest []byte) []byte {
|
||||||
fileBytes := byteframe.NewByteFrameFromBytes(quest)
|
fileBytes := byteframe.NewByteFrameFromBytes(quest)
|
||||||
fileBytes.SetLE()
|
fileBytes.SetLE()
|
||||||
fileBytes.Seek(int64(stringPointer), io.SeekStart)
|
fileBytes.Seek(int64(stringPointer), io.SeekStart)
|
||||||
|
|
||||||
questNamePointer := fileBytes.ReadInt32()
|
stringMeta := QuestMeta{
|
||||||
questMainPointer := fileBytes.ReadInt32()
|
pointers: make([]int32, 8),
|
||||||
questAPointer := fileBytes.ReadInt32()
|
strings: make([][]byte, 8),
|
||||||
questBPointer := fileBytes.ReadInt32()
|
}
|
||||||
questClearPointer := fileBytes.ReadInt32()
|
|
||||||
questFailurePointer := fileBytes.ReadInt32()
|
|
||||||
questContractorPointer := fileBytes.ReadInt32()
|
|
||||||
questDescriptionPointer := fileBytes.ReadInt32()
|
|
||||||
|
|
||||||
// Read the strings in order to determine the length of the new string pointers for use in the new offsets
|
for i := 0; i < 8; i++ {
|
||||||
// It must seek to each initial pointer since the order is not consistent.
|
stringMeta.pointers[i] = fileBytes.ReadInt32()
|
||||||
fileBytes.Seek(int64(questNamePointer), io.SeekStart)
|
}
|
||||||
questNameString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questMainPointer), io.SeekStart)
|
|
||||||
questMainString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questAPointer), io.SeekStart)
|
|
||||||
questAString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questBPointer), io.SeekStart)
|
|
||||||
questBString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questClearPointer), io.SeekStart)
|
|
||||||
questClearString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questFailurePointer), io.SeekStart)
|
|
||||||
questFailureString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questContractorPointer), io.SeekStart)
|
|
||||||
questContractorString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
fileBytes.Seek(int64(questDescriptionPointer), io.SeekStart)
|
|
||||||
questDescriptionString := fileBytes.ReadNullTerminatedBytes()
|
|
||||||
|
|
||||||
pointerStart := 352
|
for i := 0; i < 8; i++ {
|
||||||
|
fileBytes.Seek(int64(stringMeta.pointers[i]), io.SeekStart)
|
||||||
|
stringMeta.strings[i] = fileBytes.ReadNullTerminatedBytes()
|
||||||
|
}
|
||||||
|
|
||||||
newPointers := byteframe.NewByteFrame()
|
newPointers := byteframe.NewByteFrame()
|
||||||
newPointers.SetLE()
|
newPointers.SetLE()
|
||||||
|
|
||||||
newPointers.WriteInt32(int32(pointerStart))
|
// write the new string pointers
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + 1))
|
for i := 0; i < 8; i++ {
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + 2))
|
length := 352
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + len(questAString) + 3))
|
for j := 0; j < i; j++ {
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + len(questAString) + len(questBString) + 4))
|
length += len(stringMeta.strings[j]) + 1
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + len(questAString) + len(questBString) + len(questClearString) + 5))
|
}
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + len(questAString) + len(questBString) + len(questClearString) + len(questFailureString) + 6))
|
newPointers.WriteInt32(int32(length))
|
||||||
newPointers.WriteInt32(int32(pointerStart + len(questNameString) + len(questMainString) + len(questAString) + len(questBString) + len(questClearString) + len(questFailureString) + len(questContractorString) + 7))
|
}
|
||||||
|
|
||||||
newPointers.WriteNullTerminatedBytes(questNameString)
|
for i := 0; i < 8; i++ {
|
||||||
newPointers.WriteNullTerminatedBytes(questMainString)
|
newPointers.WriteNullTerminatedBytes(stringMeta.strings[i])
|
||||||
newPointers.WriteNullTerminatedBytes(questAString)
|
}
|
||||||
newPointers.WriteNullTerminatedBytes(questBString)
|
|
||||||
newPointers.WriteNullTerminatedBytes(questClearString)
|
|
||||||
newPointers.WriteNullTerminatedBytes(questFailureString)
|
|
||||||
newPointers.WriteNullTerminatedBytes(questContractorString)
|
|
||||||
newPointers.WriteNullTerminatedBytes(questDescriptionString)
|
|
||||||
|
|
||||||
newPointers.WriteUint8(18)
|
newPointers.WriteUint8(1)
|
||||||
newPointers.WriteBytes([]byte{0x83, 0x59, 0x89, 0x5B, 0x83, 0x3A, 0x58, 0xB6, 0x8E, 0x59, 0x82, 0xCC, 0x83, 0x58, 0x83, 0x58, 0x83, 0x81})
|
newPointers.WriteInt8(0x00)
|
||||||
|
|
||||||
return newPointers.Data()
|
return newPointers.Data()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user