add more routes
This commit is contained in:
222
utils/helper.go
Normal file
222
utils/helper.go
Normal file
@@ -0,0 +1,222 @@
|
||||
package utils
|
||||
|
||||
import "fmt"
|
||||
|
||||
func ComputeMusicClearInfo(musicScore map[string]any) map[string]any {
|
||||
difficulties := []string{"easy", "normal", "hard", "expert", "special"}
|
||||
type stat struct{ cleared, fullCombo, allPerfect int }
|
||||
stats := map[string]*stat{}
|
||||
for _, d := range difficulties {
|
||||
stats[d] = &stat{}
|
||||
}
|
||||
|
||||
for _, v := range musicScore {
|
||||
data := v.(map[string]any)
|
||||
entries, ok := data["entries"].([]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
for _, e := range entries {
|
||||
entry := e.(map[string]any)
|
||||
diff, _ := entry["musicDifficulty"].(string)
|
||||
clearStatus, _ := entry["clearStatus"].(string)
|
||||
if s, ok := stats[diff]; ok {
|
||||
s.cleared++
|
||||
if clearStatus == "full_combo" {
|
||||
s.fullCombo++
|
||||
}
|
||||
if clearStatus == "all_perfect" {
|
||||
s.allPerfect++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result := map[string]any{}
|
||||
for _, d := range difficulties {
|
||||
result[d] = map[string]any{
|
||||
"clearedMusicCount": stats[d].cleared,
|
||||
"fullComboMusicCount": stats[d].fullCombo,
|
||||
"allPerfectMusicCount": stats[d].allPerfect,
|
||||
}
|
||||
}
|
||||
return map[string]any{"entries": result}
|
||||
}
|
||||
|
||||
func ComputeMusicClearCountInfo(musicScore map[string]any) map[string]any {
|
||||
result := map[string]any{}
|
||||
for id, v := range musicScore {
|
||||
data := v.(map[string]any)
|
||||
entries, ok := data["entries"].([]any)
|
||||
if ok && len(entries) > 0 {
|
||||
result[id] = len(entries)
|
||||
}
|
||||
}
|
||||
return map[string]any{"entries": result}
|
||||
}
|
||||
|
||||
func BuildUserSituations(userid string, master map[string]any, user map[string]any) []any {
|
||||
situationMap := master["masterCharacterSituationMap"].(map[string]any)["entries"].(map[string]any)
|
||||
|
||||
var result []any
|
||||
for _, v := range situationMap {
|
||||
card := v.(map[string]any)
|
||||
releasedAt := fmt.Sprintf("%v", card["releasedAt"])
|
||||
if releasedAt == "4128645600000" || releasedAt == "4131237600000" {
|
||||
continue
|
||||
}
|
||||
|
||||
// maxLevel
|
||||
maxLevel := 0
|
||||
if paramMap, ok := card["parameterMap"].(map[string]any); ok {
|
||||
for k := range paramMap {
|
||||
var level int
|
||||
fmt.Sscanf(k, "%d", &level)
|
||||
if level > maxLevel {
|
||||
maxLevel = level
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rarity := 0
|
||||
if r, ok := card["rarity"].(float64); ok {
|
||||
rarity = int(r)
|
||||
}
|
||||
hasTraining := rarity >= 3
|
||||
|
||||
var ep0, ep1 map[string]any
|
||||
if eps, ok := card["episodes"].(map[string]any); ok {
|
||||
if entries, ok := eps["entries"].([]any); ok {
|
||||
if len(entries) > 0 {
|
||||
ep0, _ = entries[0].(map[string]any)
|
||||
}
|
||||
if len(entries) > 1 {
|
||||
ep1, _ = entries[1].(map[string]any)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
illust := "normal"
|
||||
if hasTraining {
|
||||
illust = "after_training"
|
||||
}
|
||||
if user != nil {
|
||||
if si, ok := user["situationIllust"].(map[string]any); ok {
|
||||
if v, ok := si[fmt.Sprintf("%v", card["situationId"])]; ok {
|
||||
illust = fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trainingStatus := "not_doing"
|
||||
if hasTraining {
|
||||
trainingStatus = "done"
|
||||
}
|
||||
|
||||
sit := map[string]any{
|
||||
"userId": userid,
|
||||
"situationId": card["situationId"],
|
||||
"level": maxLevel,
|
||||
"exp": 0,
|
||||
"createdAt": card["releasedAt"],
|
||||
"addExp": 0,
|
||||
"trainingStatus": trainingStatus,
|
||||
"duplicateCount": 0,
|
||||
"illust": illust,
|
||||
"skillExp": 0,
|
||||
"skillLevel": 5,
|
||||
"limitBreakRank": 4,
|
||||
}
|
||||
|
||||
if hasTraining {
|
||||
t, _ := card["training"].(map[string]any)
|
||||
perf, tech, vis := 0.0, 0.0, 0.0
|
||||
if t != nil {
|
||||
perf, _ = t["trainingPerformance"].(float64)
|
||||
tech, _ = t["trainingTechnique"].(float64)
|
||||
vis, _ = t["trainingVisual"].(float64)
|
||||
}
|
||||
ep0Perf, ep0Tech, ep0Vis := 0.0, 0.0, 0.0
|
||||
ep1Perf, ep1Tech, ep1Vis := 0.0, 0.0, 0.0
|
||||
if ep0 != nil {
|
||||
ep0Perf, _ = ep0["appendPerformance"].(float64)
|
||||
ep0Tech, _ = ep0["appendTechnique"].(float64)
|
||||
ep0Vis, _ = ep0["appendVisual"].(float64)
|
||||
}
|
||||
if ep1 != nil {
|
||||
ep1Perf, _ = ep1["appendPerformance"].(float64)
|
||||
ep1Tech, _ = ep1["appendTechnique"].(float64)
|
||||
ep1Vis, _ = ep1["appendVisual"].(float64)
|
||||
}
|
||||
|
||||
sit["userAppendParameter"] = map[string]any{
|
||||
"userId": userid,
|
||||
"situationId": card["situationId"],
|
||||
"performance": perf,
|
||||
"technique": tech,
|
||||
"visual": vis,
|
||||
"characterPotentialPerformance": 30,
|
||||
"characterPotentialTechnique": 30,
|
||||
"characterPotentialVisual": 30,
|
||||
"characterBonusPerformance": 30 + ep0Perf + ep1Perf,
|
||||
"characterBonusTechnique": 30 + ep0Tech + ep1Tech,
|
||||
"characterBonusVisual": 30 + ep0Vis + ep1Vis,
|
||||
}
|
||||
}
|
||||
|
||||
result = append(result, sit)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func BuildUserProfileDegree(userid string, user map[string]any) map[string]any {
|
||||
degree := user["degree"].([]any)
|
||||
result := map[string]any{
|
||||
"first": map[string]any{
|
||||
"userId": userid,
|
||||
"profileDegreeType": "first",
|
||||
"degreeId": degree[0],
|
||||
},
|
||||
}
|
||||
if len(degree) > 1 && degree[1] != nil {
|
||||
result["second"] = map[string]any{
|
||||
"userId": userid,
|
||||
"profileDegreeType": "second",
|
||||
"degreeId": degree[1],
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func BuildCharacterRankMap() map[string]any {
|
||||
entries := map[string]any{}
|
||||
for i := 1; i <= 40; i++ {
|
||||
entries[fmt.Sprintf("%d", i)] = map[string]any{
|
||||
"rank": 100, "exp": 0, "addExp": 0,
|
||||
"nextExp": 0, "totalExp": 0, "releasedPotentialLevel": 50,
|
||||
}
|
||||
}
|
||||
return map[string]any{"entries": entries}
|
||||
}
|
||||
|
||||
func GetScoreRank(score float64, difficultyMaster map[string]any) string {
|
||||
if difficultyMaster == nil {
|
||||
return "c"
|
||||
}
|
||||
get := func(key string) float64 {
|
||||
v, _ := difficultyMaster[key].(float64)
|
||||
return v
|
||||
}
|
||||
switch {
|
||||
case score >= get("scoreSS"):
|
||||
return "ss"
|
||||
case score >= get("scoreS"):
|
||||
return "s"
|
||||
case score >= get("scoreA"):
|
||||
return "a"
|
||||
case score >= get("scoreB"):
|
||||
return "b"
|
||||
default:
|
||||
return "c"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user