From b8186d43f69b0352b77fffa0eebb5bac4d0bac0d Mon Sep 17 00:00:00 2001 From: Yuan Si Date: Thu, 20 Apr 2023 18:40:22 +0800 Subject: [PATCH] Fix live power calculation Signed-off-by: Yuan Si --- assets/main.db | Bin 3948544 -> 3952640 bytes go.mod | 2 +- handler/live.go | 177 +++++++++++++++++++++++++++++++++++++++++++++--- model/live.go | 4 +- 4 files changed, 169 insertions(+), 14 deletions(-) diff --git a/assets/main.db b/assets/main.db index 6621e9155ea86979a032f998d566e063fc5e0506..dd57fe3804cd87d1f690d3f6b749abdc07bd30f4 100644 GIT binary patch delta 6922 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 delta 6504 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 b8P>rW*3lW($r;w!8P>%a)^%4{xBLGC*TgP{ diff --git a/go.mod b/go.mod index 18abec2..7b964c5 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect - xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect + xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 ) require ( diff --git a/handler/live.go b/handler/live.go index e86eb38..ef04883 100644 --- a/handler/live.go +++ b/handler/live.go @@ -8,12 +8,14 @@ import ( "honoka-chan/encrypt" "honoka-chan/model" "honoka-chan/utils" + "math" "net/http" "strconv" "time" "github.com/gin-gonic/gin" _ "github.com/mattn/go-sqlite3" + "xorm.io/builder" ) type GameOverResp struct { @@ -90,15 +92,168 @@ func PlayLiveHandler(ctx *gin.Context) { RankMax: 0, }) + UserEng.ShowSQL(true) + MainEng.ShowSQL(true) + owningIdList := []int{} + err = UserEng.Table("deck_unit_m").Join("LEFT", "user_deck_m", "deck_unit_m.user_deck_id = user_deck_m.id"). + Where("user_id = ? AND deck_id = ?", ctx.GetString("userid"), deckId).Cols("unit_owning_user_id"). + OrderBy("deck_unit_m.position ASC").Find(&owningIdList) + CheckErr(err) + unitList := []model.UnitList{} - for i := 0; i < 9; i++ { + var totalSmile, totalPure, totalCool, maxLove float64 + var totalHp int + for _, owningId := range owningIdList { + var uId int + exists, err := MainEng.Table("common_unit_m").Where("unit_owning_user_id = ?", owningId).Cols("unit_id").Get(&uId) + CheckErr(err) + + var maxHp, attrId int + var baseSmile, basePure, baseCool, smileMax, pureMax, coolMax float64 + if exists { + // 公共卡片仅为100级属性 + _, err = MainEng.Table("unit_m").Where("unit_id = ?", uId). + Join("LEFT", "unit_rarity_m", "unit_m.rarity = unit_rarity_m.rarity"). + Cols("attribute_id,hp_max,smile_max,pure_max,cool_max,after_love_max"). + Get(&attrId, &maxHp, &baseSmile, &basePure, &baseCool, &maxLove) + CheckErr(err) + + // 绊属性 + + // } else { + // // 用户卡片需要根据等级计算属性 + // // TODO + } + + // 饰品属性加成(满级) + accessoryOwningList := []int{} + err = UserEng.Table("accessory_wear_m").Where(builder.In("unit_owning_user_id", owningIdList)).Cols("accessory_owning_user_id").Find(&accessoryOwningList) + CheckErr(err) + var smileAccessory, pureAccessory, coolAccessory float64 + _, err = MainEng.Table("common_accessory_m").Join("LEFT", "accessory_m", "common_accessory_m.accessory_id = accessory_m.accessory_id"). + Where(builder.In("accessory_owning_user_id", accessoryOwningList)).Cols("smile_max,pure_max,cool_max").Get(&smileAccessory, &pureAccessory, &coolAccessory) + CheckErr(err) + // fmt.Println("基础属性:", baseSmile, basePure, baseCool) + + // 饰品属性加成(该加成会影响个宝等百分比宝石属性加成的计算,故先计算。) + baseSmile += smileAccessory + basePure += pureAccessory + baseCool += coolAccessory + // fmt.Println("饰品属性加成:", smileAccessory, pureAccessory, coolAccessory) + // fmt.Println("饰品属性加成后的基础属性:", baseSmile, basePure, baseCool) + + // 回忆画廊属性加成(该加成会影响个宝等百分比宝石属性加成的计算,故先计算。) + var smileBuff, pureBuff, coolBuff float64 + _, err = MainEng.Table("museum_contents_m").Select("SUM(smile_buff),SUM(pure_buff),SUM(cool_buff)").Get(&smileBuff, &pureBuff, &coolBuff) + CheckErr(err) + baseSmile += smileBuff + basePure += pureBuff + baseCool += coolBuff + // fmt.Println("回忆画廊属性加成:", smileBuff, pureBuff, coolBuff) + // fmt.Println("回忆画廊属性加成后的基础属性:", baseSmile, basePure, baseCool) + + // 绊属性加成(该加成会影响个宝等百分比宝石属性加成的计算,故先计算。) + if attrId == 1 { + baseSmile += maxLove + } else if attrId == 2 { + basePure += maxLove + } else if attrId == 3 { + baseCool += maxLove + } + // fmt.Println("绊属性加成:", maxLove) + // fmt.Println("绊属性加成后的基础属性:", baseSmile, basePure, baseCool) + + // 宝石属性加成 + var kissSmile, kissPure, kissCool float64 + var skillSmile, skillPure, skillCool float64 + + // 宝石加成(满级) + removableSkillIds := []int{} + err = UserEng.Table("skill_equip_m").Where("unit_owning_user_id = ? AND user_id = ?", owningId, ctx.GetString("userid")). + Cols("unit_removable_skill_id").Find(&removableSkillIds) + CheckErr(err) + + for _, sk := range removableSkillIds { + // 判断宝石效果类型(效果范围、效果类型、效果值、是否固定数值) + var effectRange, effectType, fixedValueFlag, refType int + var effectValue float64 + _, err = MainEng.Table("unit_removable_skill_m").Where("unit_removable_skill_id = ?", sk). + Cols("effect_range,effect_type,effect_value,fixed_value_flag,target_reference_type"). + Get(&effectRange, &effectType, &effectValue, &fixedValueFlag, &refType) + CheckErr(err) + + if fixedValueFlag == 1 { + // 吻、眼神属性加成(固定数值) + if effectType == 1 { + kissSmile += effectValue + } else if effectType == 2 { + kissPure += effectValue + } else if effectType == 3 { + kissCool += effectValue + } + // fmt.Println("吻、眼神属性加成:", kissSmile, kissPure, kissCool) + } else { + // 仅效果类型为1、2、3的有属性加成 + if effectType == 1 || effectType == 2 || effectType == 3 { + // 加成范围:2:全员 1:非全员 + if effectRange == 2 { + if effectType == 1 { + skillSmile += math.Ceil(baseSmile * (effectValue / 100)) + } else if effectType == 2 { + skillPure += math.Ceil(basePure * (effectValue / 100)) + } else if effectType == 3 { + skillCool += math.Ceil(baseCool * (effectValue / 100)) + } + // fmt.Println("全员类宝石属性加成:", skillSmile, skillPure, skillCool) + } else { + // refType: 1 -> 年级类加成, target_type -> 指定年级(这里不需要使用,因为能装上宝石肯定是符合的) + // refType: 2 -> 个宝 + // refType: 3 -> 爆分、奶、判宝石, 0 -> 竞技场宝石 + if refType == 1 || refType == 2 { // 年级类和个宝都是百分比加成 + if effectType == 1 { + skillSmile += math.Ceil(baseSmile * (effectValue / 100)) + } else if effectType == 2 { + skillPure += math.Ceil(basePure * (effectValue / 100)) + } else if effectValue == 3 { + skillCool += math.Ceil(baseCool * (effectValue / 100)) + } + // fmt.Println("年级类宝石、个宝属性加成:", skillSmile, skillPure, skillCool) + } + } + } + } + } + + // 单卡属性 + smileMax = baseSmile + kissSmile + skillSmile + pureMax = basePure + kissPure + skillPure + coolMax = baseCool + kissCool + skillCool + + // 全部卡属性 + totalSmile += smileMax + totalPure += pureMax + totalCool += coolMax + totalHp += maxHp + + // 单卡属性计算结果取上取整 + fixedSmileMax := int(smileMax) + fixedPureMax := int(pureMax) + fixedCoolMax := int(coolMax) + // fmt.Println("单卡属性:", fixedSmileMax, fixedPureMax, fixedCoolMax) + unitList = append(unitList, model.UnitList{ - Smile: 1, - Cute: 1, - Cool: 1, + Smile: fixedSmileMax, + Cute: fixedPureMax, + Cool: fixedCoolMax, }) } + // 全部卡属性计算结果取上取整 + fixedTotalSmile := int(math.Ceil(totalSmile)) + fixedTotalPure := int(math.Ceil(totalPure)) + fixedTotalCool := int(math.Ceil(totalCool)) + // fmt.Println("全卡组属性:", fixedTotalSmile, fixedTotalPure, fixedTotalCool) + lives := []model.PlayLiveList{} lives = append(lives, model.PlayLiveList{ LiveInfo: model.LiveInfo{ @@ -110,10 +265,10 @@ func PlayLiveHandler(ctx *gin.Context) { }, DeckInfo: model.DeckInfo{ UnitDeckID: deckId, - TotalSmile: 9, - TotalCute: 9, - TotalCool: 9, - TotalHp: 999, + TotalSmile: fixedTotalSmile, + TotalCute: fixedTotalPure, + TotalCool: fixedTotalCool, + TotalHp: totalHp, PreparedHpDamage: 0, UnitList: unitList, }, @@ -129,7 +284,7 @@ func PlayLiveHandler(ctx *gin.Context) { MarathonEventID: nil, NoSkill: false, CanActivateEffect: true, - ServerTimestamp: 1679237935, + ServerTimestamp: time.Now().Unix(), } m, err := json.Marshal(resp) @@ -143,6 +298,7 @@ func PlayLiveHandler(ctx *gin.Context) { mm, err := json.Marshal(res) CheckErr(err) + // fmt.Println(string(mm)) nonce := ctx.GetInt("nonce") nonce++ @@ -289,8 +445,7 @@ func PlayRewardHandler(ctx *gin.Context) { deckId, err := database.LevelDb.Get([]byte(key)) CheckErr(err) unitsList := []model.PlayRewardUnitList{} - err = UserEng.Table("deck_unit_m").Select("*"). - Join("LEFT", "user_deck_m", "deck_unit_m.user_deck_id = user_deck_m.id"). + err = UserEng.Table("deck_unit_m").Join("LEFT", "user_deck_m", "deck_unit_m.user_deck_id = user_deck_m.id"). Where("user_id = ? AND deck_id = ?", ctx.GetString("userid"), string(deckId)).Find(&unitsList) CheckErr(err) diff --git a/model/live.go b/model/live.go index 824834b..41e7b2c 100644 --- a/model/live.go +++ b/model/live.go @@ -164,14 +164,14 @@ type PlayResponseData struct { MarathonEventID interface{} `json:"marathon_event_id"` NoSkill bool `json:"no_skill"` CanActivateEffect bool `json:"can_activate_effect"` - ServerTimestamp int `json:"server_timestamp"` + ServerTimestamp int64 `json:"server_timestamp"` } // preciseScore type PlayScoreReq struct { Module string `json:"module"` Action string `json:"action"` - TimeStamp int `json:"timeStamp"` + TimeStamp int64 `json:"timeStamp"` Mgd int `json:"mgd"` LiveDifficultyID string `json:"live_difficulty_id"` CommandNum string `json:"commandNum"`