Files
honoka-chan/handler/allstars.go
T
2025-03-10 15:29:29 +08:00

1334 lines
44 KiB
Go

package handler
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"honoka-chan/config"
"honoka-chan/database"
"honoka-chan/encrypt"
"honoka-chan/model"
"honoka-chan/utils"
"net/http"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
"github.com/tidwall/gjson"
"github.com/tidwall/sjson"
)
func AsLogin(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
var mask string
req := gjson.Parse(reqBody)
req.ForEach(func(key, value gjson.Result) bool {
if value.Get("mask").String() != "" {
mask = value.Get("mask").String()
return false
}
return true
})
// fmt.Println("Request data:", req.String())
// fmt.Println("Mask:", mask)
mask64, err := base64.StdEncoding.DecodeString(mask)
if err != nil {
panic(err)
}
randomBytes := encrypt.RSA_DecryptOAEP(mask64)
// fmt.Println("Random Bytes:", randomBytes)
newKey := utils.SliceXor(randomBytes, []byte(sessionKey))
newKey64 := base64.StdEncoding.EncodeToString(newKey)
loginBody := GetUserData("login.json")
loginBody, _ = sjson.Set(loginBody, "session_key", newKey64)
loginBody, _ = sjson.Set(loginBody, "user_model.user_status", GetUserStatus())
/* ======== UserData ======== */
liveDeckData := gjson.Parse(GetUserData("liveDeck.json"))
loginBody, _ = sjson.Set(loginBody, "user_model.user_live_deck_by_id", liveDeckData.Get("user_live_deck_by_id").Value())
var liveParty []any
decoder := json.NewDecoder(strings.NewReader(liveDeckData.Get("user_live_party_by_id").String()))
decoder.UseNumber()
err = decoder.Decode(&liveParty)
CheckErr(err)
// fmt.Println(liveParty)
loginBody, _ = sjson.Set(loginBody, "user_model.user_live_party_by_id", liveParty)
memberData := gjson.Parse(GetUserData("memberSettings.json"))
loginBody, _ = sjson.Set(loginBody, "user_model.user_member_by_member_id", memberData.Get("user_member_by_member_id").Value())
lessonData := gjson.Parse(GetUserData("lessonDeck.json"))
loginBody, _ = sjson.Set(loginBody, "user_model.user_lesson_deck_by_id", lessonData.Get("user_lesson_deck_by_id").Value())
cardData := gjson.Parse(GetUserData("userCard.json"))
loginBody, _ = sjson.Set(loginBody, "user_model.user_card_by_card_id", cardData.Get("user_card_by_card_id").Value())
/* ======== UserData ======== */
resp := SignResp(ctx.GetString("ep"), loginBody, config.StartUpKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchBootstrap(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("fetchBootstrap.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchBillingHistory(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("fetchBillingHistory.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchNotice(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("fetchNotice.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsGetPackUrl(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
var packNames []string
gjson.Parse(reqBody).ForEach(func(key, value gjson.Result) bool {
if value.IsObject() {
if err := json.Unmarshal([]byte(value.Get("pack_names").String()), &packNames); err != nil {
panic(err)
}
return false
}
return true
})
var packUrls []string
for _, pack := range packNames {
packUrls = append(packUrls, AsCdnServer+"/"+config.MasterVersion+"/"+pack)
}
packBody, _ := sjson.Set("{}", "url_list", packUrls)
resp := SignResp(ctx.GetString("ep"), packBody, sessionKey)
// fmt.Println("Response:", resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsUpdateCardNewFlag(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("updateCardNewFlag.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsGetClearedPlatformAchievement(ctx *gin.Context) {
signBody := GetUserData("getClearedPlatformAchievement.json")
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchLiveMusicSelect(ctx *gin.Context) {
now := time.Now()
year, month, day := now.Year(), now.Month(), now.Day()
tomorrow := time.Date(year, month, day+1, 0, 0, 0, 0, now.Location()).Unix()
weekday := int(now.Weekday())
if weekday == 0 {
weekday = 7
}
liveDailyList := []model.LiveDaily{}
err := MainEng.Table("m_live_daily").Where("weekday = ?", weekday).Cols("id,live_id").Find(&liveDailyList)
CheckErr(err)
for k := range liveDailyList {
liveDailyList[k].EndAt = int(tomorrow)
liveDailyList[k].RemainingPlayCount = 5
liveDailyList[k].RemainingRecoveryCount = 9
}
signBody := GetUserData("fetchLiveMusicSelect.json")
signBody, _ = sjson.Set(signBody, "weekday_state.weekday", weekday)
signBody, _ = sjson.Set(signBody, "weekday_state.next_weekday_at", tomorrow)
signBody, _ = sjson.Set(signBody, "live_daily_list", liveDailyList)
signBody, _ = sjson.Set(signBody, "user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsLiveMvStart(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("liveMvStart.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsLiveMvSaveDeck(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
reqData := gjson.Parse(reqBody).Array()[0]
// fmt.Println(reqData)
saveReq := model.LiveSaveDeckReq{}
err := json.Unmarshal([]byte(reqData.String()), &saveReq)
if err != nil {
panic(err)
}
// fmt.Println(saveReq)
userLiveMvDeckInfo := model.UserLiveMvDeckInfo{
LiveMasterID: saveReq.LiveMasterID,
}
memberIds := map[int]int{}
for k, v := range saveReq.MemberMasterIDByPos {
if k%2 == 0 {
memberId := saveReq.MemberMasterIDByPos[k+1]
memberIds[v] = memberId
switch v {
case 1:
userLiveMvDeckInfo.MemberMasterID1 = memberId
case 2:
userLiveMvDeckInfo.MemberMasterID2 = memberId
case 3:
userLiveMvDeckInfo.MemberMasterID3 = memberId
case 4:
userLiveMvDeckInfo.MemberMasterID4 = memberId
case 5:
userLiveMvDeckInfo.MemberMasterID5 = memberId
case 6:
userLiveMvDeckInfo.MemberMasterID6 = memberId
case 7:
userLiveMvDeckInfo.MemberMasterID7 = memberId
case 8:
userLiveMvDeckInfo.MemberMasterID8 = memberId
case 9:
userLiveMvDeckInfo.MemberMasterID9 = memberId
case 10:
userLiveMvDeckInfo.MemberMasterID10 = memberId
case 11:
userLiveMvDeckInfo.MemberMasterID11 = memberId
case 12:
userLiveMvDeckInfo.MemberMasterID12 = memberId
}
}
}
// fmt.Println(memberIds)
suitIds := map[int]int{}
for k, v := range saveReq.SuitMasterIDByPos {
if k%2 == 0 {
suitId := saveReq.SuitMasterIDByPos[k+1]
suitIds[v] = suitId
switch v {
case 1:
userLiveMvDeckInfo.SuitMasterID1 = suitId
case 2:
userLiveMvDeckInfo.SuitMasterID2 = suitId
case 3:
userLiveMvDeckInfo.SuitMasterID3 = suitId
case 4:
userLiveMvDeckInfo.SuitMasterID4 = suitId
case 5:
userLiveMvDeckInfo.SuitMasterID5 = suitId
case 6:
userLiveMvDeckInfo.SuitMasterID6 = suitId
case 7:
userLiveMvDeckInfo.SuitMasterID7 = suitId
case 8:
userLiveMvDeckInfo.SuitMasterID8 = suitId
case 9:
userLiveMvDeckInfo.SuitMasterID9 = suitId
case 10:
userLiveMvDeckInfo.SuitMasterID10 = suitId
case 11:
userLiveMvDeckInfo.SuitMasterID11 = suitId
case 12:
userLiveMvDeckInfo.SuitMasterID12 = suitId
}
}
}
// fmt.Println(suitIds)
var userLiveMvDeckCustomByID []any
userLiveMvDeckCustomByID = append(userLiveMvDeckCustomByID, saveReq.LiveMasterID)
userLiveMvDeckCustomByID = append(userLiveMvDeckCustomByID, userLiveMvDeckInfo)
// fmt.Println(userLiveMvDeckCustomByID)
signBody := GetUserData("liveMvSaveDeck.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_live_mv_deck_custom_by_id", userLiveMvDeckCustomByID)
resp := SignResp(ctx.GetString("ep"), string(signBody), sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchCommunicationMemberDetail(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
var memberId int64
gjson.Parse(reqBody).ForEach(func(key, value gjson.Result) bool {
if value.Get("member_id").String() != "" {
memberId = value.Get("member_id").Int()
return false
}
return true
})
lovePanelCellIds := []int{}
err := MainEng.Table("m_member_love_panel_cell").
Join("LEFT", "m_member_love_panel", "m_member_love_panel_cell.member_love_panel_master_id = m_member_love_panel.id").
Cols("m_member_love_panel_cell.id").Where("m_member_love_panel.member_master_id = ?", memberId).
OrderBy("m_member_love_panel_cell.id ASC").Find(&lovePanelCellIds)
CheckErr(err)
now := time.Now()
year, month, day := now.Year(), now.Month(), now.Day()
tomorrow := time.Date(year, month, day+1, 0, 0, 0, 0, now.Location()).Unix()
weekday := int(now.Weekday())
if weekday == 0 {
weekday = 7
}
signBody := GetUserData("fetchCommunicationMemberDetail.json")
signBody, _ = sjson.Set(signBody, "member_love_panels.0.member_id", memberId)
signBody, _ = sjson.Set(signBody, "member_love_panels.0.member_love_panel_cell_ids", lovePanelCellIds)
signBody, _ = sjson.Set(signBody, "weekday_state.weekday", weekday)
signBody, _ = sjson.Set(signBody, "weekday_state.next_weekday_at", tomorrow)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsTapLovePoint(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("tapLovePoint.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsUpdateUserCommunicationMemberDetailBadge(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
var memberMasterId int64
gjson.Parse(reqBody).ForEach(func(key, value gjson.Result) bool {
if value.Get("member_master_id").String() != "" {
memberMasterId = value.Get("member_master_id").Int()
return false
}
return true
})
userDetail := []any{}
userDetail = append(userDetail, memberMasterId)
userDetail = append(userDetail, model.UserCommunicationMemberDetailBadgeByID{
MemberMasterID: int(memberMasterId),
})
signBody := GetUserData("updateUserCommunicationMemberDetailBadge.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_communication_member_detail_badge_by_id", userDetail)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsUpdateUserLiveDifficultyNewFlag(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("updateUserLiveDifficultyNewFlag.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFinishUserStorySide(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("finishUserStorySide.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFinishUserStoryMember(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("finishUserStoryMember.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSetTheme(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
var memberMasterId, suitMasterId, backgroundMasterId int64
gjson.Parse(reqBody).ForEach(func(key, value gjson.Result) bool {
if value.Get("member_master_id").String() != "" {
memberMasterId = value.Get("member_master_id").Int()
suitMasterId = value.Get("suit_master_id").Int()
backgroundMasterId = value.Get("custom_background_master_id").Int()
gjson.Parse(GetUserData("memberSettings.json")).Get("user_member_by_member_id").
ForEach(func(kk, vv gjson.Result) bool {
if vv.IsObject() {
if vv.Get("member_master_id").Int() == memberMasterId {
SetUserData("memberSettings.json", "user_member_by_member_id."+
kk.String()+".custom_background_master_id", backgroundMasterId)
SetUserData("memberSettings.json", "user_member_by_member_id."+
kk.String()+".suit_master_id", suitMasterId)
return false
}
}
return true
})
return false
}
return true
})
userMemberRes := []any{}
userMemberRes = append(userMemberRes, memberMasterId)
userMemberRes = append(userMemberRes, model.UserMemberInfo{
MemberMasterID: int(memberMasterId),
CustomBackgroundMasterID: int(backgroundMasterId),
SuitMasterID: int(suitMasterId),
LovePoint: 10271130,
LovePointLimit: 10271130,
LoveLevel: 450,
ViewStatus: 1,
IsNew: false,
})
userSuitRes := []any{}
userSuitRes = append(userSuitRes, suitMasterId)
userSuitRes = append(userSuitRes, model.AsSuitInfo{
SuitMasterID: int(suitMasterId),
IsNew: false,
})
signBody := GetUserData("setTheme.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_member_by_member_id", userMemberRes)
signBody, _ = sjson.Set(signBody, "user_model.user_suit_by_suit_id", userSuitRes)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchProfile(ctx *gin.Context) {
userInfo := gjson.Parse(GetUserData("userStatus.json"))
signBody := GetUserData("fetchProfile.json")
signBody, _ = sjson.Set(signBody, "profile_info.basic_info.name.dot_under_text",
userInfo.Get("name.dot_under_text").String())
signBody, _ = sjson.Set(signBody, "profile_info.basic_info.introduction_message.dot_under_text",
userInfo.Get("message.dot_under_text").String())
signBody, _ = sjson.Set(signBody, "profile_info.basic_info.emblem_id",
userInfo.Get("emblem_id").Int())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSetProfile(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
if req.Get("name").String() != "" {
SetUserData("userStatus.json", "name.dot_under_text",
gjson.Parse(reqBody).Array()[0].Get("name").String())
} else if req.Get("nickname").String() != "" {
SetUserData("userStatus.json", "nickname.dot_under_text",
gjson.Parse(reqBody).Array()[0].Get("nickname").String())
} else if req.Get("message").String() != "" {
SetUserData("userStatus.json", "message.dot_under_text",
gjson.Parse(reqBody).Array()[0].Get("message").String())
}
signBody, _ := sjson.Set(GetUserData("setProfile.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchEmblem(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("fetchEmblem.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsActivateEmblem(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
var emblemId int64
gjson.Parse(reqBody).ForEach(func(key, value gjson.Result) bool {
if value.Get("emblem_master_id").String() != "" {
emblemId = value.Get("emblem_master_id").Int()
SetUserData("userStatus.json", "emblem_id", emblemId)
return false
}
return true
})
signBody := GetUserData("activateEmblem.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_status.emblem_id", emblemId)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSaveUserNaviVoice(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("saveUserNaviVoice.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSaveDeckAll(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
req := model.AsSaveDeckReq{}
decoder := json.NewDecoder(strings.NewReader(reqBody.String()))
decoder.UseNumber()
err := decoder.Decode(&req)
CheckErr(err)
// fmt.Println("Raw:", req.SquadDict)
liveDeckInfo := GetUserData("liveDeck.json")
keyDeckName := fmt.Sprintf("user_live_deck_by_id.%d.name.dot_under_text", req.DeckID*2-1)
// fmt.Println(keyDeckName)
deckName := gjson.Parse(liveDeckInfo).Get(keyDeckName).String()
// fmt.Println("deckName:", deckName)
if req.CardWithSuit[1] == 0 {
req.CardWithSuit[1] = req.CardWithSuit[0]
}
if req.CardWithSuit[3] == 0 {
req.CardWithSuit[3] = req.CardWithSuit[2]
}
if req.CardWithSuit[5] == 0 {
req.CardWithSuit[5] = req.CardWithSuit[4]
}
if req.CardWithSuit[7] == 0 {
req.CardWithSuit[7] = req.CardWithSuit[6]
}
if req.CardWithSuit[9] == 0 {
req.CardWithSuit[9] = req.CardWithSuit[8]
}
if req.CardWithSuit[11] == 0 {
req.CardWithSuit[11] = req.CardWithSuit[10]
}
if req.CardWithSuit[13] == 0 {
req.CardWithSuit[13] = req.CardWithSuit[12]
}
if req.CardWithSuit[15] == 0 {
req.CardWithSuit[15] = req.CardWithSuit[14]
}
if req.CardWithSuit[17] == 0 {
req.CardWithSuit[17] = req.CardWithSuit[16]
}
deckInfo := model.AsDeckInfo{
UserLiveDeckID: req.DeckID,
Name: model.AsDeckName{
DotUnderText: deckName,
},
CardMasterID1: req.CardWithSuit[0],
CardMasterID2: req.CardWithSuit[2],
CardMasterID3: req.CardWithSuit[4],
CardMasterID4: req.CardWithSuit[6],
CardMasterID5: req.CardWithSuit[8],
CardMasterID6: req.CardWithSuit[10],
CardMasterID7: req.CardWithSuit[12],
CardMasterID8: req.CardWithSuit[14],
CardMasterID9: req.CardWithSuit[16],
SuitMasterID1: req.CardWithSuit[1],
SuitMasterID2: req.CardWithSuit[3],
SuitMasterID3: req.CardWithSuit[5],
SuitMasterID4: req.CardWithSuit[7],
SuitMasterID5: req.CardWithSuit[9],
SuitMasterID6: req.CardWithSuit[11],
SuitMasterID7: req.CardWithSuit[13],
SuitMasterID8: req.CardWithSuit[15],
SuitMasterID9: req.CardWithSuit[17],
}
// fmt.Println(deckInfo)
keyLiveDeck := fmt.Sprintf("user_live_deck_by_id.%d", req.DeckID*2-1)
SetUserData("liveDeck.json", keyLiveDeck, deckInfo)
deckInfoRes := []model.AsResp{}
deckInfoRes = append(deckInfoRes, req.DeckID)
deckInfoRes = append(deckInfoRes, deckInfo)
partyInfoRes := []model.AsResp{}
for k, v := range req.SquadDict {
if k%2 == 0 {
partyId, err := v.(json.Number).Int64()
if err != nil {
panic(err)
}
// fmt.Println("Party ID:", partyId)
rDictInfo, err := json.Marshal(req.SquadDict[k+1])
CheckErr(err)
dictInfo := model.AsDeckSquadDict{}
decoder := json.NewDecoder(bytes.NewReader(rDictInfo))
decoder.UseNumber()
err = decoder.Decode(&dictInfo)
CheckErr(err)
// fmt.Println("Party Info:", dictInfo)
roleIds := []int{}
err = MainEng.Table("m_card").
Where("id IN (?,?,?)", dictInfo.CardMasterIds[0], dictInfo.CardMasterIds[1], dictInfo.CardMasterIds[2]).
Cols("role").Find(&roleIds)
CheckErr(err)
// fmt.Println("roleIds:", roleIds)
partyIcon, partyName := GetPartyInfoByRoleIds(roleIds)
realPartyName := GetRealPartyName(partyName)
partyInfo := model.AsPartyInfo{
PartyID: int(partyId),
UserLiveDeckID: req.DeckID,
Name: model.AsPartyName{
DotUnderText: realPartyName,
},
IconMasterID: partyIcon,
CardMasterID1: dictInfo.CardMasterIds[0],
CardMasterID2: dictInfo.CardMasterIds[1],
CardMasterID3: dictInfo.CardMasterIds[2],
UserAccessoryID1: dictInfo.UserAccessoryIds[0],
UserAccessoryID2: dictInfo.UserAccessoryIds[1],
UserAccessoryID3: dictInfo.UserAccessoryIds[2],
}
// fmt.Println(partyInfo)
gjson.Parse(liveDeckInfo).Get("user_live_party_by_id").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() && value.Get("party_id").Int() == partyId {
SetUserData("liveDeck.json", "user_live_party_by_id."+key.String(), partyInfo)
return false
}
return true
})
partyInfoRes = append(partyInfoRes, partyId)
partyInfoRes = append(partyInfoRes, partyInfo)
}
}
respBody := GetUserData("saveDeckAll.json")
respBody, _ = sjson.Set(respBody, "user_model.user_status", GetUserStatus())
respBody, _ = sjson.Set(respBody, "user_model.user_live_deck_by_id", deckInfoRes)
respBody, _ = sjson.Set(respBody, "user_model.user_live_party_by_id", partyInfoRes)
resp := SignResp(ctx.GetString("ep"), respBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchLivePartners(ctx *gin.Context) {
signBody := GetUserData("fetchLivePartners.json")
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchLiveDeckSelect(ctx *gin.Context) {
signBody := GetUserData("fetchLiveDeckSelect.json")
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsLiveStart(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
liveStartReq := model.AsLiveStartReq{}
if err := json.Unmarshal([]byte(reqBody.String()), &liveStartReq); err != nil {
panic(err)
}
// fmt.Println(liveStartReq)
var cardInfo string
partnerResp := gjson.Parse(GetUserData("fetchLivePartners.json")).Get("partner_select_state.live_partners")
partnerResp.ForEach(func(k, v gjson.Result) bool {
userId := v.Get("user_id").Int()
if userId == int64(liveStartReq.PartnerUserID) {
v.Get("card_by_category").ForEach(func(kk, vv gjson.Result) bool {
if vv.IsObject() {
cardId := vv.Get("card_master_id").Int()
if cardId == int64(liveStartReq.PartnerCardMasterID) {
cardInfo = vv.String()
// fmt.Println(cardInfo)
return false
}
}
return true
})
return false
}
return true
})
// 保存请求包因为 /live/finish 接口的响应包里有部分字段不在该接口的请求包里
liveId := time.Now().UnixNano()
liveIdStr := strconv.Itoa(int(liveId))
err := database.LevelDb.Put([]byte("live_"+liveIdStr), []byte(reqBody.String()))
CheckErr(err)
liveDifficultyId := strconv.Itoa(liveStartReq.LiveDifficultyID)
liveNotes := utils.ReadAllText("assets/as/notes/" + liveDifficultyId + ".json")
if liveNotes == "" {
panic("歌曲情报信息不存在!")
}
var liveNotesRes model.AsLiveStageInfo
if err := json.Unmarshal([]byte(liveNotes), &liveNotesRes); err != nil {
panic(err)
}
if liveStartReq.IsAutoPlay {
for k := range liveNotesRes.LiveNotes {
liveNotesRes.LiveNotes[k].AutoJudgeType = 30
}
}
var partnerInfo any
if cardInfo != "" {
var info map[string]any
if err = json.Unmarshal([]byte(cardInfo), &info); err != nil {
panic(err)
}
partnerInfo = info
} else {
partnerInfo = nil
}
liveStartResp := GetUserData("liveStart.json")
liveStartResp, _ = sjson.Set(liveStartResp, "live.live_id", liveId)
liveStartResp, _ = sjson.Set(liveStartResp, "live.deck_id", liveStartReq.DeckID)
liveStartResp, _ = sjson.Set(liveStartResp, "live.live_stage", liveNotesRes)
liveStartResp, _ = sjson.Set(liveStartResp, "live.live_partner_card", partnerInfo)
liveStartResp, _ = sjson.Set(liveStartResp, "user_model_diff.user_status", GetUserStatus())
liveStartResp, _ = sjson.Set(liveStartResp, "user_model_diff.user_status.latest_live_deck_id", liveStartReq.DeckID)
liveStartResp, _ = sjson.Set(liveStartResp, "user_model_diff.user_status.last_live_difficulty_id", liveStartReq.LiveDifficultyID)
resp := SignResp(ctx.GetString("ep"), liveStartResp, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsLiveFinish(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
var cardMasterId, maxVolt, skillCount, appealCount int64
liveFinishReq := gjson.Parse(reqBody.String())
liveFinishReq.Get("live_score.card_stat_dict").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() {
volt := value.Get("got_voltage").Int()
if volt > maxVolt {
maxVolt = volt
cardMasterId = value.Get("card_master_id").Int()
skillCount = value.Get("skill_triggered_count").Int()
appealCount = value.Get("appeal_count").Int()
}
}
return true
})
mvpInfo := model.AsMvpInfo{
CardMasterID: cardMasterId,
GetVoltage: maxVolt,
SkillTriggeredCount: skillCount,
AppealCount: appealCount,
}
liveId := liveFinishReq.Get("live_id").String()
res, err := database.LevelDb.Get([]byte("live_" + liveId))
CheckErr(err)
liveStartReq := model.AsLiveStartReq{}
if err := json.Unmarshal(res, &liveStartReq); err != nil {
panic(err)
}
// fmt.Println("liveStartReq:", liveStartReq)
var partnerInfo any
if liveStartReq.PartnerUserID != 0 {
info := model.AsLivePartnerInfo{
LastPlayedAt: time.Now().Unix(),
RecommendCardMasterID: liveStartReq.PartnerCardMasterID,
RecommendCardLevel: 1,
IsRecommendCardImageAwaken: true,
IsRecommendCardAllTrainingActivated: true,
IsNew: false,
FriendApprovedAt: nil,
RequestStatus: 3,
IsRequestPending: false,
}
partnerResp := gjson.Parse(GetUserData("fetchLivePartners.json")).Get("partner_select_state.live_partners")
partnerResp.ForEach(func(k, v gjson.Result) bool {
userId := v.Get("user_id").Int()
if userId == int64(liveStartReq.PartnerUserID) {
info.UserID = int(userId)
info.Name.DotUnderText = v.Get("name.dot_under_text").String()
info.Rank = int(v.Get("rank").Int())
info.EmblemID = int(v.Get("emblem_id").Int())
info.IntroductionMessage.DotUnderText = v.Get("introduction_message.dot_under_text").String()
}
return true
})
partnerInfo = info
} else {
partnerInfo = nil
}
liveResult := model.AsLiveResultAchievementStatus{
ClearCount: 1,
GotVoltage: liveFinishReq.Get("live_score.current_score").Int(),
RemainingStamina: liveFinishReq.Get("live_score.remaining_stamina").Int(),
}
liveFinishResp := GetUserData("liveFinish.json")
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.live_difficulty_master_id", liveStartReq.LiveDifficultyID)
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.live_deck_id", liveStartReq.DeckID)
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.mvp", mvpInfo)
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.partner", partnerInfo)
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.live_result_achievement_status", liveResult)
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.voltage", liveFinishReq.Get("live_score.current_score").Int())
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.last_best_voltage", liveFinishReq.Get("live_score.current_score").Int())
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.before_user_exp", GetUserStatus()["exp"].(float64))
liveFinishResp, _ = sjson.Set(liveFinishResp, "live_result.gain_user_exp", 0)
liveFinishResp, _ = sjson.Set(liveFinishResp, "user_model_diff.user_status", GetUserStatus())
liveFinishResp, _ = sjson.Set(liveFinishResp, "user_model_diff.user_status.latest_live_deck_id", liveStartReq.DeckID)
liveFinishResp, _ = sjson.Set(liveFinishResp, "user_model_diff.user_status.last_live_difficulty_id", liveStartReq.LiveDifficultyID)
resp := SignResp(ctx.GetString("ep"), liveFinishResp, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsGetOtherUserCard(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
userCardReq := model.AsUserCardReq{}
if err := json.Unmarshal([]byte(reqBody.String()), &userCardReq); err != nil {
panic(err)
}
// fmt.Println(liveStartReq)
var cardInfo string
partnerResp := gjson.Parse(GetUserData("fetchLivePartners.json")).Get("partner_select_state.live_partners")
partnerResp.ForEach(func(k, v gjson.Result) bool {
userId := v.Get("user_id").Int()
if userId == userCardReq.UserID {
v.Get("card_by_category").ForEach(func(kk, vv gjson.Result) bool {
if vv.IsObject() {
cardId := vv.Get("card_master_id").Int()
if cardId == userCardReq.CardMasterID {
cardInfo = vv.String()
// fmt.Println(cardInfo)
return false
}
}
return true
})
return false
}
return true
})
var userCardInfo map[string]any
if err := json.Unmarshal([]byte(cardInfo), &userCardInfo); err != nil {
panic(err)
}
userCardResp := GetUserData("getOtherUserCard.json")
userCardResp, _ = sjson.Set(userCardResp, "other_user_card", userCardInfo)
resp := SignResp(ctx.GetString("ep"), userCardResp, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchNoticeDetail(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
noticeId := reqBody.Get("notice_id").String()
resp := SignResp(ctx.GetString("ep"), utils.ReadAllText("assets/as/notices/"+noticeId+".json"), sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsChangeIsAwakeningImage(ctx *gin.Context) {
reqBody := gjson.Parse(ctx.GetString("reqBody")).Array()[0]
// fmt.Println(reqBody.String())
req := model.AsCardAwakeningReq{}
if err := json.Unmarshal([]byte(reqBody.String()), &req); err != nil {
panic(err)
}
loginData := GetUserData("userCard.json")
cardInfo := model.AsCardInfo{}
gjson.Parse(loginData).Get("user_card_by_card_id").
ForEach(func(key, value gjson.Result) bool {
if value.IsObject() {
if err := json.Unmarshal([]byte(value.String()), &cardInfo); err != nil {
panic(err)
}
if cardInfo.CardMasterID == req.CardMasterID {
cardInfo.IsAwakeningImage = req.IsAwakeningImage
k := "user_card_by_card_id." + key.String() + ".is_awakening_image"
SetUserData("userCard.json", k, req.IsAwakeningImage)
return false
}
}
return true
})
userCardInfo := []any{}
userCardInfo = append(userCardInfo, cardInfo.CardMasterID)
userCardInfo = append(userCardInfo, cardInfo)
cardResp := GetUserData("changeIsAwakeningImage.json")
cardResp, _ = sjson.Set(cardResp, "user_model_diff.user_status", GetUserStatus())
cardResp, _ = sjson.Set(cardResp, "user_model_diff.user_card_by_card_id", userCardInfo)
resp := SignResp(ctx.GetString("ep"), cardResp, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFinishStory(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("finishStory.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFinishStoryMain(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("finishUserStoryMain.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFinishStoryLinkage(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("finishStoryLinkage.json"),
"user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchTrainingTree(ctx *gin.Context) {
signBody := GetUserData("fetchTrainingTree.json")
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsUpdatePushNotificationSettings(ctx *gin.Context) {
resp := SignResp(ctx.GetString("ep"), "{}", sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsExecuteLesson(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
deckId := req.Get("selected_deck_id").Int()
var deckInfo string
var actionList []model.AsLessonMenuAction
gjson.Parse(GetUserData("lessonDeck.json")).Get("user_lesson_deck_by_id").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() && value.Get("user_lesson_deck_id").Int() == deckId {
deckInfo = value.String()
// fmt.Println("Deck Info:", deckInfo)
gjson.Parse(deckInfo).ForEach(func(kk, vv gjson.Result) bool {
// fmt.Printf("kk: %s, vv: %s\n", kk.String(), vv.String())
if strings.Contains(kk.String(), "card_master_id") {
actionList = append(actionList, model.AsLessonMenuAction{
CardMasterID: vv.Int(),
Position: 0,
IsAddedPassiveSkill: true,
IsAddedSpecialPassiveSkill: true,
IsRankupedPassiveSkill: true,
IsRankupedSpecialPassiveSkill: true,
IsPromotedSkill: true,
MaxRarity: 4,
UpCount: 1,
})
}
return true
})
return false
}
return true
})
// fmt.Println(actionList)
SetUserData("executeLesson.json", "lesson_menu_actions.1", actionList)
SetUserData("executeLesson.json", "lesson_menu_actions.3", actionList)
SetUserData("executeLesson.json", "lesson_menu_actions.5", actionList)
signBody := SetUserData("executeLesson.json", "lesson_menu_actions.7", actionList)
SetUserData("userStatus.json", "main_lesson_deck_id", deckId)
signBody, _ = sjson.Set(signBody, "user_model_diff.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsResultLesson(ctx *gin.Context) {
userData := GetUserStatus()
signBody, _ := sjson.Set(GetUserData("resultLesson.json"),
"user_model_diff.user_status", userData)
signBody, _ = sjson.Set(signBody, "selected_deck_id", userData["main_lesson_deck_id"])
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSkillEditResult(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
var cardList []any
index := 1
cardData := GetUserData("userCard.json")
cardInfo := gjson.Parse(cardData).Get("user_card_by_card_id")
cardInfo.ForEach(func(key, value gjson.Result) bool {
if value.IsObject() {
if index > 9 {
return false
}
// fmt.Println("cardInfo:", value.String())
skillList := req.Get("selected_skill_ids")
skillList.ForEach(func(kk, vv gjson.Result) bool {
if kk.Int()%2 == 0 && vv.Int() == value.Get("card_master_id").Int() {
skill := skillList.Get(fmt.Sprintf("%d", kk.Int()+1))
skill.ForEach(func(kkk, vvv gjson.Result) bool {
skillIdKey := fmt.Sprintf("user_card_by_card_id.%s.additional_passive_skill_%d_id", key.String(), kkk.Int()+1)
cardData = SetUserData("userCard.json", skillIdKey, vvv.Int())
return true
})
card := gjson.Parse(cardData).Get("user_card_by_card_id." + key.String())
cardList = append(cardList, card.Get("card_master_id").Int())
cardList = append(cardList, card.Value())
index++
}
return true
})
}
return true
})
signBody := GetUserData("skillEditResult.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_card_by_card_id", cardList)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSaveDeckLesson(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
deckId := req.Get("deck_id").Int()
lessonDeck := GetUserData("lessonDeck.json")
var deckInfo string
var deckIndex string
gjson.Parse(lessonDeck).Get("user_lesson_deck_by_id").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() && value.Get("user_lesson_deck_id").Int() == deckId {
deckInfo = value.String()
deckIndex = key.String()
// fmt.Println("Lesson Deck:", deckInfo)
return false
}
return true
})
cardList := req.Get("card_master_ids")
cardList.ForEach(func(key, value gjson.Result) bool {
if key.Int()%2 == 0 {
position := value.String()
// fmt.Println("Position:", position)
cardMasterId := cardList.Get(fmt.Sprintf("%d", key.Int()+1)).Int()
// fmt.Println("Card:", cardMasterId)
deckInfo, _ = sjson.Set(deckInfo, "card_master_id_"+position, cardMasterId)
// fmt.Println("New Lesson Deck:", deckInfo)
SetUserData("lessonDeck.json", "user_lesson_deck_by_id."+deckIndex, gjson.Parse(deckInfo).Value())
// lessonDeck, _ = sjson.Set(lessonDeck, "user_lesson_deck_by_id."+deckIndex, gjson.Parse(deckInfo).Value())
}
return true
})
signBody := GetUserData("saveDeckLesson.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_lesson_deck_by_id.0", deckId)
signBody, _ = sjson.Set(signBody, "user_model.user_lesson_deck_by_id.1", gjson.Parse(deckInfo).Value())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSaveSuit(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
deckId := req.Get("deck_id").Int()
cardId := req.Get("card_index").Int()
suitId := req.Get("suit_master_id").Int()
deckIndex := deckId*2 - 1
keyLiveDeck := fmt.Sprintf("user_live_deck_by_id.%d", deckIndex)
// fmt.Println("keyLiveDeck:", keyLiveDeck)
liveDeck := gjson.Parse(GetUserData("liveDeck.json")).Get(keyLiveDeck).String()
// fmt.Println(liveDeck)
keyLiveDeckInfo := fmt.Sprintf("suit_master_id_%d", cardId)
liveDeck, _ = sjson.Set(liveDeck, keyLiveDeckInfo, suitId)
// fmt.Println(liveDeck)
var deckInfo model.AsDeckInfo
if err := json.Unmarshal([]byte(liveDeck), &deckInfo); err != nil {
panic(err)
}
SetUserData("liveDeck.json", keyLiveDeck, deckInfo)
signBody, _ := sjson.Set(GetUserData("saveSuit.json"),
"user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_live_deck_by_id.0", deckId)
signBody, _ = sjson.Set(signBody, "user_model.user_live_deck_by_id.1", deckInfo)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSaveDeck(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
// fmt.Println(reqBody)
req := gjson.Parse(reqBody).Array()[0]
deckId := req.Get("deck_id")
// fmt.Println("deckId:", deckId)
position := req.Get("card_master_ids.0")
cardMasterId := req.Get("card_master_ids.1")
// fmt.Println("cardMasterId:", cardMasterId)
var deckInfo, partyInfo string
var oldCardMasterId int64
var partyId int64
var savePartyInfo model.AsPartyInfo
deckList := GetUserData("liveDeck.json")
gjson.Parse(deckList).Get("user_live_deck_by_id").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() && value.Get("user_live_deck_id").String() == deckId.String() {
deckInfo = value.String()
// fmt.Println("deckInfo:", deckInfo)
oldCardMasterId = gjson.Parse(deckInfo).Get("card_master_id_" + position.String()).Int()
deckInfo, _ = sjson.Set(deckInfo, "card_master_id_"+position.String(), cardMasterId.Int())
deckInfo, _ = sjson.Set(deckInfo, "suit_master_id_"+position.String(), cardMasterId.Int())
// fmt.Println("New deckInfo:", deckInfo)
SetUserData("liveDeck.json", "user_live_deck_by_id."+key.String(), gjson.Parse(deckInfo).Value())
return false
}
return true
})
gjson.Parse(deckList).Get("user_live_party_by_id").ForEach(func(key, value gjson.Result) bool {
if value.IsObject() && (value.Get("party_id").String() == deckId.String()+"01" ||
value.Get("party_id").String() == deckId.String()+"02" ||
value.Get("party_id").String() == deckId.String()+"03") {
value.ForEach(func(kk, vv gjson.Result) bool {
if vv.Int() == oldCardMasterId {
partyInfo = value.String()
// fmt.Println("partyInfo:", partyInfo)
partyInfo, _ = sjson.Set(partyInfo, kk.String(), cardMasterId.Int())
// fmt.Println("New partyInfo:", partyInfo)
newPartyInfo := gjson.Parse(partyInfo)
partyId = newPartyInfo.Get("party_id").Int()
roleIds := []int{}
err := MainEng.Table("m_card").
Where("id IN (?,?,?)", newPartyInfo.Get("card_master_id_1").Int(),
newPartyInfo.Get("card_master_id_2").Int(),
newPartyInfo.Get("card_master_id_3").Int()).
Cols("role").Find(&roleIds)
CheckErr(err)
// fmt.Println("roleIds:", roleIds)
partyIcon, partyName := GetPartyInfoByRoleIds(roleIds)
realPartyName := GetRealPartyName(partyName)
partyInfo, _ = sjson.Set(partyInfo, "name.dot_under_text", realPartyName)
partyInfo, _ = sjson.Set(partyInfo, "icon_master_id", partyIcon)
// fmt.Println("New partyInfo 2:", partyInfo)
decoder := json.NewDecoder(strings.NewReader(partyInfo))
decoder.UseNumber()
err = decoder.Decode(&savePartyInfo)
CheckErr(err)
SetUserData("liveDeck.json", "user_live_party_by_id."+key.String(), savePartyInfo)
return false
}
return true
})
}
return true
})
signBody := GetUserData("SaveDeck.json")
signBody, _ = sjson.Set(signBody, "user_model.user_status", GetUserStatus())
signBody, _ = sjson.Set(signBody, "user_model.user_live_deck_by_id.0", deckId.Int())
signBody, _ = sjson.Set(signBody, "user_model.user_live_deck_by_id.1", gjson.Parse(deckInfo).Value())
signBody, _ = sjson.Set(signBody, "user_model.user_live_party_by_id.0", partyId)
signBody, _ = sjson.Set(signBody, "user_model.user_live_party_by_id.1", savePartyInfo)
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
// fmt.Println(resp)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsSetFavoriteMember(ctx *gin.Context) {
reqBody := ctx.GetString("reqBody")
SetUserData("userStatus.json", "favorite_member_id",
gjson.Parse(reqBody).Array()[0].Get("member_master_id").Int())
signBody, _ := sjson.Set(GetUserData("setFavoriteMember.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchMission(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("fetchMission.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsClearMissionBadge(ctx *gin.Context) {
signBody, _ := sjson.Set(GetUserData("clearMissionBadge.json"),
"user_model.user_status", GetUserStatus())
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}
func AsFetchPresent(ctx *gin.Context) {
signBody := GetUserData("fetchPresent.json")
resp := SignResp(ctx.GetString("ep"), signBody, sessionKey)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, resp)
}