新主线挑战

This commit is contained in:
meixiongfeng 2023-01-06 15:42:42 +08:00
parent 61cc2866fa
commit 31a2973f36
4 changed files with 154 additions and 102 deletions

View File

@ -5,51 +5,77 @@ import (
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"go.mongodb.org/mongo-driver/bson/primitive"
"google.golang.org/protobuf/proto"
)
//参数校验
func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.MlineChallengeReq) (code pb.ErrorCode) {
if req.StageId == 0 {
code = pb.ErrorCode_ReqParameterError
}
return
}
///挑战主线关卡
func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MlineChallengeReq) (code pb.ErrorCode, data proto.Message) {
var (
curChapter *pb.DBMainline // 当前章节信息
ps int32
curChapter *pb.DBMline // 当前章节信息
ps int32 // 消耗的体力
psAnt *cfg.Gameatn
stageConf *cfg.GameMainStageData
)
code = this.ChallengeCheck(session, req)
if code != pb.ErrorCode_Success {
if code = this.ChallengeCheck(session, req); code != pb.ErrorCode_Success {
return // 参数校验失败直接返回
}
// 校验关卡存不存在
node := this.module.configure.GetMainStageConf(req.StageId)
if node == nil { // 配置文件校验
if stageConf = this.module.configure.GetMainStageConf(req.StageId); stageConf == nil { // 配置文件校验
code = pb.ErrorCode_MainlineNotFindChapter
return
}
if curChapter.Ps != 0 {
if code = this.module.ConsumeRes(session, node.PsMg, true); code != pb.ErrorCode_Success { // 扣1点
return
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
for _, v := range list {
if stageConf.Chapterid == v.ChapterId {
curChapter = v
break
}
}
if curChapter == nil { // 校验是不是新的数据
if stageConf.Previoustage == 0 { // 创建一条新的章节数据
newData := &pb.DBMline{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
CType: stageConf.Episodetype,
ChapterId: stageConf.Chapterid,
StageId: stageConf.Id,
Star: map[int32]int32{},
Awared: map[int32]bool{},
Ps: map[int32]int32{},
}
this.module.modelMline.addNewChapter(session.GetUserId(), newData)
}
}
if v, ok := curChapter.Ps[req.StageId]; ok {
if v != 0 { // 扣1点
if code = this.module.ConsumeRes(session, stageConf.PsMg, true); code != pb.ErrorCode_Success { // 扣1点
return
}
}
} else {
for _, v := range node.PsConsume {
for _, v := range stageConf.PsConsume {
if v.A == "attr" && v.T == "ps" {
ps += v.N
}
}
for _, v := range node.PsMg {
for _, v := range stageConf.PsMg {
if v.A == "attr" && v.T == "ps" {
ps += v.N
}
}
psAnt = &cfg.Gameatn{
psAnt = &cfg.Gameatn{ // 构建一个atn 对象
A: "attr",
T: "ps",
N: ps,
@ -58,12 +84,11 @@ func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MlineChallenge
return
}
curChapter.Ps = ps
update := map[string]interface{}{
"ps": ps,
}
curChapter.Ps[req.StageId] = ps
err := this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
err := this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, map[string]interface{}{
"ps": curChapter.Ps,
})
if err != nil {
code = pb.ErrorCode_DBError
return
@ -74,7 +99,7 @@ func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MlineChallenge
Ptype: pb.PlayType_mainline,
Title: "",
Format: req.Battle,
Mformat: node.FormatList,
Mformat: stageConf.FormatList,
})
if code != pb.ErrorCode_Success {
return

View File

@ -21,32 +21,37 @@ func (this *apiComp) ChallengeOverCheck(session comm.IUserSession, req *pb.Mline
///挑战主线关卡
func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.MlineChallengeOverReq) (code pb.ErrorCode, data proto.Message) {
var (
mainline *pb.DBMline // 当前章节信息
res []*cfg.Gameatn // 小章节奖励
isWin bool
hero []string //新的英雄
newhero []string //新的英雄
curChapter *pb.DBMline // 当前章节信息
stageConf *cfg.GameMainStageData
res []*cfg.Gameatn // 小章节奖励
isWin bool
first bool // 判断是否是首通
update map[string]interface{}
rsp *pb.MlineChallengeOverResp
)
rsp = &pb.MlineChallengeOverResp{}
update = make(map[string]interface{})
res = make([]*cfg.Gameatn, 0)
hero = make([]string, 0)
newhero = make([]string, 0)
code = this.ChallengeOverCheck(session, req)
if code != pb.ErrorCode_Success {
return // 参数校验失败直接返回
}
// 校验关卡存不存在
// mainline = this.module.modelMline.getOneChapterInfo(session.GetUserId(), req.ChapterObj)
// if mainline == nil {
// code = pb.ErrorCode_MainlineNotFound
// return
// }
node := this.module.configure.GetMainStageConf(req.StageId)
if node == nil { // 配置文件校验
if stageConf = this.module.configure.GetMainStageConf(req.StageId); stageConf == nil { // 配置文件校验
code = pb.ErrorCode_MainlineNotFindChapter
return
}
list, _ := this.module.modelMline.getMainlineList(session.GetUserId())
for _, v := range list {
if stageConf.Chapterid == v.ChapterId {
curChapter = v
break
}
}
if curChapter == nil {
code = pb.ErrorCode_MainlineNotFindChapter
return
}
// 校验通过
code, isWin = this.module.battle.CheckBattleReport(session, req.Report)
@ -54,65 +59,68 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.MlineChall
return
}
if !isWin { // 战斗失败直接返回
// 返还
//mainline.Ps = 0
this.module.modelMline.modifyMlineData(session.GetUserId(), mainline.Id, map[string]interface{}{
"ps": 0,
})
if code = this.module.DispenseRes(session, node.PsConsume, true); code != pb.ErrorCode_Success { // 返还预扣体力
return
if !isWin { // 战斗失败返还扣除的体力
if v, ok := curChapter.Ps[req.StageId]; ok && v > 0 {
if code = this.module.DispenseRes(session, stageConf.PsConsume, true); code != pb.ErrorCode_Success { // 返还预扣体力
return
}
}
curChapter.Ps[req.StageId] = 0 // 清空预扣体力值
update["ps"] = curChapter.Ps
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
code = pb.ErrorCode_BattleNoWin
return
}
// 判断是不是首通
if _, ok := curChapter.Star[req.StageId]; !ok {
first = true
curChapter.Star[req.StageId] = 1
update["star"] = curChapter.Star
}
curChapter.Ps[req.StageId] = 0 // 清空预扣体力值
update["ps"] = curChapter.Ps
res = append(res, node.Commonaward...)
for _, v := range node.Commonaward {
if v.A == comm.HeroType {
hero = append(hero, v.T)
curChapter.StageId = req.StageId
update["stageId"] = curChapter.StageId
if first { // 发奖
if code = this.module.DispenseRes(session, stageConf.Firstaward, true); code != pb.ErrorCode_Success {
this.module.Debugf("DispenseRes err:+%v", res)
}
for _, v := range stageConf.Firstaward {
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
})
}
} else {
if code = this.module.DispenseRes(session, stageConf.Commonaward, true); code != pb.ErrorCode_Success {
this.module.Debugf("DispenseRes err:+%v", res)
}
for _, v := range stageConf.Commonaward {
rsp.Reward = append(rsp.Reward, &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
})
}
}
if len(hero) > 0 {
ishave := this.module.ModuleUser.CheckTujianHero(session, hero)
for i, v := range ishave {
if !v {
newhero = append(newhero, hero[i])
}
}
}
mainline.StageId = req.StageId
//mainline.Ps = 0 // 重置预扣体力
update := map[string]interface{}{
"stageId": mainline.StageId,
}
if node.Episodetype == comm.MainLineBoss { // 打完boss 设置领奖状态
update["awaredID"] = pb.AwaredType_TypeAvailable
}
err := this.module.modelMline.modifyMlineData(session.GetUserId(), mainline.Id, update)
if err != nil {
code = pb.ErrorCode_DBError
return
}
// 发奖
if code = this.module.DispenseRes(session, res, true); code != pb.ErrorCode_Success {
this.module.Debugf("DispenseRes err:+%v", res)
}
// 加经验
if node.Episodetype != 5 && node.Episodetype != 7 {
// 加英雄经验
if stageConf.HeroExp > 0 {
if req.Report != nil && req.Report.Info != nil && len(req.Report.Info.Redflist) > 0 {
for _, v := range req.Report.Info.Redflist[0].Team {
if node.Exp > 0 && !v.Ishelp { // 助战英雄不加经验
this.module.ModuleHero.AddHeroExp(session, v.Oid, node.Exp)
if !v.Ishelp { // 助战英雄不加经验
this.module.ModuleHero.AddHeroExp(session, v.Oid, stageConf.HeroExp)
}
}
}
}
session.SendMsg(string(this.module.GetType()), MlineChallengeOverResp, &pb.MlineChallengeOverResp{})
this.module.modelMline.modifyMlineData(session.GetUserId(), curChapter.Id, update)
rsp.Data = curChapter
session.SendMsg(string(this.module.GetType()), MlineChallengeOverResp, rsp) // 数据推送
// 主线任务统计 Rtype60
this.module.ModuleRtask.SendToRtask(session, comm.Rtype60, 1)
this.module.ModuleRtask.SendToRtask(session, comm.Rtype61, int32(req.StageId))

View File

@ -22,7 +22,7 @@ func (this *ModelMline) Init(service core.IService, module core.IModule, comp co
// 获取章节信息
func (this *ModelMline) getMainlineList(uid string) (mLine []*pb.DBMline, err error) {
mLine = make([]*pb.DBMline, 0)
err = this.GetList(uid, &mLine)
this.GetList(uid, &mLine)
return
}
@ -32,13 +32,14 @@ func (this *ModelMline) modifyMlineData(uid string, objId string, data map[strin
}
// 增加新的章节数据
func (this *ModelMline) addNewChapter(uId string, data map[string]interface{}) (err error) {
if err = this.AddLists(uId, data); err != nil {
this.module.Errorf("err:%v", err)
return
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 nil
return err
}
// 获取指定章节数据

View File

@ -630,6 +630,8 @@ type BattleReport struct {
Incmd []*BattleCmd `protobuf:"bytes,3,rep,name=incmd,proto3" json:"incmd"` //输入指令
Outcmd []*BattleCmd `protobuf:"bytes,4,rep,name=outcmd,proto3" json:"outcmd"` //输出指令
Completetask []int32 `protobuf:"varint,5,rep,packed,name=completetask,proto3" json:"completetask"` //完成任务
Death int32 `protobuf:"varint,6,opt,name=death,proto3" json:"death"` // 死亡人数
Round int32 `protobuf:"varint,7,opt,name=round,proto3" json:"round"` // 回合数
}
func (x *BattleReport) Reset() {
@ -699,6 +701,20 @@ func (x *BattleReport) GetCompletetask() []int32 {
return nil
}
func (x *BattleReport) GetDeath() int32 {
if x != nil {
return x.Death
}
return 0
}
func (x *BattleReport) GetRound() int32 {
if x != nil {
return x.Round
}
return 0
}
//公用消息结构代码
type BattleRpcMessage struct {
state protoimpl.MessageState
@ -892,7 +908,7 @@ var file_battle_battle_msg_proto_rawDesc = []byte{
0x65, 0x43, 0x6d, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x64, 0x74, 0x79, 0x70, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6d, 0x64, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52,
0x61, 0x6c, 0x75, 0x65, 0x22, 0xe1, 0x01, 0x0a, 0x0c, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52,
0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f,
0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x74, 0x69,
@ -903,18 +919,20 @@ var file_battle_battle_msg_proto_rawDesc = []byte{
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6d, 0x64,
0x52, 0x06, 0x6f, 0x75, 0x74, 0x63, 0x6d, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x70,
0x6c, 0x65, 0x74, 0x65, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c,
0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x74, 0x61, 0x73, 0x6b, 0x22, 0x66, 0x0a, 0x10,
0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x70, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x72, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72,
0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61,
0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04,
0x64, 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x68,
0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73,
0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x63,
0x68, 0x65, 0x63, 0x6b, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x14, 0x0a, 0x05,
0x64, 0x65, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x61,
0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x66, 0x0a, 0x10, 0x42, 0x61, 0x74, 0x74,
0x6c, 0x65, 0x52, 0x70, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x72, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x69, 0x64, 0x12, 0x16,
0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
0x22, 0x2e, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x63, 0x68, 0x65, 0x63,
0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b,
0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (