diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 2da60964..be8bcf2b 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -436,3 +436,42 @@ func GetAdjust(EmitId int, Color string) int { } return 0 } + +func GetSellDiamondMul(EmitId int, Color string) int { + data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId) + if err != nil { + log.Debug("GetSellDiamondMul GetOne EmitId:%v not found", EmitId) + return 0 + } + ProductEmit := gamedata.GetStringValue(data, "Emit_Product") + if ProductEmit == "" { + return 1 + } + Arr := strings.Split(ProductEmit, ",") + if Color == Arr[0] { + return 1 + } + if !GoUtil.InStringArray(Color, Arr) { + return 1 + } + Emit_List := gamedata.GetStringValue(data, "Emit_List") + MainProb := getColorProb(Emit_List, Arr[0]) + SubProb := getColorProb(Emit_List, Color) + return int(MainProb / SubProb) +} + +func getColorProb(Emit_List string, Color string) float64 { + Arr := strings.Split(Emit_List, ",") + Prob := 0.0 + for _, v := range Arr { + Arr2 := strings.Split(v, "=") + A1 := GoUtil.Int(Arr2[0]) + A2, _ := strconv.ParseFloat(Arr2[1], 64) + A1Color := GetColorById(A1) + if A1Color != Color { + continue + } + Prob += A2 * float64(A1%10) + } + return Prob +} diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index b4ba4d9d..ba4c9ea5 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -6,6 +6,7 @@ import ( chargeCfg "server/conf/charge" mergeDataCfg "server/conf/mergeData" "server/game/mod/item" + "server/game/mod/order" "server/msg" "server/pkg/github.com/name5566/leaf/log" ) @@ -268,7 +269,9 @@ func (c *ChargeMod) InitChessShop(Emit []int) { break } } else { - Diamond := GetChessDiamond(i, v) + EmitId := order.GetEmitByColor(Emit, k) + Mul := mergeDataCfg.GetSellDiamondMul(EmitId, k) + Diamond := GetChessDiamond(i, v) * Mul RandList = append(RandList, Rand{ ChessId: ChessId, Diamond: Diamond, diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 12b35f6d..70960282 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -195,7 +195,7 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) { } // 根据类型获取发射器id -func getEmitByColor(Emit []int, color string) int { +func GetEmitByColor(Emit []int, color string) int { for _, v := range Emit { Produce := mergeDataCfg.GetEmitProduceChessType(v) for _, c := range Produce { @@ -328,7 +328,7 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in */ if MinChessId != 0 { MinChessColor := mergeDataCfg.GetColorById(MinChessId) - NewEmitChessId := getEmitByColor(Emit, MinChessColor) + NewEmitChessId := GetEmitByColor(Emit, MinChessColor) ColorRand := mergeDataCfg.GetEmitProduceType(NewEmitChessId) ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)