diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index f7ce0be9..0d639685 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -66,7 +66,9 @@ func RandSliceNum(slice []int, num int) []int { return r } -func RandSliceNum2(slice []interface{}, num int) []interface{} { +func RandSliceNum2(s []interface{}, num int) []interface{} { + slice := make([]interface{}, len(s)) + copy(slice, s) r := make([]interface{}, 0, num) if num <= 0 || len(slice) < num { return slice diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index e26ddb50..7b7f77d3 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -15,11 +15,12 @@ const ( CONST_NAME = "MergeDataConst" CFG_MERGE_EMIT = "MergeDataEmit" CFG_MERGE_EMIT_TYPE = "MergeDataEmitType" + CFG_MERGE_COLOR = "MergeDataColor" // 棋子类型 - CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物 - CHESS_PRODUCT_SUB_TYPE = 2 // 次产物 - CHESS_PRODUCT_SUB_EMIT_TYPE = 3 // 次发射器产物 + CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物 + CHESS_PRODUCT_SECONDARY_TYPE = 2 // 次产物 + CHESS_PRODUCT_SUB_TYPE = 3 // 子发射器产物 ) func init() { @@ -27,6 +28,7 @@ func init() { gamedata.InitCfg(CONST_NAME) gamedata.InitCfg(CFG_MERGE_EMIT) gamedata.InitCfg(CFG_MERGE_EMIT_TYPE) + gamedata.InitCfg(CFG_MERGE_COLOR) } func GetEmitTypeProduce(EmitType string) []string { @@ -475,3 +477,21 @@ func getColorProb(Emit_List string, Color string) float64 { } return Prob } + +func GetColorType(Color string) int { + data, err := gamedata.GetDataByKey(CFG_MERGE_COLOR, Color) + if err != nil { + log.Debug("GetColorType GetOne Color:%s not found", Color) + return 0 + } + Type := gamedata.GetStringValue(data, "Type") + switch Type { + case "main": + return CHESS_PRODUCT_MAIN_TYPE + case "secondary": + return CHESS_PRODUCT_SECONDARY_TYPE + case "sub": + return CHESS_PRODUCT_SUB_TYPE + } + return CHESS_PRODUCT_MAIN_TYPE +} diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index d1d7274a..8ec674da 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -35,21 +35,9 @@ func UnitEndlessReward(p *Player) error { func UnitChessShop(p *Player) error { ChessMod := p.PlayMod.getChessMod() - if ChessMod == nil { - return fmt.Errorf("ChessMod is nil") - } - ChessMod.EmitList = make(map[int]int) - ChessMod.EmitList[83] = 1 - ChessMod.EmitList[125] = 1 + ChargeMod := p.PlayMod.getChargeMod() - if ChargeMod == nil { - return fmt.Errorf("ChargeMod is nil") - } - p.PlayMod.save() - p.PlayMod.ClearData(p) - ChargeMod.TriggerChargeUnlock(4, ChessMod.GetEmitList()) - b := ChargeMod.BackData() - fmt.Println(b) + ChargeMod.InitChessShop(ChessMod.GetEmitList()) return nil } diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index ba4c9ea5..9ac6149b 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -6,7 +6,6 @@ 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" ) @@ -29,7 +28,10 @@ type ChargeMod struct { Ad bool // 是否购买免广告 } - +type Rand struct { + ChessId int + Diamond int +} type ChessShop struct { Diamond int Count int @@ -236,54 +238,33 @@ func (c *ChargeMod) InitChessShop(Emit []int) { return } c.ChessShop = make(map[int]*ChessShop) - EmitColor := make(map[string]int) + ColorList := make([]string, 0) for _, v := range Emit { - Color := mergeDataCfg.GetColorById(v) - ProduceList := mergeDataCfg.GetEmitTypeProduce(Color) - Type2 := mergeDataCfg.GetEmitType2(Color) - for _, Produce := range ProduceList { - if _, ok := EmitColor[Produce]; ok { - continue - } - EmitColor[Produce] = Type2 - } - } - type Rand struct { - ChessId int - Diamond int - } - RandList := make([]interface{}, 0) - for k, v := range EmitColor { - for i := 1; i <= 99; i++ { - ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, k) - if ChessId == 0 { - break - } - ChessType := mergeDataCfg.GetTypeById(ChessId) - if ChessType == "Emitter" { - RandList = append(RandList, Rand{ - ChessId: ChessId, - Diamond: ChessDiamondCfg[i], - }) - if i >= 4 { - break - } - } else { - EmitId := order.GetEmitByColor(Emit, k) - Mul := mergeDataCfg.GetSellDiamondMul(EmitId, k) - Diamond := GetChessDiamond(i, v) * Mul - RandList = append(RandList, Rand{ - ChessId: ChessId, - Diamond: Diamond, - }) - } - } + ProduceList := mergeDataCfg.GetEmitProduceType(v) + ColorList = append(ColorList, ProduceList...) } - L := GoUtil.RandSliceNum2(RandList, 5) + RandList := make([]*Rand, 0) + for _, v := range ColorList { + ColorType := mergeDataCfg.GetColorType(v) + r := make([]*Rand, 0) + if ColorType == mergeDataCfg.CHESS_PRODUCT_MAIN_TYPE { + r = getChessMainRand(v) + } else if ColorType == mergeDataCfg.CHESS_PRODUCT_SECONDARY_TYPE { + r = getChessSecondaryRand(v) + } else if ColorType == mergeDataCfg.CHESS_PRODUCT_SUB_TYPE { + r = getChessSubRand(v) + } + RandList = append(RandList, r...) + } + randList := make([]interface{}, len(RandList)) + for k, v := range RandList { + randList[k] = v + } + L := GoUtil.RandSliceNum2(randList, 5) for k, v := range L { - Diamond := v.(Rand).Diamond - ChessId := v.(Rand).ChessId + Diamond := v.(*Rand).Diamond + ChessId := v.(*Rand).ChessId c.ChessShop[k+1] = &ChessShop{Diamond: Diamond, Count: 5, Id: ChessId} } } diff --git a/src/server/game/mod/charge/ChargeFunc.go b/src/server/game/mod/charge/ChargeFunc.go index 723ada16..1886206a 100644 --- a/src/server/game/mod/charge/ChargeFunc.go +++ b/src/server/game/mod/charge/ChargeFunc.go @@ -1,6 +1,9 @@ package charge -import "math" +import ( + "math" + mergeDataCfg "server/conf/mergeData" +) func GetChessDiamond(Lv, Type int) int { Diamond := 0.0 @@ -18,3 +21,33 @@ func GetChessDiamond(Lv, Type int) int { } return max(1, d) } + +func getChessMainRand(Color string) []*Rand { + r := make([]*Rand, 0) + for i := 6; i <= 10; i++ { + Diamond := int(math.Pow(2, float64(i-1)) / 2.5) + ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) + r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) + } + return r +} + +func getChessSecondaryRand(Color string) []*Rand { + r := make([]*Rand, 0) + for i := 5; i <= 9; i++ { + Diamond := int((math.Pow(2, float64(i-1)) / 2.5) * 2) + ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) + r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) + } + return r +} + +func getChessSubRand(Color string) []*Rand { + r := make([]*Rand, 0) + for i := 5; i <= 9; i++ { + Diamond := int(math.Pow(2, float64(i-1))/2.5 + 6.4) + ChessId := mergeDataCfg.GetChessIdByLvAndColor(i, Color) + r = append(r, &Rand{ChessId: ChessId, Diamond: Diamond}) + } + return r +}