mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 23:14:53 +09:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b781731ecc |
No files matched your search
@@ -166,7 +166,7 @@ Defaults to `true`.
|
||||
|
||||
### player_sync.sync_quick_bar
|
||||
|
||||
Sync the quick bar.
|
||||
Sync the quick bar and the page shown on each of its rows.
|
||||
|
||||
Defaults to `true`.
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ export const components = {
|
||||
// inventories holds the god inventory and the hidden ghost inventory
|
||||
inventories: ["character", "crafting_queue", "inventories"],
|
||||
logistics: ["personal_logistic_slots"],
|
||||
quick_bar: ["quick_bar", "hotbar"],
|
||||
quick_bar: ["quick_bar", "quick_bar_pages", "hotbar"],
|
||||
settings: ["flashlight", "shortcuts", "game_view_settings"],
|
||||
recipe_notifications: ["recipe_notifications"],
|
||||
} as const;
|
||||
|
||||
@@ -23,6 +23,7 @@ export type IpcPlayerData = {
|
||||
character?: any,
|
||||
inventories?: any,
|
||||
quick_bar?: any,
|
||||
quick_bar_pages?: number[],
|
||||
hotbar?: Record<string, string>,
|
||||
personal_logistic_slots?: any,
|
||||
crafting_queue?: any,
|
||||
@@ -181,6 +182,7 @@ const jsonImportedPlayerData = Type.Object({
|
||||
character: Type.Optional(jsonCharacter),
|
||||
inventories: Type.Optional(jsonInventories),
|
||||
quick_bar: Type.Optional(Type.Record(Type.String(), jsonQuickBarSlot)),
|
||||
quick_bar_pages: Type.Optional(Type.Array(Type.Integer({ minimum: 1, maximum: 10 }), { maxItems: 10 })),
|
||||
hotbar: Type.Optional(Type.Record(Type.String(), Type.String())),
|
||||
personal_logistic_slots: Type.Optional(jsonPersonalLogisticSlots),
|
||||
crafting_queue: Type.Optional(jsonCraftingQueue),
|
||||
|
||||
@@ -713,6 +713,30 @@ function serialize.deserialize_quick_bar(player, serialized)
|
||||
end
|
||||
end
|
||||
|
||||
--- Quick bar page shown on each quick bar row of the screen, kept by every save on its own
|
||||
--- @param player LuaPlayer
|
||||
--- @return integer[]?
|
||||
function serialize.serialize_quick_bar_pages(player)
|
||||
local pages = {}
|
||||
for screen = 1, 10 do
|
||||
-- pcall: the number of rows the API knows is not documented for older versions
|
||||
local ok, page = pcall(player.get_active_quick_bar_page, screen)
|
||||
if not ok or not page then
|
||||
break
|
||||
end
|
||||
pages[screen] = page
|
||||
end
|
||||
return pages[1] and pages or nil
|
||||
end
|
||||
|
||||
--- @param player LuaPlayer
|
||||
--- @param pages integer[]? Absent in data from before pages were synced, the rows then stay as they are here
|
||||
function serialize.deserialize_quick_bar_pages(player, pages)
|
||||
for screen, page in ipairs(pages or {}) do
|
||||
player.set_active_quick_bar_page(screen, page)
|
||||
end
|
||||
end
|
||||
|
||||
-- Crafting queue is a table with the following fields:
|
||||
-- crafting_queue
|
||||
-- ingredients
|
||||
@@ -974,6 +998,7 @@ end
|
||||
--- @field inventories table<string, table>?
|
||||
--- @field hotbar table<string, string>?
|
||||
--- @field quick_bar table<string, QuickBarSlotEncoded>?
|
||||
--- @field quick_bar_pages integer[]? Page shown on each quick bar row
|
||||
--- @field personal_logistic_slots table?
|
||||
--- @field crafting_queue table?
|
||||
--- @field recipe_notifications string?
|
||||
@@ -1178,6 +1203,7 @@ function serialize.serialize_player(player, failed_deserialization, components)
|
||||
-- Serialize quick bar
|
||||
if syncs(components, "quick_bar") then
|
||||
serialized.quick_bar = serialize.serialize_quick_bar(player)
|
||||
serialized.quick_bar_pages = serialize.serialize_quick_bar_pages(player)
|
||||
end
|
||||
|
||||
-- Serialize crafting queue
|
||||
@@ -1444,6 +1470,7 @@ function serialize.deserialize_player(player, serialized, components, local_cont
|
||||
-- Deserialize quick bar (named hotbar in old data)
|
||||
if syncs(components, "quick_bar") then
|
||||
serialize.deserialize_quick_bar(player, serialized.quick_bar or serialized.hotbar)
|
||||
serialize.deserialize_quick_bar_pages(player, serialized.quick_bar_pages)
|
||||
end
|
||||
|
||||
-- Deserialize recipe notifications
|
||||
|
||||
@@ -117,6 +117,7 @@ describe("player_sync plugin", function() {
|
||||
3: { t: "i", n: "main", s: 4, b: [2] },
|
||||
4: { t: "r", p: [1], y: "blueprint" },
|
||||
},
|
||||
quick_bar_pages: [2, 1, 3],
|
||||
crafting_queue: {
|
||||
crafting_queue: [{ recipe: "iron-gear-wheel", count: 5 }],
|
||||
crafting_queue_progress: 0.25,
|
||||
@@ -172,6 +173,8 @@ describe("player_sync plugin", function() {
|
||||
["quick_bar", { 1: { t: "i", n: "main" } }],
|
||||
["quick_bar", { 1: { t: "r", y: "blueprint" } }],
|
||||
["quick_bar", { 1: 5 }],
|
||||
["quick_bar_pages", [0]],
|
||||
["quick_bar_pages", [11]],
|
||||
["personal_logistic_slots", { enabled: true, sections: [] }],
|
||||
["personal_logistic_slots", { enabled: true, trash_not_requested: false, sections: [{}] }],
|
||||
["personal_logistic_slots", { 1: { min: 50 } }],
|
||||
|
||||
Reference in new issue
Block a user