package baseroom import ( "samba/pkg/log" "samba/proto" . "samba/server/game/service" "samba/util/model" "samba/util/routingKey" "samba/util/util" ) // 扣除玩家所在俱乐部部长身上的俱乐部币 func (r *BaseRoom[Seat]) addClubCreatorClubCoin(uid int64, add int64, reason string) { r.AddUserResource(uid, add, model.ResClubCoins, reason) } // 扣除玩家资源(rmoney表)如金币,俱乐部币(部长才有), 玩家所在俱乐部资源(club_members)如积分,免费积分,可提现积分 func (r *BaseRoom[Seat]) AddUserResource(uid int64, add int64, resType, reason string) { if add == 0 { return } if _, err := model.ResToInt(resType); err != nil { log.Error(r.UserLog(uid, "err:%v", err)) return } router := routingKey.DbKey(uid) SendMsgToDb(srv, router, uid, proto.ReqAddResourceId, &proto.ReqAddResource{ ClubId: r.ClubId(), UserId: uid, ResValue: add, ResType: resType, Reason: reason, RoomId: r.Id(), RoomType: r.Type(), GameNo: r.GameNo, Desc: "", IsNotify: true, }) } // 添加俱乐部本身资源,目前只有俱乐部分佣 func (r *BaseRoom[Seat]) AddClubResource(add int64, resType, reason string) { if r.ClubId() == 0 { return } if resType != model.ResClubScore { log.Error(r.Log("resType:%v not match", resType)) return } log.Debug(r.Log("add club resType:%v res:%v", resType, add)) // 俱乐部分佣 SendMsgToDb(srv, routingKey.DbKey(int64(r.Id())), 0, proto.ReqAddClubResourceId, &proto.ReqAddClubResource{ ClubId: r.ClubId(), UserId: 0, ResValue: add, ResType: resType, Reason: reason, RoomId: r.Id(), RoomType: r.Type(), GameNo: r.GameNo, Desc: "", }) } // 俱乐部与平台结算 积分抽水 func (r *BaseRoom[Seat]) ClubSettlement(tip int64) { if r.ClubId() == 0 { return } clubInfo, err := model.NewClubInfoOp().Load(r.ClubId()) if err != nil { log.Error(r.Log("err:%v", err)) return } rate := clubInfo.SolidFee if rate == 0 { clubLv := model.NewClubLevelOp().GetLevel(clubInfo) if clubLv == nil { log.Error(r.Log("club level config is nil")) return } rate = clubLv.Fee } clubScore := tip * int64(rate) / 100 if clubScore < 0 { clubScore = 0 } r.baseGameLog.ClubFee = clubScore r.baseGameLog.PlatformFee = tip - clubScore r.AddClubResource(clubScore, model.ResClubScore, model.ReasonGame) r.addClubCreatorClubCoin(clubInfo.Creator, -r.baseGameLog.PlatformFee, model.ReasonGame) log.Debug(r.Log("部长:%v, 总抽水:%v, 平台:%v, 俱乐部:%v", clubInfo.Creator, tip, r.baseGameLog.PlatformFee, clubScore)) } func (r *BaseRoom[Seat]) getUserClubScore(userClubInfo *model.UserClubInfo) (sumScore, moneyScore, freeScore, inoutFreeScore int64) { if userClubInfo != nil { return userClubInfo.Score + userClubInfo.FreeScore + userClubInfo.InOutFreeScore, userClubInfo.Score, userClubInfo.FreeScore, userClubInfo.InOutFreeScore } return } // 获取玩家身上的俱乐部积分(总积分,充值积分,免费积分,可提现的免费积分) func (r *BaseRoom[Seat]) GetUserClubScore(uid int64) (sumScore, moneyScore, freeScore, inoutFreeScore int64) { userClubInfo, err := model.NewUserClubInfoOp().Load(uid, r.clubId) if err == nil { return r.getUserClubScore(userClubInfo) } log.Error(r.UserLog(uid, "err:%v", err)) return } // 获取玩家身上的俱乐部积分(总积分,充值积分,免费积分,可提现的免费积分) func (r *BaseRoom[Seat]) CostUserClubScore(uid int64, cost int64) (costMoneyScore, costFreeScore, costInoutFreeScore int64) { if cost < 0 { log.Error(r.Log("cost:%v must>0. uid:%v", cost, uid)) return } userClubInfo, err := model.NewUserClubInfoOp().Load(uid, r.clubId) if err == nil { // 先扣官方积分(免费积分), 然后扣可提现积分,最后扣俱乐部积分 costFreeScore = util.Tie(userClubInfo.FreeScore < cost, userClubInfo.FreeScore, cost) userClubInfo.FreeScore -= costFreeScore cost -= costFreeScore // 然后扣可提现积分 if cost > 0 { costInoutFreeScore = util.Tie(userClubInfo.InOutFreeScore < cost, userClubInfo.InOutFreeScore, cost) userClubInfo.InOutFreeScore -= costInoutFreeScore cost -= costInoutFreeScore } // 最后扣俱乐部积分 if cost > 0 { costMoneyScore = cost userClubInfo.Score -= costMoneyScore } if costFreeScore > 0 { r.AddUserResource(uid, -costFreeScore, model.ResClubUserFreeScore, model.ReasonGame) } if costInoutFreeScore > 0 { r.AddUserResource(uid, -costInoutFreeScore, model.ResClubUserInOutFreeScore, model.ReasonGame) } if costMoneyScore > 0 { r.AddUserResource(uid, -costMoneyScore, model.ResClubUserScore, model.ReasonGame) } return } log.Error(r.UserLog(uid, "err:%v", err)) return }