固定订单

This commit is contained in:
hahwu 2025-08-26 11:36:36 +08:00
parent bedc0fdbdc
commit 2446ba6a23
6 changed files with 120 additions and 36 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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)

View File

@ -22,6 +22,9 @@ type StartOrderData struct {
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 {