| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package scout
- import (
- "f1-game/internal/code"
- "f1-game/internal/enum"
- "f1-game/internal/facade"
- nameRoute "f1-game/internal/name/route"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- mapCall "f1-game/nodes/map/internal/call"
- "f1-game/nodes/map/internal/db"
- dbMapPlayer "f1-game/nodes/map/internal/db/data/player"
- "f1-game/nodes/map/player/battle"
- clog "github.com/cherry-game/cherry/logger"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func Service() *service {
- return &service{}
- }
- type service struct {
- facade.PlayerServiceBase[*db.MapPlayerTable]
- }
- func (*service) OnLogin(playerTable *db.MapPlayerTable, session *cproto.Session) {
- // 初始化侦察队列 // TODO 当前默认1个
- if playerTable.Scouts.ActiveQueue(1) {
- playerTable.Save2Queue()
- }
- }
- func (*service) Push(mapPlayerTable *db.MapPlayerTable, session *cproto.Session) {
- // 推送地图侦察列表
- resp := mapPlayerTable.Scouts.ToProto()
- sessions.PushWithSession(session, nameRoute.PushMapPlayer_ScoutList, resp)
- }
- func (*service) ChangePush(mapPlayerTable *db.MapPlayerTable, changeQueueIDs ...int32) {
- if len(changeQueueIDs) <= 0 {
- return
- }
- resp := &pb.MapScoutList{}
- for _, queueID := range changeQueueIDs {
- scout, found := mapPlayerTable.Scouts.GetScout(queueID)
- if !found {
- clog.Warnf("[ChangePush] scout not found. playerID=%d, queueID=%d", mapPlayerTable.PlayerID, queueID)
- continue
- }
- resp.List = append(resp.List, scout.ToScoutProto(queueID))
- }
- if len(resp.List) > 0 {
- sessions.PushPlayer(mapPlayerTable.PlayerID, nameRoute.PushMapPlayer_ScoutChange, resp)
- }
- }
- func (p *service) CheckScoutSuccess(playerTable *db.MapPlayerTable, queueID int32, scout *dbMapPlayer.Scout) int32 {
- // callwait logic 判断玩家现在是否还在原来的位置
- resp, errCode := mapCall.Logic.ScoutCheck(playerTable.PlayerID, scout.ObjectID)
- if code.IsFail(errCode) {
- clog.Warnf("[CheckScoutSuccess] scout check fail. playerID=%d, queueID=%d, errCode=%d", playerTable.PlayerID, queueID, errCode)
- return errCode
- }
- result := enum.ScoutState_Success
- // 位置已发生改变
- if scout.IsPointChanged(resp.Point) {
- result = enum.ScoutState_Lost
- }
- // 如果当前处于保护中
- if resp.TargetState != 0 {
- result = enum.ScoutState_Protected
- }
- if result != enum.ScoutState_Success {
- var (
- playerID = playerTable.PlayerID
- playerName = playerTable.PlayerName
- leagueID = playerTable.LeagueID
- targetPlayerID = resp.TargetPlayerID
- targetPlayerName = resp.TargetPlayerName
- )
- // 构建战报
- reportGroup := battle.Service().BuildScoutReportGroup(playerID, targetPlayerID, leagueID,
- playerName, targetPlayerName, scout.Point.ToProto(), nil, result)
- // 发送侦察失败战报
- battle.Service().AddReport(playerID, reportGroup)
- return code.ScoutFail
- }
- return result
- }
|