samba/server/game/baseroom/clubResource.go
2025-06-04 09:51:39 +08:00

149 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}