go_dreamfactory/modules/arena/api_buy.go
2023-12-13 22:15:37 +08:00

108 lines
3.3 KiB
Go

package arena
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/sys/mgo"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
)
// 参数校验
func (this *apiComp) BuyCheck(session comm.IUserSession, req *pb.ArenaBuyReq) (errdata *pb.ErrorData) {
if req.BuyNum == 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
// /获取自己的排行榜信息
func (this *apiComp) Buy(session comm.IUserSession, req *pb.ArenaBuyReq) (errdata *pb.ErrorData) {
var (
// global *cfg.GameGlobalData
info *pb.DBArenaUser
ticketitem *cfg.Gameatn
need []*cfg.Gameatn
maxbuy, vipbuy int32
err error
atno []*pb.UserAtno
)
if errdata = this.BuyCheck(session, req); errdata != nil {
return
}
if ticketitem = this.module.ModuleTools.GetGlobalConf().ArenaTicketCos; ticketitem == nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: comm.NewNotFoundConfErr(moduleName, "global.json", "ArenaTicketCos").Error(),
}
return
}
if info, err = this.module.modelArena.queryPlayerInfo(session.GetUserId()); err != nil && err != mgo.MongodbNil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_CacheReadError.ToString(),
Message: err.Error(),
}
return
}
this.module.modelArena.recoverTicket(session, info)
pricekey := this.module.ModuleTools.GetGlobalConf().ArenaBuy
if maxbuy, err = this.module.ModuleTools.GetPriceGroupLen(pricekey); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_CacheReadError.ToString(),
Message: err.Error(),
}
return
}
vipbuy = this.module.privilege.GetCountByPrivilegeId(session.GetUserId(), comm.PrivilegeType5)
need = make([]*cfg.Gameatn, 0)
for i := int32(0); i < req.BuyNum; i++ {
if info.Buynum+i+1 > maxbuy+vipbuy {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ArenaTicketBuyUp,
Title: pb.ErrorCode_ArenaTicketBuyUp.ToString(),
}
return
}
if res, err := this.module.ModuleTools.GetPriceGroupCost(pricekey, info.Buynum+i+1); len(res) > 0 {
need = append(need, res...)
} else {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
return
}
}
if errdata = this.module.ConsumeRes(session, need, true); errdata != nil {
return
}
info.Buynum += req.BuyNum
if errdata, atno = this.module.DispenseAtno(session, []*cfg.Gameatn{{A: ticketitem.A, T: ticketitem.T, N: req.BuyNum}}, true); errdata != nil {
return
}
// info.Ticket += req.BuyNum
if err = this.module.modelArena.updateArenaUserInfo(info); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
session.SendMsg(string(this.module.GetType()), "buy", &pb.MoonfantasyBuyResp{Issucc: true, BattleNum: info.Buynum})
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
this.module.WriteUserLog(session.GetUserId(), req, comm.GMResAddType, "MoonfantasyBuyReq", atno)
this.module.WriteUserLog(session.GetUserId(), req, comm.GMResDelType, "MoonfantasyBuyReq", need) // 消耗资源
})
return
}