消耗品订单优化

This commit is contained in:
hahwu 2025-10-14 10:46:23 +08:00
parent b49d7dbec3
commit 2149ee404b
5 changed files with 126 additions and 65 deletions

View File

@ -568,14 +568,59 @@ func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem {
log.Debug("GetOrderItem Id is 0, Type:%v", Type)
continue
}
GradeStr := gamedata.GetStringValue(v, "Grade")
Grade := make([]int, 0)
for _, v1 := range strings.Split(GradeStr, ",") {
v2 := GoUtil.Int(v1)
if v2 > 0 {
Grade = append(Grade, v2)
}
}
r[Type] = append(r[Type], gamedata.PetOrderItem{
Id: Id,
Star: ItemStar,
Grade: Grade,
})
}
return r
}
func GetOrderItemByGrade(Grade int) map[int][]int {
data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM)
if err != nil {
log.Debug("GetOrderItemByGrade err:%v", err)
return nil
}
r := make(map[int][]int)
for k, v := range data {
GradeStr := gamedata.GetStringValue(v, "Grade")
GradeList := make([]int, 0)
for _, v1 := range strings.Split(GradeStr, ",") {
v2 := GoUtil.Int(v1)
if v2 > 0 {
GradeList = append(GradeList, v2)
}
}
if !GoUtil.InArray(Grade, GradeList) {
continue
}
Id := GoUtil.Int(k)
Type := gamedata.GetIntValue(v, "Type")
if Type == 0 {
continue
}
if _, ok := r[Type]; !ok {
r[Type] = make([]int, 0)
}
if Id == 0 {
log.Debug("GetOrderItemByGrade Id is 0, Type:%v", Type)
continue
}
r[Type] = append(r[Type], Id)
}
return r
}
func GetOrderItemList() []int {
data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM)
if err != nil {

View File

@ -1169,7 +1169,7 @@ func (player *Player) CreateNormalOrder() {
}
Items := make([]*item.Item, 0)
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
// Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
Items = player.GetPetOrderReward(Star, Items)
if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID {
v.Type = order.Common_type
@ -1267,63 +1267,33 @@ func (player *Player) InitOrderItem() {
}
}
func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item {
OrderItem := playroomCfg.GetOrderItem(Star)
type sortData struct {
Type int
Num int
HighNum := Star / 225
if HighNum > 0 {
HighNum = min(HighNum, 3)
Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_HIGH_ID, HighNum))
Star -= HighNum * 225
}
ItemMod := player.PlayMod.getItemMod()
sortList := make([]sortData, 0)
for k, v := range OrderItem {
ids := make([]int, 0)
for _, v1 := range v {
if v1.Id == 0 {
continue
MidNum := Star / 150
if MidNum > 0 {
MidNum = min(MidNum, 3)
Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_MID_ID, MidNum))
Star -= MidNum * 150
}
ids = append(ids, v1.Id)
}
Num := ItemMod.GetItemNumByList(ids)
sortList = append(sortList, sortData{
Type: k,
Num: Num,
})
}
if len(sortList) == 0 && Star > 0 {
if len(Items) >= 2 {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Star))
return Items
}
sort.Slice(sortList, func(i, j int) bool {
return sortList[i].Num < sortList[j].Num
})
ItemsId := OrderItem[sortList[0].Type]
if len(ItemsId) == 0 {
LowNum := Star / 75
if LowNum > 0 {
LowNum = min(LowNum, 3)
Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_LOW_ID, LowNum))
Star -= LowNum * 75
}
if Star > 0 {
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Star))
}
return Items
}
for k, v := range ItemsId {
ItemNum := ItemMod.GetItem(v.Id)
for _, v1 := range Items {
if v1.Id == v.Id {
ItemNum += v1.Num
}
}
v.Num = ItemNum
ItemsId[k] = v
}
sort.Slice(ItemsId, func(i, j int) bool {
return ItemsId[i].Num < ItemsId[j].Num
})
Items = append(Items, item.NewItem(ItemsId[0].Id, 1))
Star -= ItemsId[0].Star
if Star <= 0 {
return Items
}
if len(Items) >= 2 {
return Items
}
return player.GetPetOrderReward(Star, Items)
}
func ExcludeCardStar(CardList []int) []int {
@ -1489,3 +1459,41 @@ func (p *Player) AddHighOrder2() {
}
}
}
func (p *Player) FormatPetOrderItem(Items []*item.Item) []*item.Item {
NewItems := make([]*item.Item, 0)
PlayroomMod := p.PlayMod.getPlayroomMod()
for _, v := range Items {
if v.Id != item.ITEM_PLAYROOM_BOX_LOW_ID && v.Id != item.ITEM_PLAYROOM_BOX_MID_ID && v.Id != item.ITEM_PLAYROOM_BOX_HIGH_ID {
NewItems = append(NewItems, v)
continue
}
var OrderItem map[int][]int
switch v.Id {
case item.ITEM_PLAYROOM_BOX_LOW_ID:
OrderItem = playroomCfg.GetOrderItemByGrade(1)
case item.ITEM_PLAYROOM_BOX_MID_ID:
OrderItem = playroomCfg.GetOrderItemByGrade(2)
default:
OrderItem = playroomCfg.GetOrderItemByGrade(3)
}
feed := PlayroomMod.GetPhysiology(playroom.PHYSIOLOGY_TYPE_FEED)
if feed.Num <= 1 {
RandList := OrderItem[1]
NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1))
continue
}
clean := PlayroomMod.GetPhysiology(playroom.PHYSIOLOGY_TYPE_CLEAN)
if clean.Num <= 5 {
RandList := OrderItem[2]
NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1))
continue
}
RandList := make([]int, 0)
for _, v1 := range OrderItem {
RandList = append(RandList, v1...)
}
NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1))
}
return NewItems
}

View File

@ -235,6 +235,9 @@ func ReqRewardOrder(player *Player, buf []byte) error {
ChessMod := player.PlayMod.getChessMod()
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
if OrderType == order.Pet_type {
Item = player.FormatPetOrderItem(Item)
}
ActItem := GetActivityItem(player, GoUtil.Int32ToInt(req.ActType))
Item = item.Merge(Item, ActItem)
if !OrderMod.CheckSuperOrder() {

View File

@ -25,6 +25,9 @@ const (
ITEM_LAUNCHER_lOW_ID = 1601
ITEM_ENERGY_GIFT_ID = 562
ITEM_DIAMOND_LV2_ID = 502
ITEM_PLAYROOM_BOX_LOW_ID = 101445
ITEM_PLAYROOM_BOX_MID_ID = 101446
ITEM_PLAYROOM_BOX_HIGH_ID = 101447
)
const (
@ -52,6 +55,7 @@ const (
ITEM_TYPE_PLAYROOM_DRESS = 112 // playroom服饰
ITEM_TYPE_PLAYROOM_DECORATION_SET = 113 // playroom装饰套装
ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装
ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱
)
func (i *ItemMod) InitData() {

View File

@ -65,4 +65,5 @@ type PetOrderItem struct {
Id int
Star int
Num int
Grade []int
}