mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'sharp/fix-corrupted-inventory' into 'master'
Fix corrupted character inventories by adding protection. See merge request veloren/veloren!1220
This commit is contained in:
commit
62005e9031
@ -0,0 +1 @@
|
|||||||
|
-- This file should undo anything in `up.sql`
|
@ -0,0 +1,39 @@
|
|||||||
|
-- This migration updates all "stats" fields for each armour item in player inventory.
|
||||||
|
UPDATE
|
||||||
|
inventory
|
||||||
|
SET
|
||||||
|
items = json_replace(
|
||||||
|
-- Replace inventory slots.
|
||||||
|
items,
|
||||||
|
'$.slots',
|
||||||
|
(
|
||||||
|
-- Replace each item in the inventory, by splitting the json into an array, applying our changes,
|
||||||
|
-- and then re-aggregating.
|
||||||
|
--
|
||||||
|
-- NOTE: SQLite does not seem to provide a way to guarantee the order is the same after aggregation!
|
||||||
|
-- For now, it *does* seem to order by slots.key, but this doesn't seem to be guaranteed by anything.
|
||||||
|
-- For explicitness, we still include the ORDER BY, even though it seems to have no effect.
|
||||||
|
SELECT json_group_array(
|
||||||
|
json_replace(
|
||||||
|
slots.value,
|
||||||
|
'$.kind.Armor.stats',
|
||||||
|
CASE
|
||||||
|
-- ONLY replace item stats when the stats field currently lacks "protection"
|
||||||
|
-- (NOTE: This will also return true if the value is null, so if you are creating a nullable
|
||||||
|
-- JSON field please be careful before rerunning this migration!).
|
||||||
|
WHEN json_extract(slots.value, '$.kind.Armor.stats.protection') IS NULL
|
||||||
|
THEN
|
||||||
|
-- Replace armor stats with new armor
|
||||||
|
json('{ "protection": { "Normal": 1.0 } }')
|
||||||
|
ELSE
|
||||||
|
-- The protection stat was already added.
|
||||||
|
json_extract(slots.value, '$.kind.Armor.stats')
|
||||||
|
END
|
||||||
|
)
|
||||||
|
)
|
||||||
|
-- Extract all item slots
|
||||||
|
FROM json_each(json_extract(items, '$.slots')) AS slots
|
||||||
|
ORDER BY slots.key
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;
|
@ -22,6 +22,9 @@ use tracing::warn;
|
|||||||
// See: https://docs.rs/diesel_migrations/1.4.0/diesel_migrations/macro.embed_migrations.html
|
// See: https://docs.rs/diesel_migrations/1.4.0/diesel_migrations/macro.embed_migrations.html
|
||||||
// This macro is called at build-time, and produces the necessary migration info
|
// This macro is called at build-time, and produces the necessary migration info
|
||||||
// for the `embedded_migrations` call below.
|
// for the `embedded_migrations` call below.
|
||||||
|
//
|
||||||
|
// NOTE: Adding a useless comment to trigger the migrations being run. Delete
|
||||||
|
// when needed.
|
||||||
embed_migrations!();
|
embed_migrations!();
|
||||||
|
|
||||||
/// Runs any pending database migrations. This is executed during server startup
|
/// Runs any pending database migrations. This is executed during server startup
|
||||||
|
Loading…
Reference in New Issue
Block a user