宠物订单

This commit is contained in:
hahwu 2025-05-30 15:03:29 +08:00
parent 43da244384
commit 6c95148a63
10 changed files with 168 additions and 22 deletions

View File

@ -11,12 +11,14 @@ const (
DECORATE_COST = "DecorateCost"
INDOOR_PROGRESS = "IndoorProgress"
DECORATE_CONST = "DecorateConst"
DECORATE_AREA = "DecorateArea" // 装饰区域
)
func init() {
gamedata.InitCfg(DECORATE_COST)
gamedata.InitCfg(INDOOR_PROGRESS)
gamedata.InitCfg(DECORATE_CONST)
gamedata.InitCfg(DECORATE_AREA)
}
func GetStarCost(AreaId, SortId int) int {
@ -105,3 +107,12 @@ func GetOneKeyDecorateUnlockLv() int {
}
return gamedata.GetIntValue(data, "Value")
}
func GetAreaPerPExp(AreaId int) int {
data, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId)
if err != nil {
log.Debug("DecorateArea GetAreaPerPExp not found AreaId:%v", AreaId)
return 0
}
return gamedata.ParseInt(data["PerPExp"])
}

View File

@ -21,6 +21,7 @@ const (
CFG_PLAYROOM_DAILYTASK = "PlayroomDailyTask"
CFG_PLAYROOM_DAILYTASKREWARD = "PlayroomDailyTaskReward"
CFG_PLAYROOM_TASKJACKPOT = "PlayroomTaskJackpot"
CFG_PLAYROOM_ORDERITEM = "PlayroomOrderItem" // 订单物品
)
func init() {
@ -36,6 +37,7 @@ func init() {
gamedata.InitCfg(CFG_PLAYROOM_DAILYTASK)
gamedata.InitCfg(CFG_PLAYROOM_DAILYTASKREWARD)
gamedata.InitCfg(CFG_PLAYROOM_TASKJACKPOT)
gamedata.InitCfg(CFG_PLAYROOM_ORDERITEM)
}
func GetShopItem(Id int) (int, []*item.Item) {
@ -517,3 +519,32 @@ func GetPhysiologyList(MoodType int) []int {
func GetInteractIdBath() []int {
return []int{11, 12, 13}
}
func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem {
data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM)
if err != nil {
log.Debug("GetOrderItem err:%v", err)
return nil
}
r := make(map[int][]gamedata.PetOrderItem)
for k, v := range data {
ItemStar := gamedata.GetIntValue(v, "Star")
if ItemStar > 0 && ItemStar > Star {
continue
}
Id := GoUtil.Int(k)
Type := gamedata.GetIntValue(v, "Type")
if _, ok := r[Type]; !ok {
r[Type] = make([]gamedata.PetOrderItem, 0)
}
if Id == 0 {
log.Debug("GetOrderItem Id is 0, Type:%v", Type)
continue
}
r[Type] = append(r[Type], gamedata.PetOrderItem{
Id: Id,
Star: ItemStar,
})
}
return r
}

View File

@ -14,7 +14,7 @@
"AppPath": "./app",
"TELOGDIR" : "./teLog/",
"GameName": "pet_home_local",
"GameName": "Merge_Pet_Local",
"ServerType":"node",

View File

@ -10,8 +10,11 @@ import (
"server/conf"
cardCfg "server/conf/card"
chargeCfg "server/conf/charge"
decorateCfg "server/conf/decorate"
mailCfg "server/conf/mail"
mergeDataCfg "server/conf/mergeData"
playroomCfg "server/conf/playroom"
userCfg "server/conf/user"
"server/db"
"server/game/mod/card"
"server/game/mod/friend"
@ -838,5 +841,97 @@ func NotifyChampshipResult(Uid, Rank int) {
}
FriendMgrSend(Msg)
}
}
func (player *Player) FormatOrderReward() {
Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel())
BaseMod := player.PlayMod.getBaseMod()
DecorateMod := player.PlayMod.getDecorateMod()
ExpCoin := (Exp - BaseMod.GetExp()) * decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId())
PExpCoin := (PExp - BaseMod.GetPExp()) * 50
OrderMod := player.PlayMod.getOrderMod()
if ExpCoin > PExpCoin {
for k, v := range OrderMod.GetOrderList() {
if v.Type != order.Common_type {
continue
}
Star := order.GetOrderStar(v.MergeId)
v.Items = append(v.Items, &item.Item{
Id: item.ITEM_STAR_ID,
Num: Star,
})
OrderMod.OrderList[k] = v
}
return
}
for k, v := range OrderMod.GetOrderList() {
if v.Type != order.Common_type {
continue
}
Items := make([]*item.Item, 0)
Star := order.GetOrderStar(v.MergeId)
Items = player.GetPetOrderReward(Star, Items)
if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID {
v.Type = order.Common_type
} else {
v.Type = order.Pet_type
}
v.Items = Items
OrderMod.OrderList[k] = v
}
}
func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item {
OrderItem := playroomCfg.GetOrderItem(Star)
type sortData struct {
Type int
Num int
}
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
}
ids = append(ids, v1.Id)
}
Num := ItemMod.GetItemNumByList(ids)
sortList = append(sortList, sortData{
Type: k,
Num: Num,
})
}
if len(sortList) == 0 && Star > 0 {
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 {
return Items
}
for k, v := range ItemsId {
ItemNum := ItemMod.GetItem(v.Id)
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)
}

View File

@ -136,6 +136,7 @@ func RegSetEneryFunc(player *Player, buf []byte) error {
Emit := player.PlayMod.getChessMod().GetOrderEmit()
ChessList := player.PlayMod.getChessMod().GetUnlockChessList()
OrderMod.ChangeEnergyMul(Lv, Emit, int(req.EnergyMul), ChessList)
player.FormatOrderReward()
player.PushClientRes(OrderMod.BackData())
player.PushClientRes(player.PlayMod.getBaseMod().BackData())
return nil
@ -345,6 +346,7 @@ func ReqRewardOrder(player *Player, buf []byte) error {
} else {
OrderMod.CreateOrderSeed(NewOrder)
}
player.FormatOrderReward()
// 存钱罐增加钻石
PiggyBankMod := player.PlayMod.getPiggyBankMod()
PiggyBankMod.Trigger()

View File

@ -230,3 +230,8 @@ func UnitPlayroomOrder(p *Player) error {
PlayroomMod.CreateOrderReward(100, p.PlayMod.getItemMod())
return nil
}
func UnitPetOrder(p *Player) error {
p.FormatOrderReward()
return nil
}

View File

@ -121,6 +121,9 @@ func (b *Base) GetLevel() int {
func (b *Base) GetExp() int {
return b.Exp
}
func (b *Base) GetPExp() int {
return b.PExp
}
func (b *Base) GetStar() int {
return b.Star

View File

@ -32,6 +32,7 @@ type Order struct {
Timestamp int64 // 时间戳
Q int
S int
Items []*item.Item // 奖励物品
}
const (
@ -45,6 +46,7 @@ const (
Clean_type2 = 8 // 棋盘空格不足清理棋子的订单
COMFORT_TYPE = 9 // 安慰订单
Guide_type = 10 // 引导订单
Pet_type = 11 // 宠物订单
DIFF_LOW = 1 // 低难度
DIFF_MID = 2 // 中难度
@ -101,7 +103,7 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) {
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
ItemList = append(ItemList, Items...)
} else {
ItemList = append(ItemList, &item.Item{Id: item.ITEM_STAR_ID, Num: Star})
ItemList = v.Items
}
if v.Type == Guide_type {
return nil, v.MergeId, v.Type, 0, nil
@ -379,19 +381,26 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error {
return nil
}
func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) {
func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int {
o.Auto_id++
Star := GetOrderStar(ChessList)
Items := make([]*item.Item, 0)
if Type != Common_type {
Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)}
}
Order := Order{
MergeId: ChessList,
Diff: Diff,
Type: Type,
Timestamp: time.Now().Unix(),
Items: Items,
}
o.OrderList[o.Auto_id] = Order
if Type == Common_type {
o.LastNormalOrder = Order
}
o.LastDiff = Diff
return o.Auto_id
}
func (o *OrderMod) CreateCleanOrder(ChessList []int) bool {
@ -441,23 +450,6 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ
o.addOrder([]int{ChessId}, DIFF_LOW, Preheat_type)
}
}
// //额外订单补充2当玩家的棋盘中出现三个相同的满级产物时立刻生成一个对应的收购订单
// for k := range MaxLvChess {
// ChessNum := GoUtil.GetElemNum(ChessList, k)
// OrderChess := 0
// for _, order := range o.OrderList {
// for _, v := range order.MergeId {
// if v == k {
// OrderChess++
// }
// }
// }
// OrderNum := (ChessNum - OrderChess) / 3
// for i := 0; i < OrderNum; i++ {
// b1 = true
// o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type)
// }
// }
return b1
}
@ -470,6 +462,7 @@ func (o *OrderMod) BackData() *msg.ResOrderList {
Id: int32(k),
ChessId: mergeList,
Type: int32(v.Type),
Items: item.ItemToMsg(v.Items),
}
OrderList = append(OrderList, Order)
}

View File

@ -411,7 +411,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
}
// 订单能获取的宠物币
func getOrderStar(ChessList []int) int {
func GetOrderStar(ChessList []int) int {
Star := 0
for _, v := range ChessList {
Star += mergeDataCfg.GetStarById(v)

View File

@ -56,3 +56,9 @@ type LimitedTimeEventData struct {
EventId int
Duration int64
}
type PetOrderItem struct {
Id int
Star int
Num int
}