消息异步处理
This commit is contained in:
parent
ae92a60cbc
commit
96b7321da5
@ -168,7 +168,6 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (e
|
|||||||
// event.TriggerEvent(comm.EventFriendChange, uid, int32(len(self.FriendIds)))
|
// event.TriggerEvent(comm.EventFriendChange, uid, int32(len(self.FriendIds)))
|
||||||
}
|
}
|
||||||
|
|
||||||
go this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeFriend, int32(len(self.FriendIds)))
|
|
||||||
// 拥有xx个好友
|
// 拥有xx个好友
|
||||||
// this.moduleFriend.ModuleRtask.SendToRtask(session, comm.Rtype10, int32(len(agreeIds)))
|
// this.moduleFriend.ModuleRtask.SendToRtask(session, comm.Rtype10, int32(len(agreeIds)))
|
||||||
var tasks []*pb.BuriedParam
|
var tasks []*pb.BuriedParam
|
||||||
@ -180,11 +179,13 @@ func (this *apiComp) Agree(session comm.IUserSession, req *pb.FriendAgreeReq) (e
|
|||||||
Num: optNum,
|
Num: optNum,
|
||||||
}
|
}
|
||||||
session.SendMsg(string(this.module.GetType()), FriendSubTypeAgree, resp)
|
session.SendMsg(string(this.module.GetType()), FriendSubTypeAgree, resp)
|
||||||
if len(tasks) > 0 {
|
|
||||||
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
||||||
|
this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeFriend, int32(len(self.FriendIds)))
|
||||||
|
if len(tasks) > 0 {
|
||||||
this.module.ModuleBuried.TriggerBuried(session, tasks...)
|
this.module.ModuleBuried.TriggerBuried(session, tasks...)
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -78,8 +78,9 @@ func (this *apiComp) Del(session comm.IUserSession, req *pb.FriendDelReq) (errda
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
go this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeFriend, int32(len(self.FriendIds)))
|
|
||||||
session.SendMsg(string(this.module.GetType()), FriendSubTypeDel, &pb.FriendDelResp{FriendId: req.FriendId, UserId: self.Uid})
|
session.SendMsg(string(this.module.GetType()), FriendSubTypeDel, &pb.FriendDelResp{FriendId: req.FriendId, UserId: self.Uid})
|
||||||
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
||||||
|
this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeFriend, int32(len(self.FriendIds)))
|
||||||
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
MlineGetListResp = "getlist"
|
|
||||||
MlineChallengeResp = "challenge"
|
|
||||||
MlineCleanStageResp = "cleanstage"
|
|
||||||
MlineChallengeOverResp = "challengeover"
|
|
||||||
MlineGetRewardResp = "getreward"
|
|
||||||
)
|
|
||||||
|
|
||||||
type apiComp struct {
|
|
||||||
modules.MCompGate
|
|
||||||
service core.IService
|
|
||||||
module *Mline
|
|
||||||
}
|
|
||||||
|
|
||||||
//组件初始化接口
|
|
||||||
func (this *apiComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
err = this.MCompGate.Init(service, module, comp, options)
|
|
||||||
this.module = module.(*Mline)
|
|
||||||
this.service = service
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *apiComp) Start() (err error) {
|
|
||||||
err = this.MCompGate.Start()
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 参数校验
|
|
||||||
func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.MlineChallengeReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.StageId == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// /挑战主线关卡
|
|
||||||
func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MlineChallengeReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
curChapter *pb.DBMline // 当前章节信息
|
|
||||||
ps int32 // 消耗的体力
|
|
||||||
psAnt *cfg.Gameatn
|
|
||||||
stageConf *cfg.GameMainStageData // 当前章节数据
|
|
||||||
preStageConf *cfg.GameMainStageData // 上一章节数据
|
|
||||||
err error
|
|
||||||
bNew bool // 是否是新章节
|
|
||||||
)
|
|
||||||
|
|
||||||
if errdata = this.ChallengeCheck(session, req); errdata != nil {
|
|
||||||
return // 参数校验失败直接返回
|
|
||||||
}
|
|
||||||
if stageConf, err = this.module.configure.GetMainStageConf(req.StageId); err != nil { // 配置文件校验
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
for _, v := range list {
|
|
||||||
if stageConf.Chapterid == v.ChapterId {
|
|
||||||
curChapter = v
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if stageConf.Previoustage != 0 { // 前置关卡是0 不需要做校验 直接通过
|
|
||||||
preStageConf, err = this.module.configure.GetMainStageConf(stageConf.Previoustage)
|
|
||||||
if err != nil { // 配置文件校验
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range list {
|
|
||||||
if preStageConf.Chapterid == v.ChapterId { // 有上一章节数据
|
|
||||||
if _, ok := v.Star[preStageConf.Id]; !ok {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlinePreNotFound,
|
|
||||||
Title: pb.ErrorCode_MainlinePreNotFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
if curChapter == nil {
|
|
||||||
curChapter = &pb.DBMline{
|
|
||||||
Id: primitive.NewObjectID().Hex(),
|
|
||||||
Uid: session.GetUserId(),
|
|
||||||
CType: stageConf.Episodetype,
|
|
||||||
ChapterId: stageConf.Chapterid,
|
|
||||||
StageId: stageConf.Id,
|
|
||||||
Star: map[int32]int32{},
|
|
||||||
Award: map[int32]bool{},
|
|
||||||
Ps: map[int32]int32{},
|
|
||||||
}
|
|
||||||
bNew = true
|
|
||||||
}
|
|
||||||
if v1, ok := curChapter.Ps[req.StageId]; !ok || v1 == 0 {
|
|
||||||
|
|
||||||
for _, v := range stageConf.PsConsume {
|
|
||||||
if v.A == "attr" && v.T == "ps" {
|
|
||||||
ps += v.N
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, v := range stageConf.PsMg {
|
|
||||||
if v.A == "attr" && v.T == "ps" {
|
|
||||||
ps += v.N
|
|
||||||
}
|
|
||||||
}
|
|
||||||
psAnt = &cfg.Gameatn{ // 构建一个atn 对象
|
|
||||||
A: "attr",
|
|
||||||
T: "ps",
|
|
||||||
N: ps,
|
|
||||||
}
|
|
||||||
if errdata = this.module.ConsumeRes(session, []*cfg.Gameatn{psAnt}, true); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
curChapter.Ps[req.StageId] = ps
|
|
||||||
if bNew {
|
|
||||||
this.module.modelMline.addNewChapter(session.GetUserId(), curChapter) // 首次打新的章节
|
|
||||||
} else {
|
|
||||||
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, map[string]interface{}{"ps": curChapter.Ps})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
errdata, record := this.module.battle.CreatePveBattle(session, &pb.BattlePVEReq{
|
|
||||||
Rulesid: stageConf.BattleReadyID,
|
|
||||||
Ptype: pb.PlayType_mainline,
|
|
||||||
Title: "",
|
|
||||||
Format: req.Battle,
|
|
||||||
Mformat: stageConf.FormatList,
|
|
||||||
})
|
|
||||||
if errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineChallengeResp, &pb.MlineChallengeResp{
|
|
||||||
Info: &pb.BattleInfo{
|
|
||||||
Id: record.Id,
|
|
||||||
Title: record.Title,
|
|
||||||
Rulesid: stageConf.BattleReadyID,
|
|
||||||
Btype: record.Btype,
|
|
||||||
Ptype: record.Ptype,
|
|
||||||
RedCompId: record.RedCompId,
|
|
||||||
Redflist: record.Redflist,
|
|
||||||
BlueCompId: record.BlueCompId,
|
|
||||||
Buleflist: record.Buleflist,
|
|
||||||
Tasks: record.Tasks,
|
|
||||||
},
|
|
||||||
StageId: req.StageId,
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,265 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 参数校验
|
|
||||||
func (this *apiComp) ChallengeOverCheck(session comm.IUserSession, req *pb.MlineChallengeOverReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.StageId == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// /挑战主线关卡
|
|
||||||
func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.MlineChallengeOverReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
curChapter *pb.DBMline // 当前章节信息
|
|
||||||
stageConf *cfg.GameMainStageData
|
|
||||||
|
|
||||||
isWin bool
|
|
||||||
first bool // 判断是否是首通
|
|
||||||
update map[string]interface{}
|
|
||||||
rsp *pb.MlineChallengeOverResp
|
|
||||||
star int32 // 评星
|
|
||||||
tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0)
|
|
||||||
err error
|
|
||||||
consumPs int32
|
|
||||||
)
|
|
||||||
rsp = &pb.MlineChallengeOverResp{}
|
|
||||||
update = make(map[string]interface{})
|
|
||||||
if errdata = this.ChallengeOverCheck(session, req); errdata != nil {
|
|
||||||
return // 参数校验失败直接返回
|
|
||||||
}
|
|
||||||
if stageConf, err = this.module.configure.GetMainStageConf(req.StageId); err != nil { // 配置文件校验
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
for _, v := range list {
|
|
||||||
if stageConf.Chapterid == v.ChapterId {
|
|
||||||
curChapter = v
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if curChapter == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// 校验通过
|
|
||||||
errdata, isWin = this.module.battle.CheckBattleReport(session, req.Report)
|
|
||||||
if errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// if v, ok := curChapter.Ps[req.StageId]; !ok || v == 0 {
|
|
||||||
// errdata = &pb.ErrorData{
|
|
||||||
// Code: pb.ErrorCode_HuntingLvErr,
|
|
||||||
// Title: pb.ErrorCode_HuntingLvErr.ToString(),
|
|
||||||
// Message: fmt.Sprintf("关卡体力参数异常,uid:%s,预扣体力:%d", session.GetUserId(), v),
|
|
||||||
// }
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
consumPs = curChapter.Ps[req.StageId]
|
|
||||||
curChapter.Ps[req.StageId] = 0 // 清空预扣体力值
|
|
||||||
update["ps"] = curChapter.Ps
|
|
||||||
if !isWin { // 战斗失败返还扣除的体力
|
|
||||||
if errdata = this.module.DispenseRes(session, stageConf.PsConsume, true); errdata != nil { // 返还预扣体力
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
|
|
||||||
|
|
||||||
rsp.Data = curChapter
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineChallengeOverResp, rsp) // 数据推送
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// 评星规则
|
|
||||||
if len(stageConf.Star) != len(stageConf.StarType) || len(stageConf.Star) != len(stageConf.StarValue) || len(stageConf.StarValue) != len(stageConf.StarType) {
|
|
||||||
this.module.Errorf("配置错误, 参数数量不一致,StageId: %d", req.StageId)
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var szStar []int32
|
|
||||||
szStar = append(szStar, 1<<0)
|
|
||||||
szStar = append(szStar, 1<<1)
|
|
||||||
szStar = append(szStar, 1<<2)
|
|
||||||
for i, v := range stageConf.StarType {
|
|
||||||
if v == comm.MainStarType1 {
|
|
||||||
star ^= szStar[i]
|
|
||||||
} else if v == comm.MainStarType2 {
|
|
||||||
if req.Report.Death <= stageConf.StarValue[i] {
|
|
||||||
star ^= szStar[i]
|
|
||||||
}
|
|
||||||
} else if v == comm.MainStarType3 {
|
|
||||||
if req.Report.Round <= stageConf.StarValue[i] {
|
|
||||||
star ^= szStar[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断是不是首通
|
|
||||||
if _, ok := curChapter.Star[req.StageId]; !ok {
|
|
||||||
first = true
|
|
||||||
curChapter.Star[req.StageId] = star // 星级赋值
|
|
||||||
update["star"] = curChapter.Star
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断星数
|
|
||||||
var (
|
|
||||||
totalStar int32
|
|
||||||
preStar int32
|
|
||||||
)
|
|
||||||
if curChapter.Star[req.StageId] != star {
|
|
||||||
for _, v := range szStar {
|
|
||||||
if star&v == v {
|
|
||||||
totalStar++
|
|
||||||
}
|
|
||||||
|
|
||||||
if curChapter.Star[req.StageId]&v == v {
|
|
||||||
preStar++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if totalStar >= preStar { // 给最高星
|
|
||||||
curChapter.Star[req.StageId] = star
|
|
||||||
update["star"] = curChapter.Star
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
curChapter.StageId = req.StageId
|
|
||||||
update["stageId"] = curChapter.StageId
|
|
||||||
|
|
||||||
if first { // 发奖
|
|
||||||
if rst, err := this.module.ModuleUser.GetUserExpand(session.GetUserId()); err == nil { // 统计主线进度
|
|
||||||
_mp := rst.Mline
|
|
||||||
if v, ok := _mp[curChapter.CType]; ok {
|
|
||||||
if v <= req.StageId {
|
|
||||||
_mp[curChapter.CType] = req.StageId
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_mp[curChapter.CType] = req.StageId
|
|
||||||
}
|
|
||||||
this.module.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{
|
|
||||||
"mline": _mp,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if errdata = this.module.DispenseRes(session, stageConf.Firstaward, true); errdata != nil {
|
|
||||||
this.module.Debugf("Mline first DispenseRes err:+%v", stageConf.Firstaward)
|
|
||||||
}
|
|
||||||
for _, v := range stageConf.Firstaward {
|
|
||||||
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
|
|
||||||
A: v.A,
|
|
||||||
T: v.T,
|
|
||||||
N: v.N,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if errdata = this.module.DispenseRes(session, stageConf.Commonaward, true); errdata != nil {
|
|
||||||
this.module.Debugf("Mline Commonaward DispenseRes err:+%v", stageConf.Commonaward)
|
|
||||||
}
|
|
||||||
for _, v := range stageConf.Commonaward {
|
|
||||||
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
|
|
||||||
A: v.A,
|
|
||||||
T: v.T,
|
|
||||||
N: v.N,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
user, err := this.module.ModuleUser.GetUser(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if lotteryward := this.module.ModuleTools.GetGroupDataByLottery(stageConf.Lotteryward, user.Vip, user.Lv); len(lotteryward) > 0 {
|
|
||||||
if errdata = this.module.DispenseRes(session, lotteryward, true); errdata != nil {
|
|
||||||
this.module.Debugf("Mline lotteryward DispenseRes err:+%v", lotteryward)
|
|
||||||
}
|
|
||||||
for _, v := range lotteryward {
|
|
||||||
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
|
|
||||||
A: v.A,
|
|
||||||
T: v.T,
|
|
||||||
N: v.N,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 加英雄经验
|
|
||||||
if stageConf.HeroExp > 0 {
|
|
||||||
var heroObjs []string
|
|
||||||
if req.Report != nil && req.Report.Info != nil && len(req.Report.Info.Redflist) > 0 {
|
|
||||||
for _, v := range req.Report.Info.Redflist[0].Team {
|
|
||||||
if !v.Ishelp { // 助战英雄不加经验
|
|
||||||
heroObjs = append(heroObjs, v.Oid)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.module.ModuleHero.AddHerosExp(session, heroObjs, stageConf.HeroExp)
|
|
||||||
}
|
|
||||||
|
|
||||||
rsp.HeroExp = stageConf.HeroExp
|
|
||||||
rsp.UserExp, _ = this.module.ModuleUser.ConsumePsAddExp(session, consumPs)
|
|
||||||
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
|
|
||||||
rsp.Data = curChapter
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineChallengeOverResp, rsp) // 数据推送
|
|
||||||
// 校验功能开启
|
|
||||||
module, err2 := this.module.service.GetModule(comm.ModuleSys)
|
|
||||||
if err2 == nil {
|
|
||||||
if isys, ok := module.(comm.ISys); ok {
|
|
||||||
isys.CheckOpenCond(session, comm.OpencondTypeMaxmapid, req.StageId) // 校验新功能是否开启
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 主线任务统计 Rtype60
|
|
||||||
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype60, 1))
|
|
||||||
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype61, 1, int32(req.StageId)))
|
|
||||||
var (
|
|
||||||
ChapterStar int32
|
|
||||||
allStar int32
|
|
||||||
)
|
|
||||||
for _, v1 := range curChapter.Star {
|
|
||||||
star := 0
|
|
||||||
for _, v := range szStar {
|
|
||||||
if v1&v == v {
|
|
||||||
ChapterStar++
|
|
||||||
star++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype158, ChapterStar, curChapter.ChapterId, curChapter.CType))
|
|
||||||
for _, v2 := range list {
|
|
||||||
for _, v1 := range v2.Star {
|
|
||||||
for _, v := range szStar {
|
|
||||||
if v1&v == v {
|
|
||||||
allStar++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tasks = append(tasks, comm.GetBuriedParam(comm.Rtype160, allStar, stageConf.Chapterid))
|
|
||||||
|
|
||||||
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
|
||||||
this.module.ModuleBuried.TriggerBuried(session, tasks...)
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,77 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
)
|
|
||||||
|
|
||||||
//参数校验
|
|
||||||
func (this *apiComp) CleanStageCheck(session comm.IUserSession, req *pb.MlineCleanStageReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.StageId == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
///挑战主线关卡
|
|
||||||
func (this *apiComp) CleanStage(session comm.IUserSession, req *pb.MlineCleanStageReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
curChapter *pb.DBMline // 当前章节信息
|
|
||||||
stageConf *cfg.GameMainStageData
|
|
||||||
rsp *pb.MlineCleanStageResp
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
rsp = &pb.MlineCleanStageResp{}
|
|
||||||
if errdata = this.CleanStageCheck(session, req); errdata != nil {
|
|
||||||
return // 参数校验失败直接返回
|
|
||||||
}
|
|
||||||
if stageConf, err = this.module.configure.GetMainStageConf(req.StageId); err != nil { // 配置文件校验
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
for _, v := range list {
|
|
||||||
if stageConf.Chapterid == v.ChapterId {
|
|
||||||
curChapter = v
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if curChapter == nil { // 校验是不是新的数据
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if v, ok := curChapter.Star[req.StageId]; !ok || v < 3 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNoEnoughStar,
|
|
||||||
Title: pb.ErrorCode_MainlineNoEnoughStar.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if errdata = this.module.DispenseRes(session, stageConf.Commonaward, true); errdata != nil {
|
|
||||||
this.module.Debugf("Mline Clean DispenseRes err:+%v", stageConf.Commonaward)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rsp.StageId = req.StageId
|
|
||||||
for _, v := range stageConf.Commonaward {
|
|
||||||
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
|
|
||||||
A: v.A,
|
|
||||||
T: v.T,
|
|
||||||
N: v.N,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineChallengeResp, rsp)
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
//参数校验
|
|
||||||
func (this *apiComp) GetRewardCheck(session comm.IUserSession, req *pb.MlineGetRewardReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.CId == 0 || req.Star == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 领取奖励
|
|
||||||
func (this *apiComp) GetReward(session comm.IUserSession, req *pb.MlineGetRewardReq) (errdata *pb.ErrorData) {
|
|
||||||
var (
|
|
||||||
curChapter *pb.DBMline // 当前章节信息
|
|
||||||
update map[string]interface{}
|
|
||||||
rsp *pb.MlineGetRewardResp
|
|
||||||
)
|
|
||||||
rsp = &pb.MlineGetRewardResp{}
|
|
||||||
update = make(map[string]interface{})
|
|
||||||
if errdata = this.GetRewardCheck(session, req); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mLineConf := this.module.configure.GetMainChapterConf(req.CId)
|
|
||||||
if mLineConf == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
for _, v := range list {
|
|
||||||
if req.CId == v.ChapterId {
|
|
||||||
curChapter = v
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if curChapter == nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineNotFindChapter,
|
|
||||||
Title: pb.ErrorCode_MainlineNotFindChapter.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if b, ok := curChapter.Award[req.Star]; ok && b { // 重复领奖
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_MainlineRepeatReward,
|
|
||||||
Title: pb.ErrorCode_MainlineRepeatReward.ToString(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
curChapter.Award[req.Star] = true
|
|
||||||
update["award"] = curChapter.Award
|
|
||||||
awardConf := this.module.configure.GetMainStarRewardConf(mLineConf.Starreward)
|
|
||||||
for _, v := range awardConf {
|
|
||||||
if v.Starnum == req.Star {
|
|
||||||
if errdata = this.module.DispenseRes(session, v.Reward, true); errdata != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range v.Reward {
|
|
||||||
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
|
|
||||||
A: v.A,
|
|
||||||
T: v.T,
|
|
||||||
N: v.N,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rsp.Data = curChapter
|
|
||||||
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineGetRewardResp, rsp) // 数据推送
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,72 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
||||||
)
|
|
||||||
|
|
||||||
//参数校验
|
|
||||||
func (this *apiComp) GetListCheck(session comm.IUserSession, req *pb.MlineGetListReq) (errdata *pb.ErrorData) {
|
|
||||||
if req.CType == 0 {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
///获取主线关卡信息
|
|
||||||
func (this *apiComp) GetList(session comm.IUserSession, req *pb.MlineGetListReq) (errdata *pb.ErrorData) {
|
|
||||||
rsp := &pb.MlineGetListResp{}
|
|
||||||
|
|
||||||
errdata = this.GetListCheck(session, req)
|
|
||||||
if errdata != nil {
|
|
||||||
return // 参数校验失败直接返回
|
|
||||||
}
|
|
||||||
|
|
||||||
list, err := this.module.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range list {
|
|
||||||
if v.CType == req.CType {
|
|
||||||
rsp.Data = append(rsp.Data, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(rsp.Data) == 0 { // 什么数据都没有 创建一条
|
|
||||||
if chapterConf, err := this.module.configure.GetFirstChapterIDByType(req.CType); err == nil { // 配置文件校验
|
|
||||||
if stageConf := this.module.configure.GetFirstStageIDByChapter(chapterConf.Id); stageConf != nil {
|
|
||||||
newData := &pb.DBMline{
|
|
||||||
Id: primitive.NewObjectID().Hex(),
|
|
||||||
Uid: session.GetUserId(),
|
|
||||||
CType: stageConf.Episodetype,
|
|
||||||
ChapterId: stageConf.Chapterid,
|
|
||||||
StageId: stageConf.Id,
|
|
||||||
Star: map[int32]int32{},
|
|
||||||
Award: map[int32]bool{},
|
|
||||||
Ps: map[int32]int32{},
|
|
||||||
}
|
|
||||||
rsp.Data = append(rsp.Data, newData)
|
|
||||||
this.module.modelMline.addNewChapter(session.GetUserId(), newData)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ConfigNoFound,
|
|
||||||
Title: pb.ErrorCode_ConfigNoFound.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
session.SendMsg(string(this.module.GetType()), MlineGetListResp, rsp)
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,183 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/sys/configure"
|
|
||||||
cfg "go_dreamfactory/sys/configure/structs"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
const moduleName = "mline"
|
|
||||||
const (
|
|
||||||
game_mainchapter = "game_mainchapter.json"
|
|
||||||
game_mainstage = "game_mainstage.json"
|
|
||||||
game_mainstarreward = "game_mainstarreward.json"
|
|
||||||
)
|
|
||||||
|
|
||||||
///配置管理基础组件
|
|
||||||
type configureComp struct {
|
|
||||||
modules.MCompConfigure
|
|
||||||
module *Mline
|
|
||||||
hlock sync.RWMutex
|
|
||||||
|
|
||||||
_mapMilne map[int32][]int32 // key 章节id value cid
|
|
||||||
}
|
|
||||||
|
|
||||||
//组件初始化接口
|
|
||||||
func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
err = this.MCompConfigure.Init(service, module, comp, options)
|
|
||||||
this.module = module.(*Mline)
|
|
||||||
err = this.LoadMultiConfigure(map[string]interface{}{
|
|
||||||
game_mainchapter: cfg.NewGameMainChapter,
|
|
||||||
game_mainstage: cfg.NewGameMainStage,
|
|
||||||
game_mainstarreward: cfg.NewGameMainStarreward,
|
|
||||||
})
|
|
||||||
|
|
||||||
configure.RegisterConfigure(game_mainstage, cfg.NewGameMainStage, this.LoadMlineStage)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//读取配置数据
|
|
||||||
func (this *configureComp) GetConfigure(name string) (v interface{}, err error) {
|
|
||||||
return configure.GetConfigure(name)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetMainChapterConf(id int32) (data *cfg.GameMainChapterData) {
|
|
||||||
if v, err := this.GetConfigure(game_mainchapter); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainChapter); ok {
|
|
||||||
return configure.Get(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.module.Errorf("GameMainChapterData conf not found key :%d", id)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetMainStarRewardConf(boxId int32) (data []*cfg.GameMainStarrewardData) {
|
|
||||||
if v, err := this.GetConfigure(game_mainstarreward); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainStarreward); ok {
|
|
||||||
for _, v1 := range configure.GetDataList() {
|
|
||||||
if v1.Boxid == boxId {
|
|
||||||
data = append(data, v1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetMainStageConf(id int32) (data *cfg.GameMainStageData, err error) {
|
|
||||||
var (
|
|
||||||
v interface{}
|
|
||||||
)
|
|
||||||
if v, err = this.GetConfigure(game_mainstage); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainStage); ok {
|
|
||||||
data = configure.Get(id)
|
|
||||||
if data != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = comm.NewNotFoundConfErr(moduleName, game_mainstage, id)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取上一关卡信息
|
|
||||||
func (this *configureComp) GetPreMainChapter(stageId int32) (preStageID int32) {
|
|
||||||
if v, err := this.GetConfigure(game_mainstage); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainStage); ok {
|
|
||||||
for _, v1 := range configure.GetDataList() {
|
|
||||||
if v1.Previoustage == stageId {
|
|
||||||
preStageID = v1.Id
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetFirstChapterIDByType(iType int32) (conf *cfg.GameMainChapterData, err error) {
|
|
||||||
var (
|
|
||||||
v interface{}
|
|
||||||
)
|
|
||||||
if v, err = this.GetConfigure(game_mainchapter); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainChapter); ok {
|
|
||||||
for _, conf = range configure.GetDataList() {
|
|
||||||
if conf.ChapterType == iType {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = comm.NewNotFoundConfErr(moduleName, game_mainchapter, iType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetFirstStageIDByChapter(chapterID int32) *cfg.GameMainStageData {
|
|
||||||
if v, err := this.GetConfigure(game_mainstage); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainStage); ok {
|
|
||||||
for _, v := range configure.GetDataList() {
|
|
||||||
if v.Chapterid == chapterID {
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 红点用 获取所有章节数据
|
|
||||||
func (this *configureComp) GetAllChapterID() (chapter []int32) {
|
|
||||||
if v, err := this.GetConfigure(game_mainchapter); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainChapter); ok {
|
|
||||||
for _, v1 := range configure.GetDataList() {
|
|
||||||
chapter = append(chapter, v1.Id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) GetAllStageByChapterID(chapterID int32) (stage []int32) {
|
|
||||||
return this._mapMilne[chapterID]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *configureComp) LoadMlineStage() {
|
|
||||||
if v, err := this.GetConfigure(game_mainstage); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainStage); ok {
|
|
||||||
this.hlock.Lock()
|
|
||||||
defer this.hlock.Unlock()
|
|
||||||
this._mapMilne = make(map[int32][]int32)
|
|
||||||
for _, v1 := range configure.GetDataList() {
|
|
||||||
this._mapMilne[v1.Chapterid] = append(this._mapMilne[v1.Chapterid], v1.Id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// GM 专用 获取这个章节之前的所有章节信息
|
|
||||||
func (this *configureComp) GMGetPreStage(chapterID int32) (chapter []int32) {
|
|
||||||
curChapter := this.GetMainChapterConf(chapterID)
|
|
||||||
if curChapter == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if v, err := this.GetConfigure(game_mainchapter); err == nil {
|
|
||||||
if configure, ok := v.(*cfg.GameMainChapter); ok {
|
|
||||||
for _, conf := range configure.GetDataList() {
|
|
||||||
//if conf.ChapterType == curChapter.ChapterType {
|
|
||||||
if chapterID == conf.Id {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
chapter = append(chapter, conf.Id)
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
|
||||||
"go.mongodb.org/mongo-driver/x/bsonx"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ModelMline struct {
|
|
||||||
modules.MCompModel
|
|
||||||
module *Mline
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelMline) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
|
|
||||||
this.TableName = comm.TableMline
|
|
||||||
err = this.MCompModel.Init(service, module, comp, options)
|
|
||||||
this.module = module.(*Mline)
|
|
||||||
//创建uid索引
|
|
||||||
this.DB.CreateIndex(core.SqlTable(comm.TableMline), mongo.IndexModel{
|
|
||||||
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取章节信息
|
|
||||||
func (this *ModelMline) getMainlineList(uid string) (mLine []*pb.DBMline, err error) {
|
|
||||||
mLine = make([]*pb.DBMline, 0)
|
|
||||||
this.GetList(uid, &mLine)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ModelMline) getMainlineListByObj(uid string, obj string) (mLine *pb.DBMline, err error) {
|
|
||||||
mLine = &pb.DBMline{}
|
|
||||||
err = this.GetListObj(uid, obj, mLine)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改章节信息
|
|
||||||
func (this *ModelMline) modifyMlineData(uid string, objId string, data map[string]interface{}) error {
|
|
||||||
return this.module.modelMline.ChangeList(uid, objId, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 增加新的章节数据
|
|
||||||
func (this *ModelMline) addNewChapter(uId string, data *pb.DBMline) (err error) {
|
|
||||||
update := make(map[string]*pb.DBMline)
|
|
||||||
update[data.Id] = data
|
|
||||||
if err = this.AddLists(uId, update); err != nil {
|
|
||||||
this.module.Errorln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 增加新的章节数据
|
|
||||||
func (this *ModelMline) cleanChapter(uId string) (err error) {
|
|
||||||
|
|
||||||
if err = this.DelByUId(uId); err != nil {
|
|
||||||
this.module.Errorf("err:%v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 清除数据
|
|
||||||
func (this *ModelMline) cleanChapterDataById(uId string, ids ...string) (err error) {
|
|
||||||
if len(ids) > 0 {
|
|
||||||
this.module.Debugf("cleanChapterDataById:%s,%v", uId, ids)
|
|
||||||
if err = this.DelListlds(uId, ids); err != nil {
|
|
||||||
this.module.Errorf("err:%v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
@ -1,221 +0,0 @@
|
|||||||
package mline
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go_dreamfactory/comm"
|
|
||||||
"go_dreamfactory/lego/core"
|
|
||||||
"go_dreamfactory/modules"
|
|
||||||
"go_dreamfactory/pb"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Mline struct {
|
|
||||||
modules.ModuleBase
|
|
||||||
modelMline *ModelMline
|
|
||||||
service core.IService
|
|
||||||
api *apiComp
|
|
||||||
configure *configureComp
|
|
||||||
battle comm.IBattle
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewModule() core.IModule {
|
|
||||||
return &Mline{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Mline) GetType() core.M_Modules {
|
|
||||||
return comm.ModuleMline
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Mline) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
|
|
||||||
err = this.ModuleBase.Init(service, module, options)
|
|
||||||
this.service = service
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Mline) OnInstallComp() {
|
|
||||||
this.ModuleBase.OnInstallComp()
|
|
||||||
this.api = this.RegisterComp(new(apiComp)).(*apiComp)
|
|
||||||
this.modelMline = this.RegisterComp(new(ModelMline)).(*ModelMline)
|
|
||||||
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Mline) Start() (err error) {
|
|
||||||
err = this.ModuleBase.Start()
|
|
||||||
var module core.IModule
|
|
||||||
if module, err = this.service.GetModule(comm.ModuleBattle); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.battle = module.(comm.IBattle)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//红点查询
|
|
||||||
func (this *Mline) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]*pb.ReddotItem) {
|
|
||||||
reddot = make(map[comm.ReddotType]*pb.ReddotItem)
|
|
||||||
for _, v := range rid {
|
|
||||||
if v == comm.Reddot24101 {
|
|
||||||
reddot[comm.Reddot24101] = &pb.ReddotItem{
|
|
||||||
Rid: int32(comm.Reddot24101),
|
|
||||||
Activated: this.CheckPoint(session.GetUserId()),
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 红点检测
|
|
||||||
func (this *Mline) CheckPoint(uid string) bool {
|
|
||||||
list, err := this.modelMline.getMainlineList(uid)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for _, v := range list {
|
|
||||||
mLineConf := this.configure.GetMainChapterConf(v.ChapterId)
|
|
||||||
if mLineConf == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
var maxstar int32
|
|
||||||
for _, v1 := range v.Star {
|
|
||||||
maxstar += v1
|
|
||||||
}
|
|
||||||
awardConf := this.configure.GetMainStarRewardConf(mLineConf.Starreward)
|
|
||||||
for _, v1 := range awardConf {
|
|
||||||
if v1.Starnum > maxstar {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if _, ok := v.Award[v1.Starnum]; !ok { // 找到没有领奖的数据
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// 参数 难度 + 章节id
|
|
||||||
func (this *Mline) ModifyMlineDataByNanduID(session comm.IUserSession, id int32) (errdata *pb.ErrorData) {
|
|
||||||
var del []string
|
|
||||||
var newChapter []int32
|
|
||||||
var _mp map[int32]int32
|
|
||||||
_mp = make(map[int32]int32)
|
|
||||||
connf, err := this.configure.GetMainStageConf(id)
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_ReqParameterError,
|
|
||||||
Title: pb.ErrorCode_ReqParameterError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
list, err := this.modelMline.getMainlineList(session.GetUserId())
|
|
||||||
if err != nil {
|
|
||||||
errdata = &pb.ErrorData{
|
|
||||||
Code: pb.ErrorCode_DBError,
|
|
||||||
Title: pb.ErrorCode_DBError.ToString(),
|
|
||||||
Message: err.Error(),
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range list {
|
|
||||||
del = append(del, v.Id)
|
|
||||||
}
|
|
||||||
// 清除
|
|
||||||
this.modelMline.cleanChapterDataById(session.GetUserId(), del...)
|
|
||||||
|
|
||||||
_data := this.configure.GetAllStageByChapterID(connf.Chapterid)
|
|
||||||
newData := &pb.DBMline{
|
|
||||||
Id: primitive.NewObjectID().Hex(),
|
|
||||||
Uid: session.GetUserId(),
|
|
||||||
CType: connf.Episodetype,
|
|
||||||
ChapterId: connf.Chapterid,
|
|
||||||
StageId: id,
|
|
||||||
Star: map[int32]int32{},
|
|
||||||
Award: map[int32]bool{},
|
|
||||||
Ps: map[int32]int32{},
|
|
||||||
}
|
|
||||||
for _, v := range _data {
|
|
||||||
if v <= id {
|
|
||||||
newData.Star[v] = 7
|
|
||||||
}
|
|
||||||
}
|
|
||||||
itype := this.configure.GetMainChapterConf(connf.Chapterid).ChapterType
|
|
||||||
if _, ok := _mp[itype]; !ok {
|
|
||||||
_mp[itype] = newData.StageId
|
|
||||||
}
|
|
||||||
for k, v := range _mp {
|
|
||||||
if k == itype && v <= newData.StageId {
|
|
||||||
_mp[itype] = newData.StageId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
newChapter = append(newChapter, connf.Chapterid) // 更新
|
|
||||||
this.modelMline.addNewChapter(session.GetUserId(), newData)
|
|
||||||
// 获取之前的章节数据
|
|
||||||
for _, v := range this.configure.GMGetPreStage(connf.Chapterid) {
|
|
||||||
newData := &pb.DBMline{
|
|
||||||
Id: primitive.NewObjectID().Hex(),
|
|
||||||
Uid: session.GetUserId(),
|
|
||||||
CType: connf.Episodetype,
|
|
||||||
ChapterId: v,
|
|
||||||
StageId: 0,
|
|
||||||
Star: map[int32]int32{},
|
|
||||||
Award: map[int32]bool{},
|
|
||||||
Ps: map[int32]int32{},
|
|
||||||
}
|
|
||||||
_data := this.configure.GetAllStageByChapterID(v)
|
|
||||||
for _, v := range _data {
|
|
||||||
if v <= id {
|
|
||||||
newData.Star[v] = 7
|
|
||||||
newData.StageId = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
itype := this.configure.GetMainChapterConf(v).ChapterType
|
|
||||||
if _, ok := _mp[itype]; !ok {
|
|
||||||
_mp[itype] = newData.StageId
|
|
||||||
}
|
|
||||||
for k, v := range _mp {
|
|
||||||
if k == itype && v <= newData.StageId {
|
|
||||||
_mp[itype] = newData.StageId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
newChapter = append(newChapter, v) // 更新
|
|
||||||
this.modelMline.addNewChapter(session.GetUserId(), newData)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改扩展数据
|
|
||||||
if _, err := this.ModuleUser.GetUserExpand(session.GetUserId()); err == nil { // 统计主线进度
|
|
||||||
this.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{
|
|
||||||
"mline": _mp,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
func (this *Mline) GetUserMlineData(uid string, chapterType int32) (chapterId int32) {
|
|
||||||
if rst, err := this.ModuleUser.GetUserExpand(uid); err == nil { // 统计主线进度
|
|
||||||
_mp := rst.Mline
|
|
||||||
if v, ok := _mp[chapterType]; ok {
|
|
||||||
chapterId = v
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Mline) CheckCommpleteStage(uid string, stageId int32) (b bool) {
|
|
||||||
|
|
||||||
conf, err := this.configure.GetMainStageConf(stageId)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
_szData, err := this.modelMline.getMainlineList(uid)
|
|
||||||
if err == nil {
|
|
||||||
for _, v := range _szData {
|
|
||||||
|
|
||||||
if _, ok := v.Star[conf.Id]; ok {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
@ -84,7 +84,9 @@ func (this *apiComp) Sign(session comm.IUserSession, req *pb.SociatySignReq) (er
|
|||||||
this.module.modelSociaty.EventApp.Dispatch(comm.EventSociatyRankChanged, &SociatyListen{
|
this.module.modelSociaty.EventApp.Dispatch(comm.EventSociatyRankChanged, &SociatyListen{
|
||||||
sociaty: sociaty,
|
sociaty: sociaty,
|
||||||
})
|
})
|
||||||
go this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeWorldtaskid, sociaty.Lv)
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
||||||
|
this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeWorldtaskid, sociaty.Lv)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
if err := this.module.modelSociaty.updateSociaty(sociaty.Id, update); err != nil {
|
if err := this.module.modelSociaty.updateSociaty(sociaty.Id, update); err != nil {
|
||||||
errdata = &pb.ErrorData{
|
errdata = &pb.ErrorData{
|
||||||
|
@ -82,7 +82,7 @@ func (this *ModuleSys) CheckOpenCond(session comm.IUserSession, itype comm.Openc
|
|||||||
if list, err = this.modelSys.GetOpenCondList(session.GetUserId()); err != nil {
|
if list, err = this.modelSys.GetOpenCondList(session.GetUserId()); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer session.Push()
|
|
||||||
update = make(map[string]interface{})
|
update = make(map[string]interface{})
|
||||||
switch itype {
|
switch itype {
|
||||||
case comm.OpencondTypePlatlv:
|
case comm.OpencondTypePlatlv:
|
||||||
|
@ -275,8 +275,11 @@ func (this *ModelUser) changelv(session comm.IUserSession, lv int32, exp int64,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
this.module.chat.SendSysChatToUser(session, comm.ChatSystem12, lv, 0, name)
|
this.module.chat.SendSysChatToUser(session, comm.ChatSystem12, lv, 0, name)
|
||||||
go this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypePlatlv, lv)
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
||||||
|
this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypePlatlv, lv)
|
||||||
|
})
|
||||||
session.Push()
|
session.Push()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *ModelUser) CleanUserMerchantmoney(session comm.IUserSession) (err error) {
|
func (this *ModelUser) CleanUserMerchantmoney(session comm.IUserSession) (err error) {
|
||||||
|
@ -150,6 +150,8 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WTaskFinishReq) (
|
|||||||
if conf.Des == 5 {
|
if conf.Des == 5 {
|
||||||
this.module.caravan.TaskComplete(session, req.Tid)
|
this.module.caravan.TaskComplete(session, req.Tid)
|
||||||
}
|
}
|
||||||
go this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeWorldtaskid, req.Tid)
|
go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) {
|
||||||
|
this.module.ModuleSys.CheckOpenCond(session.Clone(), comm.OpencondTypeWorldtaskid, req.Tid)
|
||||||
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user