| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- package mapLeague
- import (
- "f1-game/internal/code"
- "f1-game/internal/component/redis"
- "f1-game/internal/enum"
- nameLocal "f1-game/internal/name/local"
- nameRemote "f1-game/internal/name/remote"
- nameRoute "f1-game/internal/name/route"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- "f1-game/internal/types"
- mapCall "f1-game/nodes/map/internal/call"
- dbLeague "f1-game/nodes/map/internal/db/data/league"
- mapTypes "f1-game/nodes/map/internal/types"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func (p *actorLeague) initAssemble() {
- p.Local().Register(nameLocal.MapLeague_AssembleList, p.assembleList)
- p.Local().Register(nameLocal.MapLeague_AssembleStop, p.assembleStop)
- p.Local().Register(nameLocal.MapLeague_AssembleKick, p.assembleKick)
- p.Local().Register(nameLocal.MapLeague_AssembleDepart, p.assembleDepart)
- p.Local().Register(nameLocal.MapLeague_AssembleQuit, p.assembleQuit)
- p.Remote().Register(nameRemote.MapLeague_AssembleAdd, p.assembleAdd)
- p.Remote().Register(nameRemote.MapLeague_AssembleUpdate, p.assembleUpdate)
- }
- // 获取集结列表
- func (p *actorLeague) assembleList(session *cproto.Session, _ *pb.None) {
- proto := pb.MapAssembleList{}
- for _, assemble := range p.leagueTable.Assembles {
- proto.List = append(proto.List, assemble.ToProto())
- }
- p.Response(session, &proto)
- }
- func (p *actorLeague) assembleStop(session *cproto.Session, req *pb.I64) {
- assembleID := req.GetValue()
- assemble, ok := p.leagueTable.Assembles.Get(assembleID)
- if !ok {
- p.ResponseCode(session, code.MapAssemble_NotFound)
- return
- }
- if assemble.LeadPlayerID != sessions.GetPlayerID(session) {
- p.ResponseCode(session, code.MapAssemble_NotLeader)
- return
- }
- errCode := mapCall.Logic.AssembleStop(assemble.AssembleID)
- if code.IsFail(errCode) {
- p.Debug("assemble stop fail: LeagueID = %d, errCode = %d", p.leagueID, errCode)
- p.ResponseCode(session, errCode)
- return
- }
- // 删除集结信息
- p.leagueTable.Assembles.Remove(assemble.AssembleID)
- p.leagueTable.Save2Queue()
- p.ResponseCode(session, code.OK)
- // 通知联盟成员
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{Value: -1})
- }
- func (p *actorLeague) assembleKick(session *cproto.Session, req *pb.I64I64) {
- var (
- assembleID = req.Key
- kickMarchObjectID = req.Value
- )
- assemble, ok := p.leagueTable.Assembles.Get(assembleID)
- if !ok {
- p.ResponseCode(session, code.MapAssemble_NotFound)
- return
- }
- // 不是自己的集结队列
- if assemble.LeadPlayerID != sessions.GetPlayerID(session) {
- p.ResponseCode(session, code.MapAssemble_NotLeader)
- return
- }
- // 不能踢队长
- if assembleID == kickMarchObjectID {
- p.ResponseCode(session, code.MapAssemble_KickLeader)
- return
- }
- // 成员不在集结队列中
- if !assemble.ContainsMarch(kickMarchObjectID) {
- p.ResponseCode(session, code.MapAssemble_NotInAssemble)
- return
- }
- errCode := mapCall.Logic.AssembleQuit(assembleID, kickMarchObjectID)
- if code.IsFail(errCode) {
- p.Debug("assemble kick fail: LeagueID = %d, errCode = %d", p.leagueID, errCode)
- p.ResponseCode(session, errCode)
- return
- }
- assemble.RemoveMember(kickMarchObjectID)
- p.leagueTable.Save2Queue()
- p.ResponseCode(session, code.OK)
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{})
- }
- func (p *actorLeague) assembleDepart(session *cproto.Session, req *pb.I64) {
- assemble, ok := p.leagueTable.Assembles.Get(req.Value)
- if !ok {
- p.ResponseCode(session, code.MapAssemble_NotFound)
- return
- }
- // 不是自己的集结队列
- if assemble.LeadPlayerID != sessions.GetPlayerID(session) {
- p.ResponseCode(session, code.MapAssemble_NotLeader)
- return
- }
- errCode := mapCall.Logic.AssembleDepart(assemble.AssembleID)
- if code.IsFail(errCode) {
- p.Debug("assemble depart fail: LeagueID = %d, errCode = %d", p.leagueID, errCode)
- p.ResponseCode(session, errCode)
- return
- }
- // 设置出发标记
- assemble.IsDepart = true
- p.leagueTable.Save2Queue()
- p.ResponseCode(session, code.OK)
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{})
- }
- func (p *actorLeague) assembleQuit(session *cproto.Session, req *pb.I64) {
- assemble, ok := p.leagueTable.Assembles.Get(req.Value)
- if !ok {
- p.ResponseCode(session, code.MapAssemble_NotFound)
- return
- }
- playerID := sessions.GetPlayerID(session)
- var foundMember *mapTypes.AssembleMember
- for _, member := range assemble.JoinList {
- if member.PlayerID == playerID {
- foundMember = member
- break
- }
- }
- if foundMember == nil {
- p.ResponseCode(session, code.MapAssemble_NotInAssemble)
- return
- }
- errCode := mapCall.Logic.AssembleQuit(assemble.AssembleID, foundMember.MarchObjectID)
- if code.IsFail(errCode) {
- p.Debug("assemble quit fail: LeagueID = %d, errCode = %d", p.leagueID, errCode)
- p.ResponseCode(session, errCode)
- return
- }
- assemble.RemoveMember(foundMember.MarchObjectID)
- p.leagueTable.Save2Queue()
- p.ResponseCode(session, code.OK)
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{})
- }
- func (p *actorLeague) assembleAdd(req *pb.NewAssemble) {
- p.Debug("[assembleAdd] req = %v", req)
- assemble := &dbLeague.Assemble{
- AssembleID: req.LegionObjectID,
- LeadPlayerID: req.LeadMember.PlayerID,
- StartPoint: types.NewPoint(req.Point.X, req.Point.Y),
- EndTime: req.EndTime,
- TargetObjectID: req.TargetObjectID,
- TargetConfigID: req.TargetConfigID,
- TargetObjectType: enum.ObjectType(req.TargetObjectType),
- TargetPoint: types.NewPoint(req.TargetPoint.X, req.TargetPoint.Y),
- }
- p.addAssembleMember(assemble, req.LeadMember)
- p.leagueTable.Assembles.Put(req.LegionObjectID, assemble)
- p.leagueTable.Save2Queue()
- // 通知联盟成员
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{Value: 1})
- }
- // 集结更新
- func (p *actorLeague) assembleUpdate(req *pb.AssembleUpdate) {
- p.Debug("[assembleUpdate] req = %+v", req)
- assemble, ok := p.leagueTable.Assembles.Get(req.LegionObjectID)
- if !ok {
- return
- }
- // 解散
- if req.IsDisband {
- p.leagueTable.Assembles.Remove(req.LegionObjectID)
- p.leagueTable.Save2Queue()
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{Value: -1})
- return
- }
- var update bool
- if req.NewMember != nil {
- p.addAssembleMember(assemble, req.NewMember)
- update = true
- }
- if req.QuitMember > 0 {
- assemble.RemoveMember(req.QuitMember)
- update = true
- }
- if req.IsDepart {
- assemble.IsDepart = true
- update = true
- }
- if update {
- p.leagueTable.Save2Queue()
- p.pushToMembers(nameRoute.PushMapLeague_AssembleUpdate, &pb.I32{})
- }
- }
- func (p *actorLeague) addAssembleMember(assemble *dbLeague.Assemble, req *pb.AssembleMember) {
- playerData, _, heroData := redis.Game.GetPlayerTeamHeroData(req.PlayerID, req.TeamID, req.HeroGUID)
- if playerData != nil {
- req.PlayerName = playerData.PlayerName
- }
- member := &mapTypes.AssembleMember{
- PlayerID: req.PlayerID,
- PlayerName: req.PlayerName,
- MarchObjectID: req.MarchObjectID,
- TroopsNum: req.TroopsNum,
- MarchArriveTime: req.ArriveTime,
- }
- if heroData != nil {
- member.HeroConfigID = heroData.ConfigID
- member.HeroLevel = heroData.Level
- member.HeroStar = heroData.Star
- }
- assemble.JoinList = append(assemble.JoinList, member)
- }
|