playroom优化

This commit is contained in:
hahwu 2025-05-16 16:26:10 +08:00
parent a7fef8e6f1
commit b4dfeb2a09
7 changed files with 119 additions and 63 deletions

View File

@ -5,6 +5,7 @@ import (
"server/game/mod/item" "server/game/mod/item"
"server/gamedata" "server/gamedata"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"strings"
) )
const ( const (
@ -101,28 +102,82 @@ func GetTriggerCd() int {
return gamedata.GetIntValue(data, "Value") return gamedata.GetIntValue(data, "Value")
} }
func GetNormalItem() (int, int) { func GetFoodItem() []int {
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId") r := make([]int, 0)
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Food")
if err != nil { if err != nil {
return 0, 0 return []int{}
} }
data2, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalCleanId") for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
if err != nil { if v == "" {
return 0, 0 continue
}
Id := GoUtil.Int(v)
r = append(r, Id)
} }
return gamedata.GetIntValue(data1, "Value"), gamedata.GetIntValue(data2, "Value") return r
} }
func GetPremiumItem() (int, int) { func GetCleanItem() []int {
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "PremiumFoodId") r := make([]int, 0)
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Clean")
if err != nil { if err != nil {
return 0, 0 return []int{}
} }
data2, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "PremiumCleanId") for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
if v == "" {
continue
}
Id := GoUtil.Int(v)
r = append(r, Id)
}
return r
}
func GetToyItem() []int {
r := make([]int, 0)
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Clean")
if err != nil { if err != nil {
return 0, 0 return []int{}
} }
return gamedata.GetIntValue(data1, "Value"), gamedata.GetIntValue(data2, "Value") for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
if v == "" {
continue
}
Id := GoUtil.Int(v)
r = append(r, Id)
}
return r
}
func GetDailyItem() []int {
r := make([]int, 0)
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Daily")
if err != nil {
return []int{}
}
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
if v == "" {
continue
}
Id := GoUtil.Int(v)
r = append(r, Id)
}
return r
}
func GetPremiumItem() []int {
r := make([]int, 0)
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "PremiumItem")
if err != nil {
return []int{}
}
for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") {
if v == "" {
continue
}
Id := GoUtil.Int(v)
r = append(r, Id)
}
return r
} }
func GetVisitorItem() int { func GetVisitorItem() int {

View File

@ -275,6 +275,19 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) {
}) })
} }
func (ad *GameLogic) GetUserData(Uid int) *VarUserData {
result, err := ad.FriendMgr.Call(&MsgMod.Msg{
From: Uid,
To: Uid,
Type: MsgMod.HANDLE_TYPE_VAR_USER_GET,
SendT: GoUtil.Now(),
})
if err != nil {
return &VarUserData{}
}
return result.(*VarUserData)
}
func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} { func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} {
result, err := ad.FriendMgr.Call(m) result, err := ad.FriendMgr.Call(m)
if err != nil { if err != nil {

View File

@ -3,7 +3,6 @@ package game
import ( import (
"server/GoUtil" "server/GoUtil"
"server/game/mod/item" "server/game/mod/item"
"server/game/mod/msg"
proto "server/msg" proto "server/msg"
) )
@ -127,18 +126,9 @@ func PlayroomVisit(p *Player, Uid int) {
r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList) r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList)
r.Items = Items r.Items = Items
r.Status = int32(PlayroomMod.GameStatus) r.Status = int32(PlayroomMod.GameStatus)
data := FriendMgrCall(&msg.Msg{ data := G_GameLogicPtr.GetUserData(Uid)
From: int(p.M_DwUin), r.UpvoteCount = int32(data.Upvote)
To: Uid, r.Chip = int32(data.Chip)
Type: msg.HANDLE_TYPE_VAR_USER_GET,
})
if data == nil {
data = &VarUserData{
Upvote: 0,
}
}
r.UpvoteCount = int32(data.(*VarUserData).Upvote)
r.Chip = int32(data.(*VarUserData).Chip)
r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet) r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet)
p.PushClientRes(r) p.PushClientRes(r)

View File

@ -223,8 +223,8 @@ func ReqRewardOrder(player *Player, buf []byte) error {
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具 if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
Item1 := PlayroomMod.GetReward() Item1 := PlayroomMod.GetReward()
Item = item.Merge(Item, Item1) Item = item.Merge(Item, Item1)
P1, P2 := playroomCfg.GetPremiumItem() IdList := playroomCfg.GetPremiumItem()
if P1 == Item1[0].Id || P2 == Item1[0].Id { if GoUtil.InArray(Item[0].Id, IdList) {
Star = int(math.Ceil(float64(Star) * 0.8)) Star = int(math.Ceil(float64(Star) * 0.8))
} else { } else {
Star = int(math.Ceil(float64(Star) * 0.6)) Star = int(math.Ceil(float64(Star) * 0.6))
@ -3252,6 +3252,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Extra: Items, Extra: Items,
}) })
G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
PlayroomMod.ResetGame() PlayroomMod.ResetGame()
player.PlayMod.save() player.PlayMod.save()
PlayroomBackData(player) PlayroomBackData(player)
@ -3440,7 +3441,6 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
SendT: GoUtil.Now(), SendT: GoUtil.Now(),
Extra: Items, Extra: Items,
}) })
G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
player.PlayMod.save() player.PlayMod.save()
PlayroomBackData(player) PlayroomBackData(player)
player.PushClientRes(&msg.ResPlayroomFlipReward{ player.PushClientRes(&msg.ResPlayroomFlipReward{

View File

@ -86,7 +86,9 @@ func (f *VarMgr) GetUserVar(key string) *VarUserData {
if v, ok := f.getData().UserVar[key]; ok { if v, ok := f.getData().UserVar[key]; ok {
return v return v
} }
return &VarUserData{} data := &VarUserData{}
f.getData().UserVar[key] = data
return data
} }
func (f *VarMgr) DelVar(key string) { func (f *VarMgr) DelVar(key string) {

View File

@ -76,6 +76,14 @@ func (i *ItemMod) GetItem(id int) int {
return i.Data[id] return i.Data[id]
} }
func (i *ItemMod) GetItemNumByList(IdList []int) int {
var num int
for _, id := range IdList {
num += i.Data[id]
}
return num
}
func (i *ItemMod) CheckItem(id, num int) bool { func (i *ItemMod) CheckItem(id, num int) bool {
return i.Data[id] >= num return i.Data[id] >= num
} }

View File

@ -2,7 +2,6 @@ package playroom
import ( import (
"fmt" "fmt"
"math"
"server/GoUtil" "server/GoUtil"
limitedTimeEventCfg "server/conf/limitedTimeEvent" limitedTimeEventCfg "server/conf/limitedTimeEvent"
playroomCfg "server/conf/playroom" playroomCfg "server/conf/playroom"
@ -333,40 +332,29 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
return return
} }
p.Reward = make([]*item.Item, 0) p.Reward = make([]*item.Item, 0)
NormalFoodId, NormalCleanId := playroomCfg.GetNormalItem() FoodItem := playroomCfg.GetFoodItem()
PremiumFoodId, PremiumCleanId := playroomCfg.GetPremiumItem() CleanItem := playroomCfg.GetCleanItem()
ToyItem := playroomCfg.GetToyItem()
DailyItem := playroomCfg.GetDailyItem()
NormalFoodNum := itemMod.GetItem(NormalFoodId) FoodItemNum := itemMod.GetItemNumByList(FoodItem)
NormalCleanNum := itemMod.GetItem(NormalCleanId) CleanItemNum := itemMod.GetItemNumByList(CleanItem)
ToyItemNum := itemMod.GetItemNumByList(ToyItem)
DailyItemNum := itemMod.GetItemNumByList(DailyItem)
type d struct {
Id []int
Num int
}
sortList := make([]d, 0)
sortList = append(sortList, d{Id: FoodItem, Num: FoodItemNum})
sortList = append(sortList, d{Id: CleanItem, Num: CleanItemNum})
sortList = append(sortList, d{Id: ToyItem, Num: ToyItemNum})
sortList = append(sortList, d{Id: DailyItem, Num: DailyItemNum})
sort.Slice(sortList, func(i, j int) bool {
return sortList[i].Num < sortList[j].Num
})
PremiumFoodNum := itemMod.GetItem(PremiumFoodId) Prob := GoUtil.RandSlice(sortList[0].Id)
PremiumCleanNum := itemMod.GetItem(PremiumCleanId)
p.TriggerTime = GoUtil.Now()
if NormalFoodNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: NormalFoodId, Num: 1})
return
}
if NormalCleanNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: NormalCleanId, Num: 1})
return
}
if PremiumFoodNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: PremiumFoodId, Num: 1})
return
}
if PremiumCleanNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: PremiumCleanId, Num: 1})
return
}
var RandSlice []int
if math.Abs(float64((NormalCleanNum+PremiumCleanNum)-(NormalFoodNum+PremiumFoodNum))) > 3 {
RandSlice := GoUtil.IfTrue((NormalCleanNum+PremiumCleanNum) > (NormalFoodNum+PremiumFoodNum), []int{PremiumCleanId, NormalCleanId}, []int{NormalFoodId, PremiumFoodId}).([]int)
Prob := GoUtil.RandSlice(RandSlice)
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
return
}
RandSlice = []int{NormalFoodId, NormalCleanId, PremiumFoodId, PremiumCleanId}
Prob := GoUtil.RandSlice(RandSlice)
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1}) p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
} }