diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroomCfg.go index d95ca099..013649ba 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroomCfg.go @@ -5,6 +5,7 @@ import ( "server/game/mod/item" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" + "strings" ) const ( @@ -101,28 +102,82 @@ func GetTriggerCd() int { return gamedata.GetIntValue(data, "Value") } -func GetNormalItem() (int, int) { - data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId") +func GetFoodItem() []int { + r := make([]int, 0) + data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Food") if err != nil { - return 0, 0 + return []int{} } - data2, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalCleanId") - if err != nil { - return 0, 0 + for _, v := range strings.Split(gamedata.GetStringValue(data, "Value"), ",") { + if v == "" { + continue + } + Id := GoUtil.Int(v) + r = append(r, Id) } - return gamedata.GetIntValue(data1, "Value"), gamedata.GetIntValue(data2, "Value") + return r } -func GetPremiumItem() (int, int) { - data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "PremiumFoodId") +func GetCleanItem() []int { + r := make([]int, 0) + data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Clean") 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 { - 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 { diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 1262468c..7fde13d2 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -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{} { result, err := ad.FriendMgr.Call(m) if err != nil { diff --git a/src/server/game/PlayerBack.go b/src/server/game/PlayerBack.go index 6f8cec8f..100f16eb 100644 --- a/src/server/game/PlayerBack.go +++ b/src/server/game/PlayerBack.go @@ -3,7 +3,6 @@ package game import ( "server/GoUtil" "server/game/mod/item" - "server/game/mod/msg" proto "server/msg" ) @@ -127,18 +126,9 @@ func PlayroomVisit(p *Player, Uid int) { r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList) r.Items = Items r.Status = int32(PlayroomMod.GameStatus) - data := FriendMgrCall(&msg.Msg{ - From: int(p.M_DwUin), - To: Uid, - 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) + data := G_GameLogicPtr.GetUserData(Uid) + r.UpvoteCount = int32(data.Upvote) + r.Chip = int32(data.Chip) r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet) p.PushClientRes(r) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 73de5618..7e2029d6 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -223,8 +223,8 @@ func ReqRewardOrder(player *Player, buf []byte) error { if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具 Item1 := PlayroomMod.GetReward() Item = item.Merge(Item, Item1) - P1, P2 := playroomCfg.GetPremiumItem() - if P1 == Item1[0].Id || P2 == Item1[0].Id { + 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)) @@ -3252,6 +3252,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { SendT: GoUtil.Now(), Extra: Items, }) + G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) PlayroomMod.ResetGame() player.PlayMod.save() PlayroomBackData(player) @@ -3440,7 +3441,6 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { SendT: GoUtil.Now(), Extra: Items, }) - G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) player.PlayMod.save() PlayroomBackData(player) player.PushClientRes(&msg.ResPlayroomFlipReward{ diff --git a/src/server/game/VarMgr.go b/src/server/game/VarMgr.go index c08eab1f..cbc06358 100644 --- a/src/server/game/VarMgr.go +++ b/src/server/game/VarMgr.go @@ -86,7 +86,9 @@ func (f *VarMgr) GetUserVar(key string) *VarUserData { if v, ok := f.getData().UserVar[key]; ok { return v } - return &VarUserData{} + data := &VarUserData{} + f.getData().UserVar[key] = data + return data } func (f *VarMgr) DelVar(key string) { diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 14287b0e..0713dbfe 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -76,6 +76,14 @@ func (i *ItemMod) GetItem(id int) int { 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 { return i.Data[id] >= num } diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 70e5e6c2..5e008148 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -2,7 +2,6 @@ package playroom import ( "fmt" - "math" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" playroomCfg "server/conf/playroom" @@ -333,40 +332,29 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) { return } p.Reward = make([]*item.Item, 0) - NormalFoodId, NormalCleanId := playroomCfg.GetNormalItem() - PremiumFoodId, PremiumCleanId := playroomCfg.GetPremiumItem() + FoodItem := playroomCfg.GetFoodItem() + CleanItem := playroomCfg.GetCleanItem() + ToyItem := playroomCfg.GetToyItem() + DailyItem := playroomCfg.GetDailyItem() - NormalFoodNum := itemMod.GetItem(NormalFoodId) - NormalCleanNum := itemMod.GetItem(NormalCleanId) + FoodItemNum := itemMod.GetItemNumByList(FoodItem) + 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) - 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) + Prob := GoUtil.RandSlice(sortList[0].Id) p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1}) }