go_dreamfactory/modules/stonehenge/api_gotoroom.go
2023-07-27 18:54:23 +08:00

78 lines
2.0 KiB
Go

package stonehenge
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
)
//参数校验
func (this *apiComp) GotoRoomCheck(session comm.IUserSession, req *pb.StonehengeGotoRoomReq) (errdata *pb.ErrorData) {
if req.Portal == 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
func (this *apiComp) GotoRoom(session comm.IUserSession, req *pb.StonehengeGotoRoomReq) (errdata *pb.ErrorData) {
var (
stone *pb.DBStonehenge
update map[string]interface{}
bCheck bool
)
update = make(map[string]interface{})
if errdata = this.GotoRoomCheck(session, req); errdata != nil {
return
}
stone = this.module.modelStonehenge.GetStonehengeData(session.GetUserId())
// 校验传送门
if stone.Rooms != nil {
if !stone.Rooms.Complete { // 上一关好没有完成 不能进下一关
errdata = &pb.ErrorData{
Code: pb.ErrorCode_StonehengeGotoRoomFailed,
Message: pb.ErrorCode_StonehengeGotoRoomFailed.ToString(),
}
return
}
for _, v := range stone.Rooms.Portal {
if v == req.Portal {
bCheck = true
break
}
}
}
if !bCheck {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_StonehengePortalErr,
Message: pb.ErrorCode_StonehengePortalErr.ToString(),
}
return
}
stone.CurRoomIndes += 1
update["curRoomIndes"] = stone.CurRoomIndes
stone.Rooms = &pb.RoomData{
Eventid: map[int32]bool{},
Roomid: req.Portal,
Index: stone.CurRoomIndes,
}
stone.Rooms.Portal = this.module.configure.GetRoomGroupDataByLottery(req.Portal)
// 校验是否进boss
if this.module.configure.GetFloorConfByStageId(stone.StageID)-1 == stone.CurRoomIndes {
if stage := this.module.modelStonehenge.GetStoneBoosData(stone.StageID); stage != nil {
stone.Rooms.Portal = []int32{stage.Roomid}
}
}
update["rooms"] = stone.Rooms
this.module.modelStonehenge.ChangeStonehengeData(session.GetUserId(), update)
session.SendMsg(string(this.module.GetType()), "gotoroom", &pb.StonehengeGotoRoomResp{
Room: stone.Rooms,
Portal: req.Portal,
})
return
}