Add a serialiser for struct sttResourceItemValue.
This commit is contained in:
parent
9c1aeb753e
commit
b8b156a724
5 changed files with 168 additions and 0 deletions
|
@ -52,6 +52,8 @@ add_library(UESaveFile STATIC EXCLUDE_FROM_ALL
|
|||
UESaveFile/Serialisers/IntPropertySerialiser.cpp
|
||||
UESaveFile/Serialisers/MapPropertySerialiser.h
|
||||
UESaveFile/Serialisers/MapPropertySerialiser.cpp
|
||||
UESaveFile/Serialisers/ResourcePropertySerialiser.h
|
||||
UESaveFile/Serialisers/ResourcePropertySerialiser.cpp
|
||||
UESaveFile/Serialisers/RotatorPropertySerialiser.h
|
||||
UESaveFile/Serialisers/RotatorPropertySerialiser.cpp
|
||||
UESaveFile/Serialisers/StringPropertySerialiser.h
|
||||
|
@ -84,6 +86,7 @@ add_library(UESaveFile STATIC EXCLUDE_FROM_ALL
|
|||
UESaveFile/Types/SetProperty.h
|
||||
UESaveFile/Types/StringProperty.h
|
||||
UESaveFile/Types/StructProperty.h
|
||||
UESaveFile/Types/ResourceItemValue.h
|
||||
UESaveFile/Types/TextProperty.h
|
||||
UESaveFile/Types/UnrealProperty.h
|
||||
UESaveFile/Types/UnrealPropertyBase.h
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "Serialisers/GuidPropertySerialiser.h"
|
||||
#include "Serialisers/IntPropertySerialiser.h"
|
||||
#include "Serialisers/MapPropertySerialiser.h"
|
||||
#include "Serialisers/ResourcePropertySerialiser.h"
|
||||
#include "Serialisers/RotatorPropertySerialiser.h"
|
||||
#include "Serialisers/StringPropertySerialiser.h"
|
||||
#include "Serialisers/SetPropertySerialiser.h"
|
||||
|
@ -53,6 +54,7 @@ PropertySerialiser::PropertySerialiser() {
|
|||
arrayAppend(_serialisers, Containers::pointer<GuidPropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<IntPropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<MapPropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<ResourcePropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<RotatorPropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<StringPropertySerialiser>());
|
||||
arrayAppend(_serialisers, Containers::pointer<SetPropertySerialiser>());
|
||||
|
|
103
src/UESaveFile/Serialisers/ResourcePropertySerialiser.cpp
Normal file
103
src/UESaveFile/Serialisers/ResourcePropertySerialiser.cpp
Normal file
|
@ -0,0 +1,103 @@
|
|||
// MassBuilderSaveTool
|
||||
// Copyright (C) 2021 Guillaume Jacquemin
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "../BinaryReader.h"
|
||||
#include "../BinaryWriter.h"
|
||||
#include "../PropertySerialiser.h"
|
||||
|
||||
#include "../Types/IntProperty.h"
|
||||
#include "../Types/NoneProperty.h"
|
||||
|
||||
#include "ResourcePropertySerialiser.h"
|
||||
|
||||
auto ResourcePropertySerialiser::deserialiseProperty(const std::string& name, const std::string& type, UnsignedLong value_length,
|
||||
BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr
|
||||
{
|
||||
auto prop = Containers::pointer<ResourceItemValue>();
|
||||
|
||||
std::string str;
|
||||
if(!reader.readUEString(str) || str != "ID_4_AAE08F17428E229EC7A2209F51081A21") {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUEString(str) || str != "IntProperty") {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUnsignedLong(value_length) || value_length != 4ull) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char terminator;
|
||||
if(!reader.readChar(terminator) || terminator != '\0') {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readInt(prop->id)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUEString(str) || str != "Quantity_3_560F09B5485C365D3041888910019CE3") {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUEString(str) || str != "IntProperty") {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUnsignedLong(value_length) || value_length != 4ull) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readChar(terminator) || terminator != '\0') {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readInt(prop->quantity)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if(!reader.readUEString(str) || str != "None") {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return prop;
|
||||
}
|
||||
|
||||
auto ResourcePropertySerialiser::serialiseProperty(UnrealPropertyBase::ptr& prop, UnsignedLong& bytes_written,
|
||||
BinaryWriter& writer, PropertySerialiser& serialiser) -> bool
|
||||
{
|
||||
auto res_prop = dynamic_cast<ResourceItemValue*>(prop.get());
|
||||
if(!res_prop) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bytes_written += writer.writeUEStringToArray("ID_4_AAE08F17428E229EC7A2209F51081A21") +
|
||||
writer.writeUEStringToArray("IntProperty") +
|
||||
writer.writeValueToArray<UnsignedLong>(4ull) +
|
||||
writer.writeValueToArray<char>('\0') +
|
||||
writer.writeValueToArray<Int>(res_prop->id);
|
||||
|
||||
bytes_written += writer.writeUEStringToArray("Quantity_3_560F09B5485C365D3041888910019CE3") +
|
||||
writer.writeUEStringToArray("IntProperty") +
|
||||
writer.writeValueToArray<UnsignedLong>(4ull) +
|
||||
writer.writeValueToArray<char>('\0') +
|
||||
writer.writeValueToArray<Int>(res_prop->quantity);
|
||||
|
||||
bytes_written += writer.writeUEStringToArray("None");
|
||||
|
||||
return true;
|
||||
}
|
30
src/UESaveFile/Serialisers/ResourcePropertySerialiser.h
Normal file
30
src/UESaveFile/Serialisers/ResourcePropertySerialiser.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
// MassBuilderSaveTool
|
||||
// Copyright (C) 2021 Guillaume Jacquemin
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "UnrealPropertySerialiser.h"
|
||||
|
||||
#include "../Types/ResourceItemValue.h"
|
||||
|
||||
class ResourcePropertySerialiser : public UnrealPropertySerialiser<ResourceItemValue> {
|
||||
public:
|
||||
using ptr = Containers::Pointer<ResourcePropertySerialiser>;
|
||||
|
||||
private:
|
||||
auto deserialiseProperty(const std::string& name, const std::string& type, UnsignedLong value_length, BinaryReader& reader, PropertySerialiser& serialiser) -> UnrealPropertyBase::ptr override;
|
||||
auto serialiseProperty(UnrealPropertyBase::ptr& prop, UnsignedLong& bytes_written, BinaryWriter& writer, PropertySerialiser& serialiser) -> bool override;
|
||||
};
|
30
src/UESaveFile/Types/ResourceItemValue.h
Normal file
30
src/UESaveFile/Types/ResourceItemValue.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
// MassBuilderSaveTool
|
||||
// Copyright (C) 2021 Guillaume Jacquemin
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "StructProperty.h"
|
||||
|
||||
struct ResourceItemValue : public StructProperty {
|
||||
using ptr = Containers::Pointer<ResourceItemValue>;
|
||||
|
||||
ResourceItemValue() {
|
||||
structType = "sttResourceItemValue";
|
||||
structGuid = Containers::StaticArray<16, char>{'\xB7', '\xA7', '\x77', '\xAB', '\xD3', '\x1B', '\xA6', '\x43', '\xAF', '\x42', '\xE5', '\x9E', '\xBF', '\xFD', '\x37', '\x55'};
|
||||
}
|
||||
|
||||
Int id = 0, quantity = 0;
|
||||
};
|
Loading…
Reference in a new issue