Persist Subjugation Quests triple-deck presets

This commit is contained in:
Ilya Groshev
2026-05-14 11:39:03 +03:00
parent fa5d023f58
commit ae884b4060
11 changed files with 142 additions and 0 deletions
+1
View File
@@ -14,6 +14,7 @@ func CloneUserState(u UserState) UserState {
out.DeckSubWeapons = cloneSliceMap(u.DeckSubWeapons)
out.DeckParts = cloneSliceMap(u.DeckParts)
out.Decks = maps.Clone(u.Decks)
out.TripleDecks = maps.Clone(u.TripleDecks)
out.Quests = maps.Clone(u.Quests)
out.QuestMissions = maps.Clone(u.QuestMissions)
out.WeaponStories = maps.Clone(u.WeaponStories)
+1
View File
@@ -97,6 +97,7 @@ func SeedUserState(userId int64, uuid string, nowMillis int64, platform model.Cl
Companions: make(map[string]CompanionState),
DeckCharacters: make(map[string]DeckCharacterState),
Decks: make(map[DeckKey]DeckState),
TripleDecks: make(map[DeckKey]TripleDeckState),
DeckSubWeapons: make(map[string][]string),
DeckParts: make(map[string][]string),
Quests: make(map[int32]UserQuestState),
+11
View File
@@ -43,6 +43,7 @@ func initMaps(u *store.UserState) {
u.Thoughts = make(map[string]store.ThoughtState)
u.DeckCharacters = make(map[string]store.DeckCharacterState)
u.Decks = make(map[store.DeckKey]store.DeckState)
u.TripleDecks = make(map[store.DeckKey]store.TripleDeckState)
u.DeckSubWeapons = make(map[string][]string)
u.DeckParts = make(map[string][]string)
u.Quests = make(map[int32]store.UserQuestState)
@@ -299,6 +300,16 @@ func loadMapTables(db *sql.DB, uid int64, u *store.UserState) {
u.Decks[store.DeckKey{DeckType: v.DeckType, UserDeckNumber: v.UserDeckNumber}] = v
})
queryRows(db, `SELECT deck_type, user_deck_number, name, deck_number01, deck_number02, deck_number03, latest_version
FROM user_triple_decks WHERE user_id=?`, uid,
func(rows *sql.Rows) {
var v store.TripleDeckState
var dt int32
rows.Scan(&dt, &v.UserDeckNumber, &v.Name, &v.DeckNumber01, &v.DeckNumber02, &v.DeckNumber03, &v.LatestVersion)
v.DeckType = model.DeckType(dt)
u.TripleDecks[store.DeckKey{DeckType: v.DeckType, UserDeckNumber: v.UserDeckNumber}] = v
})
queryRows(db, `SELECT user_deck_character_uuid, ordinal, user_weapon_uuid
FROM user_deck_sub_weapons WHERE user_id=? ORDER BY user_deck_character_uuid, ordinal`, uid,
func(rows *sql.Rows) {
+18
View File
@@ -171,6 +171,12 @@ func writeUserState(tx *sql.Tx, uid int64, u *store.UserState) error {
return err
}
}
for k, v := range u.TripleDecks {
if err := exec(`INSERT INTO user_triple_decks (user_id, deck_type, user_deck_number, name, deck_number01, deck_number02, deck_number03, latest_version) VALUES (?,?,?,?,?,?,?,?)`,
uid, int32(k.DeckType), k.UserDeckNumber, v.Name, v.DeckNumber01, v.DeckNumber02, v.DeckNumber03, v.LatestVersion); err != nil {
return err
}
}
for key, uuids := range u.DeckSubWeapons {
for i, uuid := range uuids {
if err := exec(`INSERT INTO user_deck_sub_weapons (user_id, user_deck_character_uuid, ordinal, user_weapon_uuid) VALUES (?,?,?,?)`,
@@ -713,6 +719,18 @@ func diffAndSave(tx *sql.Tx, uid int64, before, after *store.UserState) error {
}
}
for k, v := range after.TripleDecks {
if old, ok := before.TripleDecks[k]; !ok || old != v {
exec(`INSERT OR REPLACE INTO user_triple_decks (user_id, deck_type, user_deck_number, name, deck_number01, deck_number02, deck_number03, latest_version) VALUES (?,?,?,?,?,?,?,?)`,
uid, int32(k.DeckType), k.UserDeckNumber, v.Name, v.DeckNumber01, v.DeckNumber02, v.DeckNumber03, v.LatestVersion)
}
}
for k := range before.TripleDecks {
if _, ok := after.TripleDecks[k]; !ok {
exec(`DELETE FROM user_triple_decks WHERE user_id=? AND deck_type=? AND user_deck_number=?`, uid, int32(k.DeckType), k.UserDeckNumber)
}
}
replaceSliceTable(tx, uid, "user_deck_sub_weapons", after.DeckSubWeapons, func(key string, uuids []string) {
for i, uuid := range uuids {
exec(`INSERT INTO user_deck_sub_weapons (user_id, user_deck_character_uuid, ordinal, user_weapon_uuid) VALUES (?,?,?,?)`, uid, key, i, uuid)
+14
View File
@@ -70,6 +70,7 @@ type UserState struct {
Thoughts map[string]ThoughtState
DeckCharacters map[string]DeckCharacterState
Decks map[DeckKey]DeckState
TripleDecks map[DeckKey]TripleDeckState
Quests map[int32]UserQuestState
QuestMissions map[QuestMissionKey]UserQuestMissionState
Missions map[int32]UserMissionState
@@ -142,6 +143,9 @@ func (u *UserState) EnsureMaps() {
if u.Decks == nil {
u.Decks = make(map[DeckKey]DeckState)
}
if u.TripleDecks == nil {
u.TripleDecks = make(map[DeckKey]TripleDeckState)
}
if u.DeckSubWeapons == nil {
u.DeckSubWeapons = make(map[string][]string)
}
@@ -455,6 +459,16 @@ type DeckState struct {
LatestVersion int64
}
type TripleDeckState struct {
DeckType model.DeckType
UserDeckNumber int32
Name string
DeckNumber01 int32
DeckNumber02 int32
DeckNumber03 int32
LatestVersion int64
}
type DeckCharacterInput struct {
UserCostumeUuid string
MainUserWeaponUuid string