samba/server/game/baseroom/clubResource.go

149 lines
4.7 KiB
Go
Raw Permalink Normal View History

2025-06-04 09:51:39 +08:00
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
}