package battle import ( capp "f1-game/internal/cherry_app" "f1-game/internal/component/redis" "f1-game/internal/enum" "f1-game/internal/event" "f1-game/internal/facade" nameRedis "f1-game/internal/name/redis" 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" dbBattleReport "f1-game/nodes/map/internal/db/data/battle_report" cherryNUID "github.com/cherry-game/cherry/extend/nuid" ctime "github.com/cherry-game/cherry/extend/time" ) func Service() *service { return &service{} } type service struct { facade.PlayerServiceBase[*db.MapPlayerTable] } // 增加战报组 func (p *service) AddReport(playerID int64, reportGroup *pb.ReportGroup) { if len(reportGroup.List) < 1 { return } // 战报放入redis redis.Game.AddReports(reportGroup.GroupID, reportGroup.List...) // 添加个人战报记录 mapPlayerReportTable := db.GetMapPlayerReportTable(playerID) dbBattleReport.AddReportGroup(&mapPlayerReportTable.BattleReport.Groups, reportGroup.GroupID, enum.ReportCategory(reportGroup.Category), reportGroup.List[0].Time) mapPlayerReportTable.Save2Queue() // 通知客户端 sessions.PushPlayer(playerID, nameRoute.PushMapPlayer_ReportNew, reportGroup) playerTable := db.GetMapPlayerTable(playerID) if playerTable != nil && playerTable.LeagueID > 0 && !enum.IsDurabilityBattle(enum.TileBattleType(reportGroup.List[0].BattleType)) { // 添加联盟战报 mapCall.League.BattleReportAdd(playerTable.LeagueID, reportGroup) } // 发送战斗结果事件 capp.PostEvent(event.NewBattleResult(playerID, reportGroup)) } // 构建侦察战报 // result 0成功 1 func (p *service) BuildScoutReportGroup(attackerID, defenderID, attackerLeagueID int64, attackerName, defenderName string, point *pb.Point, rewards *pb.AssetList, result int32) *pb.ReportGroup { // 战报组 reportGroup := &pb.ReportGroup{ GroupID: cherryNUID.Next(), Category: int32(enum.ReportCategory_Scout), } // 战报 report := &pb.Report{ ReportID: cherryNUID.Next(), Attacker: p.buildBattleReportTeam(attackerID, attackerName, attackerLeagueID), Defender: p.buildBattleReportTeam(defenderID, defenderName, 0), Point: point, ReportResult: &pb.ReportResult{ Rewards: rewards, }, // TODO 侦察原因暂时放这里 Result: result, Time: ctime.Now().ToMillisecond(), } reportGroup.List = append(reportGroup.List, report) return reportGroup } func (p *service) buildBattleReportTeam(playerID int64, playerName string, leagueID int64) *pb.BattleReportTeam { var leagueName string if leagueID > 0 { playerData := redis.Game.GetPlayerData(playerID, nameRedis.PlayerLeagueFields...) if playerData != nil { leagueName = playerData.LeagueName } } return &pb.BattleReportTeam{ PlayerID: playerID, PlayerName: playerName, LeagueID: leagueID, LeagueName: leagueName, } }