149 lines
4.7 KiB
Go
149 lines
4.7 KiB
Go
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
|
||
}
|