mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 13:53:41 +03:00
111 lines
3.5 KiB
Go
111 lines
3.5 KiB
Go
package userdata
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"lunar-tear/server/internal/store"
|
|
"lunar-tear/server/internal/utils"
|
|
)
|
|
|
|
func init() {
|
|
register("IUserCharacterBoard", func(user store.UserState) string {
|
|
s, _ := utils.EncodeJSONMaps(sortedCharacterBoardRecords(user)...)
|
|
return s
|
|
})
|
|
register("IUserCharacterBoardAbility", func(user store.UserState) string {
|
|
s, _ := utils.EncodeJSONMaps(sortedCharacterBoardAbilityRecords(user)...)
|
|
return s
|
|
})
|
|
register("IUserCharacterBoardStatusUp", func(user store.UserState) string {
|
|
s, _ := utils.EncodeJSONMaps(sortedCharacterBoardStatusUpRecords(user)...)
|
|
return s
|
|
})
|
|
registerStatic("IUserCharacterBoardCompleteReward")
|
|
}
|
|
|
|
func sortedCharacterBoardRecords(user store.UserState) []map[string]any {
|
|
ids := make([]int, 0, len(user.CharacterBoards))
|
|
for id := range user.CharacterBoards {
|
|
ids = append(ids, int(id))
|
|
}
|
|
sort.Ints(ids)
|
|
|
|
records := make([]map[string]any, 0, len(ids))
|
|
for _, id := range ids {
|
|
row := user.CharacterBoards[int32(id)]
|
|
records = append(records, map[string]any{
|
|
"userId": user.UserId,
|
|
"characterBoardId": row.CharacterBoardId,
|
|
"panelReleaseBit1": row.PanelReleaseBit1,
|
|
"panelReleaseBit2": row.PanelReleaseBit2,
|
|
"panelReleaseBit3": row.PanelReleaseBit3,
|
|
"panelReleaseBit4": row.PanelReleaseBit4,
|
|
"latestVersion": row.LatestVersion,
|
|
})
|
|
}
|
|
return records
|
|
}
|
|
|
|
func sortedCharacterBoardAbilityRecords(user store.UserState) []map[string]any {
|
|
type entry struct {
|
|
key store.CharacterBoardAbilityKey
|
|
state store.CharacterBoardAbilityState
|
|
}
|
|
entries := make([]entry, 0, len(user.CharacterBoardAbilities))
|
|
for k, v := range user.CharacterBoardAbilities {
|
|
entries = append(entries, entry{k, v})
|
|
}
|
|
sort.Slice(entries, func(i, j int) bool {
|
|
if entries[i].key.CharacterId != entries[j].key.CharacterId {
|
|
return entries[i].key.CharacterId < entries[j].key.CharacterId
|
|
}
|
|
return entries[i].key.AbilityId < entries[j].key.AbilityId
|
|
})
|
|
|
|
records := make([]map[string]any, 0, len(entries))
|
|
for _, e := range entries {
|
|
records = append(records, map[string]any{
|
|
"userId": user.UserId,
|
|
"characterId": e.state.CharacterId,
|
|
"abilityId": e.state.AbilityId,
|
|
"level": e.state.Level,
|
|
"latestVersion": e.state.LatestVersion,
|
|
})
|
|
}
|
|
return records
|
|
}
|
|
|
|
func sortedCharacterBoardStatusUpRecords(user store.UserState) []map[string]any {
|
|
type entry struct {
|
|
key store.CharacterBoardStatusUpKey
|
|
state store.CharacterBoardStatusUpState
|
|
}
|
|
entries := make([]entry, 0, len(user.CharacterBoardStatusUps))
|
|
for k, v := range user.CharacterBoardStatusUps {
|
|
entries = append(entries, entry{k, v})
|
|
}
|
|
sort.Slice(entries, func(i, j int) bool {
|
|
if entries[i].key.CharacterId != entries[j].key.CharacterId {
|
|
return entries[i].key.CharacterId < entries[j].key.CharacterId
|
|
}
|
|
return entries[i].key.StatusCalculationType < entries[j].key.StatusCalculationType
|
|
})
|
|
|
|
records := make([]map[string]any, 0, len(entries))
|
|
for _, e := range entries {
|
|
records = append(records, map[string]any{
|
|
"userId": user.UserId,
|
|
"characterId": e.state.CharacterId,
|
|
"statusCalculationType": e.state.StatusCalculationType,
|
|
"hp": e.state.Hp,
|
|
"attack": e.state.Attack,
|
|
"vitality": e.state.Vitality,
|
|
"agility": e.state.Agility,
|
|
"criticalRatio": e.state.CriticalRatio,
|
|
"criticalAttack": e.state.CriticalAttack,
|
|
"latestVersion": e.state.LatestVersion,
|
|
})
|
|
}
|
|
return records
|
|
}
|