diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index b679abd..a64bbd5 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -825,7 +825,7 @@ func (this *SceneWaitStartStateTienLen) OnEnter(s *base.Scene) { if sceneEx, ok := s.GetExtraData().(*TienLenSceneData); ok { sceneEx.Clear() sceneEx.SetGaming(false) - this.BroadcastRoomState(s, this.GetState()) + this.BroadcastRoomState(s, this.GetState(), int64(sceneEx.NumOfGames)) logger.Logger.Trace("(this *SceneWaitStartStateTienLen) OnEnter", this.GetState()) } } diff --git a/worldsrv/action_game.go b/worldsrv/action_game.go index a080fc6..7785ce8 100644 --- a/worldsrv/action_game.go +++ b/worldsrv/action_game.go @@ -1319,6 +1319,10 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{ return nil } + if cfg.GetCostType() == 1 { + sp.CostPayment(scene, p) + } + pack = &gamehall.SCCreatePrivateRoom{ OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game, GameFreeId: msg.GetGameFreeId(), diff --git a/worldsrv/bagmgr.go b/worldsrv/bagmgr.go index 497c69d..acb0556 100644 --- a/worldsrv/bagmgr.go +++ b/worldsrv/bagmgr.go @@ -450,7 +450,7 @@ func (this *BagMgr) AddItem(p *Player, itemId, itemNum int64, add int64, gainWay return this.AddItems(p, []*Item{{ItemId: int32(itemId), ItemNum: itemNum}}, add, gainWay, operator, remark, gameId, gameFreeId, noLog, params...) } -func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*Item, gainWay int32, operator, remark string, +func (this *BagMgr) AddItemsOffline(platform string, snid int32, addItems []*model.Item, gainWay int32, operator, remark string, gameId, gameFreeId int64, noLog bool, callback func(err error)) { var findPlayer *model.PlayerBaseInfo task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} { diff --git a/worldsrv/scenepolicydata.go b/worldsrv/scenepolicydata.go index 015e7b0..2aa2754 100644 --- a/worldsrv/scenepolicydata.go +++ b/worldsrv/scenepolicydata.go @@ -2,6 +2,8 @@ package main import ( "math" + "mongo.games.com/goserver/core/logger" + "mongo.games.com/game/common" "mongo.games.com/game/model" hallproto "mongo.games.com/game/protocol/gamehall" @@ -29,6 +31,10 @@ func (spd *ScenePolicyData) OnStart(s *Scene) { // 场景关闭事件 func (spd *ScenePolicyData) OnStop(s *Scene) { s.NotifyPrivateRoom(common.ListDel) + // 房主付费,房间没有玩就解散了,返还房主建房费用 + if s.IsCustom() && s.GetCostType() == 1 && s.currRound == 0 { + spd.GiveCostPayment(s, s.creator) + } } // 场景心跳事件 @@ -60,8 +66,10 @@ func (spd *ScenePolicyData) OnSceneState(s *Scene, state int) { case common.SceneStateStart: s.NotifyPrivateRoom(common.ListModify) if s.IsCustom() { - for _, v := range s.players { - spd.CostPayment(s, v) + if s.GetCostType() == 2 { + for _, v := range s.players { + spd.CostPayment(s, v) + } } } @@ -85,13 +93,13 @@ func (spd *ScenePolicyData) CanEnter(s *Scene, p *Player) int { return 0 } -func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, p *Player, f func(items []*model.Item)) bool { +func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *webapi.RoomConfig, snid int32, f func(items []*model.Item)) bool { isEnough := true var items []*model.Item if costType == 1 { // 房主 for _, v := range roomConfig.GetCost() { - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < v.GetItemNum() { isEnough = false break } else { @@ -105,7 +113,7 @@ func (spd *ScenePolicyData) costEnough(costType, playerNum int, roomConfig *weba // AA for _, v := range roomConfig.GetCost() { n := int64(math.Ceil(float64(v.GetItemNum()) / float64(playerNum))) - if item := BagMgrSingleton.GetItem(p.SnId, v.GetItemId()); item == nil || item.ItemNum < n { + if item := BagMgrSingleton.GetItem(snid, v.GetItemId()); item == nil || item.ItemNum < n { isEnough = false break } else { @@ -126,7 +134,7 @@ func (spd *ScenePolicyData) CostEnough(costType, playerNum int, roomConfig *weba if roomConfig == nil { return false } - return spd.costEnough(costType, playerNum, roomConfig, p, func(items []*model.Item) {}) + return spd.costEnough(costType, playerNum, roomConfig, p.SnId, func(items []*model.Item) {}) } func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { @@ -134,7 +142,10 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { if roomConfig == nil { return false } - return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p, func(items []*model.Item) { + return spd.costEnough(int(roomConfig.GetCostType()), s.playerNum, roomConfig, p.SnId, func(items []*model.Item) { + for _, v := range items { + v.ItemNum = -v.ItemNum + } BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, @@ -148,6 +159,47 @@ func (spd *ScenePolicyData) CostPayment(s *Scene, p *Player) bool { }) } +// GiveCostPayment 退房费 +func (spd *ScenePolicyData) GiveCostPayment(s *Scene, snid int32) bool { + roomConfig := PlatformMgrSingleton.GetConfig(s.limitPlatform.IdStr).RoomConfig[s.GetRoomConfigId()] + if roomConfig == nil { + return false + } + + if roomConfig.GetCostType() != 1 { // 只有房主付费才有返还 + return false + } + + var items []*model.Item + for _, v := range roomConfig.GetCost() { + items = append(items, &model.Item{ + ItemId: v.GetItemId(), + ItemNum: v.GetItemNum(), + }) + } + + p := PlayerMgrSington.GetPlayerBySnId(snid) + if p != nil { + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: common.GainWayRoomCost, + Operator: "system", + Remark: "竞技场房间费用返还", + GameId: int64(s.gameId), + GameFreeId: int64(s.dbGameFree.GetId()), + NoLog: false, + RoomConfigId: roomConfig.GetId(), + }) + } else { + BagMgrSingleton.AddItemsOffline(s.limitPlatform.IdStr, snid, items, common.GainWayRoomCost, "system", + "竞技场费用返还", int64(s.gameId), int64(s.dbGameFree.GetId()), false, func(err error) { + logger.Logger.Errorf("竞技场房间费用返还失败, err: %v", err) + }) + } + return false +} + func (spd *ScenePolicyData) GetBetState() int32 { return spd.BetState } diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 7106457..454fedd 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3375,19 +3375,25 @@ func init() { } addvcoin := msg.NeedNum jPrice := msg.JPrice - var items []*Item + var items []*model.Item //V卡 if addvcoin > 0 { - items = append(items, &Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) + items = append(items, &model.Item{ItemId: common.ItemIDVCard, ItemNum: int64(addvcoin)}) } //金券 if jPrice > 0 { - items = append(items, &Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) + items = append(items, &model.Item{ItemId: common.ItemIDJCard, ItemNum: int64(jPrice)}) } remark := fmt.Sprintf("兑换撤单 %v-%v", msg.GoodsId, msg.Name) if player != nil { // 在线 - if _, code, _ := BagMgrSingleton.AddItems(player, items, 0, common.GainWay_Exchange, "system", remark, 0, 0, false); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 + if _, code, _ := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: player.PlayerData, + Change: items, + GainWay: common.GainWay_Exchange, + Operator: "system", + Remark: remark, + }); code != bag.OpResultCode_OPRC_Sucess { // 领取失败 logger.Logger.Errorf("UpExchangeStatus AddItems err", code) pack.Msg = "AddItems err" return common.ResponseTag_ParamError, pack @@ -3744,9 +3750,9 @@ func init() { pack.Msg = "参数错误" return common.ResponseTag_ParamError, pack } - var items []*Item + var items []*model.Item for _, info := range msg.ItemInfo { - items = append(items, &Item{ + items = append(items, &model.Item{ ItemId: info.ItemId, // 物品id ItemNum: info.ItemNum, // 数量 ObtainTime: time.Now().Unix(), @@ -3755,7 +3761,13 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItems(p, items, 0, msg.GetTypeId(), "system", msg.GetRemark(), 0, 0, false) + BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + P: p.PlayerData, + Change: items, + GainWay: msg.GetTypeId(), + Operator: "system", + Remark: msg.GetRemark(), + }) pack.Tag = webapiproto.TagCode_SUCCESS pack.Msg = "AddItem success" return common.ResponseTag_Ok, pack