diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index c8acf6c4..1bfa56fa 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -61,6 +61,28 @@ func GetOrderNum(Level int) int { return 0 } +func GetStartOrderList() []*gamedata.StartOrderData { + ret := make([]*gamedata.StartOrderData, 0) + data, err := gamedata.GetData(CFG_START_ORDER) + if err != nil { + return ret + } + for k, v := range data { + OrderId, _ := strconv.Atoi(k) + ret = append(ret, &gamedata.StartOrderData{ + Id: OrderId, + MergeList: gamedata.GetIntSliceValue(v, "merge_id_list"), + Appear: gamedata.GetStringValue(v, "appear"), + Preview: gamedata.GetStringValue(v, "preview"), + Items: gamedata.GetItemList(v, "reward"), + }) + } + sort.Slice(ret, func(i, j int) bool { + return ret[i].Id < ret[j].Id + }) + return ret +} + func GetStartOrderByStep(id int) []*gamedata.StartOrderData { ret := make([]*gamedata.StartOrderData, 0) data, err := gamedata.GetData(CFG_START_ORDER) diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index 7df2606b..8d1aab46 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -22,6 +22,7 @@ import ( "server/game/mod/friend" "server/game/mod/item" MsgMod "server/game/mod/msg" + "server/game/mod/order" "server/game/mod/playroom" "server/msg" "server/pkg/github.com/name5566/leaf/log" @@ -90,6 +91,8 @@ func ReqGmCommand_(player *Player, Command string) error { player.PushClientRes(player.PlayerBaseMod.BackAsset()) player.initAcitivity() player.PlayMod.getGuideTaskMod().Unlock(num) + player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV) + player.PushClientRes(player.PlayMod.getOrderMod().BackData()) player.BackDataActivity() case "zeroUpdate": VarMod := player.PlayMod.getVarMod() diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 83e7e0cb..183442cd 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -975,7 +975,9 @@ func (player *Player) GetPetOrderItemExp() int { return playroomCfg.GetPetOrderItemExpByList(itemList) } +// 弃用 func (player *Player) FormatOrderReward() { + return Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) BaseMod := player.PlayMod.getBaseMod() DecorateMod := player.PlayMod.getDecorateMod() diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index cba737b3..e9fc9c81 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -230,26 +230,10 @@ func ReqRewardOrder(player *Player, buf []byte) error { proto.Unmarshal(buf, req) OrderMod := player.PlayMod.getOrderMod() ChessMod := player.PlayMod.getChessMod() - PlayroomMod := player.PlayMod.getPlayroomMod() LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId)) ActItem := GetActivityItem(player, GoUtil.Int32ToInt(req.ActType)) Item = item.Merge(Item, ActItem) - if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具 - Item1 := PlayroomMod.GetReward() - Item = item.Merge(Item, Item1) - IdList := playroomCfg.GetPremiumItem() - if GoUtil.InArray(Item[0].Id, IdList) { - Star = int(math.Ceil(float64(Star) * 0.8)) - } else { - Star = int(math.Ceil(float64(Star) * 0.6)) - } - Target := GetVisitorPlayer(player) - PlayroomMod.Target = Target - PlayroomMod.Status = playroom.STATUS_VISIT - PlayroomBackData(player) - } - if !OrderMod.CheckSuperOrder() { if LimitedTimeEventMod.RemoveSuperOrder() { player.PushClientRes(&msg.LimitEventNotify{ @@ -359,6 +343,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { } else { OrderMod.CreateOrderSeed(NewOrder) } + OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER) player.FormatOrderReward() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index b07daa8f..5589d2e2 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -8,6 +8,7 @@ import ( orderCfg "server/conf/order" "server/game/mod/item" "server/msg" + "strings" "time" ) @@ -23,6 +24,7 @@ type OrderMod struct { EmitShuffle []string // 发射器乱序 ChessPool []int // 棋子池 OrderPool map[int]*Order // 订单池 + FinishOrder []int // 已完成订单 } type Order struct { @@ -47,10 +49,15 @@ const ( COMFORT_TYPE = 9 // 安慰订单 Guide_type = 10 // 引导订单 Pet_type = 11 // 宠物订单 + Preview_type = 12 // 预览订单 + Fixed_type = 13 // 固定订单 DIFF_LOW = 1 // 低难度 DIFF_MID = 2 // 中难度 DIFF_HIGH = 3 // 高难度 + + TRIGGER_TYPE_ORDER = "Order" // 订单触发器 + TRIGGER_TYPE_LV = "Lv" // 等级触发器 ) func (o *OrderMod) InitData() { @@ -63,23 +70,9 @@ func (o *OrderMod) InitData() { if o.OrderPool == nil { o.OrderPool = make(map[int]*Order) } - if o.Step == 0 { + if len(o.OrderList) == 0 { o.OrderList = make(map[int]Order) - Cfg := orderCfg.GetStartOrderByStep(o.Step + 1) - o.Step = 1 - o.Auto_id = 0 - o.LastDiff = DIFF_LOW - for _, v := range Cfg { - star := GetOrderStar(v.MergeList) - Items := make([]*item.Item, 0) - Items = append(Items, item.NewItem(item.ITEM_STAR_ID, star)) - o.Auto_id++ - o.OrderList[o.Auto_id] = Order{ - Type: Common_type, - MergeId: v.MergeList, - Items: Items, - } - } + o.TriggerOrder(1, TRIGGER_TYPE_ORDER) } for k, v := range o.OrderList { if GoUtil.InArray(0, v.MergeId) || len(v.MergeId) == 0 { @@ -112,6 +105,9 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) { if v.Type == Guide_type { return nil, v.MergeId, v.Type, 0, nil } + if v.Type == Fixed_type { + o.FinishOrder = append(o.FinishOrder, id) + } return ItemList, v.MergeId, v.Type, Star, nil } return ItemList, MergeList, 0, 0, fmt.Errorf("订单不存在, 订单id%d", id) @@ -169,8 +165,73 @@ func (o *OrderMod) CreatOrderPool(lv int, Emit []int, EnergyMul int) error { return nil } +// 触发生成新的固定订单 +func (o *OrderMod) TriggerOrder(lv int, Type string) error { + TriggerOrderList := orderCfg.GetStartOrderList() + for _, v := range TriggerOrderList { + if GoUtil.InArray(v.Id, o.FinishOrder) { + continue + } + orderInfo, exists := o.OrderList[v.Id] + if exists && v.Preview == "" { + continue + } + if v.Preview != "" && !exists { + if o.CheckCondition(lv, v.Preview, Type) { + o.addFixOrder(v.Id, v.MergeList, Preview_type, v.Items) + } + } + if v.Appear != "" { + if o.CheckCondition(lv, v.Appear, Type) { + if exists { + orderInfo.Type = Fixed_type + o.OrderList[v.Id] = orderInfo + } else { + o.addFixOrder(v.Id, v.MergeList, Fixed_type, v.Items) + } + } + } + } + return nil +} + +func (o *OrderMod) CheckCondition(lv int, condition, Type string) bool { + r1 := strings.Split(condition, "|") + for _, v := range r1 { + r2 := strings.Split(v, "=") + switch r2[0] { + case "Finish": + id := GoUtil.Int(r2[1]) + if !GoUtil.InArray(id, o.FinishOrder) && id != 0 { + return false + } + if id == 0 && Type != TRIGGER_TYPE_ORDER { + return false + } + case "Lv": + id := GoUtil.Int(r2[1]) + if lv < id { + return false + } + case "OrderNum": + id := GoUtil.Int(r2[1]) + if len(o.OrderList) != id { + return false + } + case "Order": + id := GoUtil.Int(r2[1]) + _, ok := o.OrderList[id] + if !GoUtil.InArray(id, o.FinishOrder) && !ok { + return false + } + } + } + return true +} + // 生成新订单 func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error { + return nil if len(Emit) == 0 { return nil } @@ -384,7 +445,15 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { o.addOrder(mergeList, OrderDiff, Super_type) return nil } - +func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { + Order := Order{ + MergeId: ChessList, + Type: Type, + Timestamp: time.Now().Unix(), + Items: Items, + } + o.OrderList[Id] = Order +} func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.Auto_id++ Star := GetOrderStar(ChessList) diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index 83eccbad..ad0d2338 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -19,9 +19,12 @@ type MergeDataRecord struct { } type StartOrderData struct { - Id int `json:"Id"` - MergeList []int `json:"merge_id_list"` - Step int `json:"step"` + Id int `json:"Id"` + MergeList []int `json:"merge_id_list"` + Step int `json:"step"` + Appear string `json:"appear"` + Preview string `json:"preview"` + Items []*item.Item } type SevenLoginRewardData struct {