高级产物处理机制

This commit is contained in:
hahwu 2025-01-17 17:41:59 +08:00
parent 156b9da2d3
commit 1e091de9b3
7 changed files with 3673 additions and 3464 deletions

View File

@ -412,3 +412,27 @@ func DynamicAdjust(EmitId int, Color string) int {
}
return 0
}
func GetAdjust(EmitId int, Color string) int {
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
if err != nil {
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
return 0
}
AdjustLv := gamedata.GetStringValue(data, "Dynamic")
if AdjustLv == "" {
return 0
}
Arr := strings.Split(AdjustLv, ",")
for _, v := range Arr {
Arr2 := strings.Split(v, "=")
if len(Arr2) != 2 {
continue
}
if Color == Arr2[0] {
NewLv, _ := strconv.Atoi(Arr2[1])
return NewLv
}
}
return 0
}

View File

@ -644,7 +644,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
//领取订单奖励
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder) // 领取订单奖励
RegisterMsgProcessFunc("ReqDelOrder", ReqDelOrder) // 删除订单
//装饰
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
RegisterMsgProcessFunc("ReqDecorateAll", ReqDecorateAll) // 装饰全部

View File

@ -5,6 +5,7 @@ import (
"math"
"server/GoUtil"
mergeDataCfg "server/conf/mergeData"
orderCfg "server/conf/order"
"server/game/mod/item"
"server/game/mod/quest"
"server/msg"
@ -168,6 +169,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
TriggerList = append(TriggerList, &quest.Trigger{Label: quest.TRIGGER_LABEL_MERGELVTIME, A: []interface{}{NewChessIdLv}})
TriggerList = append(TriggerList, &quest.Trigger{Label: quest.TRIGGER_LABEL_MERGETIME})
player.PushClientRes(HandbookMod.BackData())
triggerComposeChess(player, NewChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList())
// 获取活动道具
ActItem := GetActivityItem(player, GoUtil.Int32ToInt(v.ActType))
itemList = item.Merge(itemList, ActItem)
@ -180,6 +182,9 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
itemList = append(itemList, &item.Item{Id: item.ITEM_STAR_ID, Num: int(-loseGold)})
case msg.HANDLE_TYPE_SELL: //出售棋子
items, err := ChessMod.SellChess(ChessId)
if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
}
if err != nil {
return err
}
@ -219,3 +224,43 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
func (p *PlayerChessData) ClearData() bool {
return true
}
func checkChess(ChessId, EnergyMul int, Emit []int) bool {
ChessIdLv := mergeDataCfg.GetLvById(ChessId)
ChessIdColor := mergeDataCfg.GetColorById(ChessId)
EmitId := 0
for _, v := range Emit {
ProduceColor := mergeDataCfg.GetEmitProduceType(v)
if GoUtil.InStringArray(ChessIdColor, ProduceColor) {
EmitId = v
break
}
}
Min, Max := getChesslvRange(EmitId, EnergyMul)
Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor)
if ChessIdLv < Min-Adjust || ChessIdLv > Max-Adjust {
return true
}
return false
}
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
RandEmitLv := mergeDataCfg.GetLvById(Emit)
EmitId := mergeDataCfg.GetEmitId(Emit)
RandMaxLv := mergeDataCfg.GetMaxLvById(Emit)
RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId)
Ratio := mergeDataCfg.GetEmitRatio(EmitId)
m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100)
ChessMinLev := orderCfg.GetLvMin(EnergyMul)
ChessMaxLev := orderCfg.GetLvMax(EnergyMul, m)
return ChessMinLev, ChessMaxLev
}
func triggerComposeChess(player *Player, ChessId, EnergyMul int, Emit []int) {
if !checkChess(ChessId, EnergyMul, Emit) {
return
}
OrderMod := player.PlayMod.getOrderMod()
OrderMod.CreateCleanOrder2([]int{ChessId})
player.PushClientRes(OrderMod.BackData())
}

View File

@ -335,6 +335,29 @@ func ReqRewardOrder(args []interface{}) error {
BackChampship(player)
player.PushClientRes(LimitedTimeEventMod.BackData())
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
player.PushClientRes(&msg.ResRewardOrder{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}
func ReqDelOrder(args []interface{}) error {
_, player, buf := ParseArgs(args)
req := &msg.ReqDelOrder{}
proto.Unmarshal(buf, req)
OrderMod := player.PlayMod.getOrderMod()
err := OrderMod.DelOrder(int(req.OrderId))
if err != nil {
player.SendErrClienRes(&msg.ResDelOrder{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.PushAndSendClienRes(&msg.ResDelOrder{
Code: msg.RES_CODE_SUCCESS,
})
player.PushClientRes(OrderMod.BackData())
return nil
}

View File

@ -414,18 +414,7 @@ func (cb *ChessBorad) TakeChessOutBag(Grid int) error {
}
func (cb *ChessBorad) GetOrderEmit() []int {
r := make([]int, 0)
for k, v := range cb.EmitList {
if v <= 0 {
continue
}
EmitId := mergeDataCfg.GetEmitId(k)
if cb.Retire[EmitId] > 0 {
continue
}
r = append(r, k)
}
return r
return cb.GetEmitList()
}
func (cb *ChessBorad) GetRetireEmit() map[string]int {

View File

@ -41,6 +41,7 @@ const (
Preheat_type = 4 // 预热订单
Trigger_type = 5 // 触发订单
Clean_type = 6 // 清理订单
Clean_Order_type = 7 // 清理无法生成订单的棋子
diff_low = 1 // 低难度
diff_mid = 2 // 中难度
@ -397,6 +398,11 @@ func (o *OrderMod) CreateCleanOrder(ChessList []int) bool {
return true
}
func (o *OrderMod) CreateCleanOrder2(ChessList []int) bool {
o.addOrder(ChessList, diff_low, Clean_Order_type)
return true
}
func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, EnergyMul int) bool {
GetExtraEmitId := mergeDataCfg.GetExtraEmitId()
b1 := false
@ -537,3 +543,15 @@ func (o *OrderMod) Retire(EmitId string) {
o.ChessPool = ChessPool
o.EmitShuffle = nil
}
func (o *OrderMod) DelOrder(OrderId int) error {
Order, ok := o.OrderList[OrderId]
if !ok {
return fmt.Errorf("order not exist")
}
if Order.Type != Clean_Order_type {
return fmt.Errorf("order type wrong")
}
delete(o.OrderList, OrderId)
return nil
}

File diff suppressed because it is too large Load Diff