diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index 1c9e8d02..0cb59aa7 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -56,6 +56,20 @@ func RandSliceNum(slice []int, num int) []int { return r } +func RandSliceNum2(slice []interface{}, num int) []interface{} { + r := make([]interface{}, 0, num) + if num <= 0 || len(slice) < num { + return slice + } + + for i := 0; i < num; i++ { + Id := GetRand().Intn(len(slice)) + r = append(r, slice[Id]) + slice = append(slice[0:Id], slice[Id+1:]...) + } + return r +} + func RandSliceNumNonAdjacent(slice []int, num int) []int { if len(slice) < 2*num { return nil diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 75f6970c..1b451cd5 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -9,9 +9,10 @@ import ( ) const ( - CFG_NAME = "MergeData" - CONST_NAME = "MergeDataConst" - CFG_MERGE_EMIT = "MergeDataEmit" + CFG_NAME = "MergeData" + CONST_NAME = "MergeDataConst" + CFG_MERGE_EMIT = "MergeDataEmit" + CFG_MERGE_EMIT_TYPE = "MergeDataEmitType" // 棋子类型 CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物 @@ -23,6 +24,25 @@ func init() { gamedata.InitCfg(CFG_NAME) gamedata.InitCfg(CONST_NAME) gamedata.InitCfg(CFG_MERGE_EMIT) + gamedata.InitCfg(CFG_MERGE_EMIT_TYPE) +} + +func GetEmitTypeProduce(EmitType string) []string { + data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType) + if err != nil { + log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType) + return []string{} + } + return strings.Split(gamedata.GetStringValue(data, "Produce"), ",") +} + +func GetEmitType2(EmitType string) int { + data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType) + if err != nil { + log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType) + return 0 + } + return gamedata.GetIntValue(data, "Type2") } func GetEmitProduce(EmitType string) []string { @@ -82,7 +102,7 @@ func GetChessIdByLvAndColor(Lv int, Color string) int { } data, err := gamedata.GetData(CFG_NAME) if err != nil { - log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color) + // log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color) return 0 } for k, v := range data { @@ -93,7 +113,7 @@ func GetChessIdByLvAndColor(Lv int, Color string) int { return Id } } - log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color) + // log.Debug("MergeDataCfg GetChessIdByLvAndColor lv:%v Color:%v not found", Lv, Color) return 0 } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 8a0db455..0315d808 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -562,7 +562,7 @@ func PlayroomVisit(p *Player, Uid int) { Items := make(map[int32]*proto.ItemInfo, 0) for k, v := range PlayroomMod.GameReward { Items[int32(k)] = &proto.ItemInfo{ - Id: int32(k), + Id: int32(v.Id), Num: int32(v.Num), } } @@ -679,6 +679,9 @@ func EmitRetireTrigger2(p *Player) { } RetireEmit := ChessMod.GetRetireEmit() for k, v := range RetireEmit { + if k == "" { + continue + } if v != 1 { continue } @@ -694,6 +697,9 @@ func EmitRetireTrigger2(p *Player) { } RetireEmit1 := ChessMod.GetRetireEmit() for k, v := range RetireEmit1 { + if k == "" { + continue + } if v != 2 { continue } diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index fafac338..06a91684 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -2872,7 +2872,7 @@ func ReqPlayroomGame(args []interface{}) error { ItemsMsg := make(map[int32]*msg.ItemInfo, 0) for k, v := range PlayroomMod.GameReward { ItemsMsg[int32(k)] = &msg.ItemInfo{ - Id: int32(k), + Id: int32(v.Id), Num: int32(v.Num), } } diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index d46ac9a7..dc3fbe4a 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -59,6 +59,8 @@ func UnitOrder(p *Player) error { func UnitChess(p *Player) error { ChessMod := p.PlayMod.getChessMod() - ChessMod.RetireOrder("A") + Emit := ChessMod.GetEmitList() + ChargeMod := p.PlayMod.getChargeMod() + ChargeMod.InitChessShop(Emit) return nil } diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index bacf37c1..b4ba4d9d 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -2,7 +2,6 @@ package charge import ( "fmt" - "math" "server/GoUtil" chargeCfg "server/conf/charge" mergeDataCfg "server/conf/mergeData" @@ -41,9 +40,17 @@ type SepcialShop struct { Count int } +var ChessDiamondCfg = map[int]int{ + 1: 5, + 2: 10, + 3: 20, + 4: 50, +} + const ( SPECIAL_TYPE_1 = 1 // 特惠礼包1 SPECIAL_TYPE_2 = 2 // 特惠礼包2 + ) func (c *ChargeMod) InitData() { @@ -228,39 +235,53 @@ func (c *ChargeMod) InitChessShop(Emit []int) { return } c.ChessShop = make(map[int]*ChessShop) - list := make([]int, 0) + EmitColor := make(map[string]int) for _, v := range Emit { - n := 6 - ProductColor := mergeDataCfg.GetEmitProduceChessType(v) - if len(ProductColor) == 0 { - continue - } - if len(ProductColor) == 1 { - n = 5 - } - for _, color := range ProductColor { - for i := n; i <= 10; i++ { - Id := mergeDataCfg.GetChessIdByLvAndColor(i, color) - if Id == 0 { - continue - } - list = append(list, Id) + Color := mergeDataCfg.GetColorById(v) + ProduceList := mergeDataCfg.GetEmitTypeProduce(Color) + Type2 := mergeDataCfg.GetEmitType2(Color) + for _, Produce := range ProduceList { + if _, ok := EmitColor[Produce]; ok { + continue } - n-- + EmitColor[Produce] = Type2 } } - list1 := GoUtil.RandSliceNum(list, 5) - for k, v := range list1 { - PType := mergeDataCfg.GetProductType(v) - Lv := mergeDataCfg.GetLvById(v) - Diamond := int(math.Ceil(math.Pow(2, float64(Lv-1)/2.5))) - switch PType { - case mergeDataCfg.CHESS_PRODUCT_SUB_TYPE: - Diamond += 15 - case mergeDataCfg.CHESS_PRODUCT_SUB_EMIT_TYPE: - Diamond *= 2 + 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 { + Diamond := GetChessDiamond(i, v) + RandList = append(RandList, Rand{ + ChessId: ChessId, + Diamond: Diamond, + }) + } } - c.ChessShop[k+1] = &ChessShop{Diamond: Diamond, Count: 5, Id: v} + } + + L := GoUtil.RandSliceNum2(RandList, 5) + for k, v := range L { + 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 new file mode 100644 index 00000000..ba29e4a9 --- /dev/null +++ b/src/server/game/mod/charge/ChargeFunc.go @@ -0,0 +1,20 @@ +package charge + +import "math" + +func GetChessDiamond(Lv, Type int) int { + Diamond := 0.0 + if Type == 1 { + Diamond = 0.27 * math.Exp(float64(Lv)*0.56) + } else { + Diamond = 3.25 * math.Exp(float64(Lv)*0.65) + } + d := int(Diamond) + if d > 10 { + r := d % 10 + if r > 3 { + return d - r + } + } + return max(1, d) +} diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 04f9ee0b..091be492 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -166,7 +166,7 @@ func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool { } } for v := range Emit { - Produce := mergeDataCfg.GetEmitProduceType(v) + Produce := mergeDataCfg.GetEmitProduceChessType(v) if len(Produce) < 2 { continue } @@ -397,7 +397,7 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int) bool Emit_Id := mergeDataCfg.GetEmitId(v) _, ok := GetExtraEmitId[Emit_Id] _, ok1 := o.EimtOrder[Emit_Id] - ChessColor := mergeDataCfg.GetEmitProduceType(v) + ChessColor := mergeDataCfg.GetEmitProduceChessType(v) if ok && !ok1 && len(ChessColor) > 0 { b1 = true OrderEmit = v