高级产物处理机制
This commit is contained in:
parent
156b9da2d3
commit
1e091de9b3
@ -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
|
||||
}
|
||||
|
||||
@ -644,7 +644,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
|
||||
//领取订单奖励
|
||||
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder) // 领取订单奖励
|
||||
|
||||
RegisterMsgProcessFunc("ReqDelOrder", ReqDelOrder) // 删除订单
|
||||
//装饰
|
||||
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
|
||||
RegisterMsgProcessFunc("ReqDecorateAll", ReqDecorateAll) // 装饰全部
|
||||
|
||||
@ -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())
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
Loading…
Reference in New Issue
Block a user