Add SQLite persistence, import-snapshot tool, and karma functionality

This commit is contained in:
Ilya Groshev
2026-04-20 09:57:47 +03:00
parent c9ad3fa4f4
commit c33e738fd5
70 changed files with 4151 additions and 833 deletions
+60 -12
View File
@@ -105,12 +105,18 @@ func init() {
s, _ := encodeJSONMaps(SortedWeaponAwakenRecords(user)...)
return s
})
register("IUserCostumeLotteryEffect", func(user store.UserState) string {
s, _ := encodeJSONMaps(sortedCostumeLotteryEffectRecords(user)...)
return s
})
register("IUserCostumeLotteryEffectPending", func(user store.UserState) string {
s, _ := encodeJSONMaps(SortedCostumeLotteryEffectPendingRecords(user)...)
return s
})
registerStatic(
"IUserCostumeLevelBonusReleaseStatus",
"IUserCostumeLotteryEffect",
"IUserCostumeLotteryEffectAbility",
"IUserCostumeLotteryEffectStatusUp",
"IUserCostumeLotteryEffectPending",
"IUserPartsPresetTag",
"IUserPartsStatusSub",
)
@@ -143,16 +149,17 @@ func sortedCostumeRecords(user store.UserState) []map[string]any {
for _, key := range keys {
row := user.Costumes[key]
records = append(records, map[string]any{
"userId": user.UserId,
"userCostumeUuid": row.UserCostumeUuid,
"costumeId": row.CostumeId,
"limitBreakCount": row.LimitBreakCount,
"level": row.Level,
"exp": row.Exp,
"headupDisplayViewId": row.HeadupDisplayViewId,
"acquisitionDatetime": row.AcquisitionDatetime,
"awakenCount": row.AwakenCount,
"latestVersion": row.LatestVersion,
"userId": user.UserId,
"userCostumeUuid": row.UserCostumeUuid,
"costumeId": row.CostumeId,
"limitBreakCount": row.LimitBreakCount,
"level": row.Level,
"exp": row.Exp,
"headupDisplayViewId": row.HeadupDisplayViewId,
"acquisitionDatetime": row.AcquisitionDatetime,
"awakenCount": row.AwakenCount,
"costumeLotteryEffectUnlockedSlotCount": row.CostumeLotteryEffectUnlockedSlotCount,
"latestVersion": row.LatestVersion,
})
}
return records
@@ -619,3 +626,44 @@ func sortedCageOrnamentRewardRecords(user store.UserState) []map[string]any {
}
return records
}
func SortedCostumeLotteryEffectPendingRecords(user store.UserState) []map[string]any {
keys := sortedStringKeys(user.CostumeLotteryEffectPending)
records := make([]map[string]any, 0, len(keys))
for _, key := range keys {
row := user.CostumeLotteryEffectPending[key]
records = append(records, map[string]any{
"userId": user.UserId,
"userCostumeUuid": row.UserCostumeUuid,
"slotNumber": row.SlotNumber,
"oddsNumber": row.OddsNumber,
"latestVersion": row.LatestVersion,
})
}
return records
}
func sortedCostumeLotteryEffectRecords(user store.UserState) []map[string]any {
keys := make([]store.CostumeLotteryEffectKey, 0, len(user.CostumeLotteryEffects))
for k := range user.CostumeLotteryEffects {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
if keys[i].UserCostumeUuid != keys[j].UserCostumeUuid {
return keys[i].UserCostumeUuid < keys[j].UserCostumeUuid
}
return keys[i].SlotNumber < keys[j].SlotNumber
})
records := make([]map[string]any, 0, len(keys))
for _, k := range keys {
row := user.CostumeLotteryEffects[k]
records = append(records, map[string]any{
"userId": user.UserId,
"userCostumeUuid": row.UserCostumeUuid,
"slotNumber": row.SlotNumber,
"oddsNumber": row.OddsNumber,
"latestVersion": row.LatestVersion,
})
}
return records
}