Я не уверен, что это лучший метод, но это моя попытка.Ниже приведен пример таблицы, вы можете использовать таблицы для хранения нескольких значений.Я думаю, что вы можете использовать функцию HttpService JSONEncode для преобразования таблиц в строки (которые, мы надеемся, можно сохранить более эффективно)
JSONEncode (помещая данные кирпича в строку, которую выможно сохранить в хранилище данных
local HttpService = game:GetService("HttpService")
-- this is an example of what we'll convert into a json string
local exampleBrick = {
["Size"] = Vector3.new(3,3,3),
["Position"] = Vector3.new(0,1.5,0),
["BrickColor"] = BrickColor.new("White")
["Material"] = "Concrete"
}
local brickJSON = HttpService:JSONEncode(exampleBrick)
print(brickJSON)
-- when printed, you'll get something like
-- { "Size": Vector3.new(3,3,3), "Position": Vector3.new(0,1.5,0), "BrickColor": BrickColor.new("White"), "Material": "Concrete"}
-- if you want to refer to this string in a script, surround it with two square brackets ([[) e.g. [[{"Size": Vector3.new(3,3,3)... }]]
JSONDecode (чтение строки и преобразование ее обратно в кирпич)
local HttpService = game:GetService("HttpService")
local brickJSON = [[ {"Size": Vector3.new(3,3,3), "Position": Vector3.new(0,1.5,0), "BrickColor": BrickColor.new("White"), "Material": "Concrete"} ]]
function createBrick(tab)
local brick = Instance.new("Part")
brick.Parent = <insert parent here>
brick.Size = tab[1]
brick.Position= tab[2]
brick.BrickColor= tab[3]
brick.Material= tab[4]
end
local brickData = HttpService:JSONDecode(brickJSON)
createBrick(brickData) --this line actually spawns the brick
Функция также может бытьзавернутый в pcall, если вы хотите учесть возможные ошибки хранилища данных.
Кодирование всей модели в строку
Скажем, «здание» вашего игрока - это модель,Вы можете использовать приведенный выше скрипт кодирования для преобразования всех частей внутри модели в строку json для сохранения.
local HttpService = game:GetService("HttpService")
local StuffWeWantToSave = {}
function getPartData(part)
return( {part.Size,part.Position,part.BrickColor,part.Material} )
end
local model = workspace.Building --change this to what the model is
local modelTable = model:Descendants()
for i,v in pairs(modelTable) do
if v:IsA("Part") or v:IsA("WedgePart") then
table.insert(StuffWeWantToSave, HttpService:JSONEncode(getPartData(modelTable[v])))
end
end
Декодирование строки во всю модель
Этовероятно произойдет, когда сервер загружает данные игрока.
local HttpService = game:GetService("HttpService")
local SavedStuff = game:GetService("DataStoreService"):GetDataStore("blabla") --I don't know how you save your data, so you'll need to adjust this and the rest of the scripts (as long as you've saved the string somewhere in the player's DataStore)
function createBrick(tab)
local brick = Instance.new("Part")
brick.Parent = <insert parent here>
brick.Size = tab[1]
brick.Position= tab[2]
brick.BrickColor= tab[3]
brick.Material= tab[4]
end
local model = Instance.new("Model") --if you already have 'bases' for the players to load their stuff in, remove this instance.new
model.Parent = workspace
for i,v in pairs(SavedStuff) do
if v[1] ~= nil then
CreateBrick(v)
end
end
FilteringEnabled
Если ваша игра использует filteringenabled, убедитесь, что только сервер обрабатывает сохранение и загрузкуданные!! (вы, вероятно, уже это знали) Если вы хотите, чтобы проигрыватель сохранял нажатием кнопки графического интерфейса, заставьте кнопку графического интерфейса вызывать функцию RemoteFunction, которая отправляет данные своей базы на сервер, чтобы преобразовать ее в строку.
КСТАТИ IЯ не настолько хорош в написании сценариев, так что я, вероятно, когда-то допустил ошибку ... удачи, хотя