| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package gameMap
- import (
- capp "f1-game/internal/cherry_app"
- "f1-game/internal/component/redis"
- "f1-game/internal/data"
- "f1-game/internal/enum"
- facade "f1-game/internal/facade"
- nameActor "f1-game/internal/name/actor"
- nameRedis "f1-game/internal/name/redis"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/nodes/game/internal/db"
- gameFacade "f1-game/nodes/game/internal/facade"
- cfacade "github.com/cherry-game/cherry/facade"
- clog "github.com/cherry-game/cherry/logger"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- var srv = &service{}
- func Service() *service {
- return srv
- }
- type service struct {
- facade.PlayerServiceBase[*db.PlayerTable]
- }
- func (p *service) SyncMapPlayer(playerID int64) {
- playerTable, _ := db.GetPlayerTable(playerID)
- if playerTable.Map.MapNodeID == "" {
- return
- }
- // 同步数据到 Map 节点
- p.syncMapPlayer(playerTable)
- }
- // 尝试分配地图并同步数据
- func (p *service) OnLogin(playerTable *db.PlayerTable, session *cproto.Session) {
- if playerTable.Map.MapNodeID == "" {
- // TODO 新玩家尝试分配到 map-1 节点,后续通过赛季还是匹配自动分配
- mapNodeID := "map-1"
- _, ok := capp.App().Discovery().GetMember(mapNodeID)
- if !ok {
- clog.Warnf("map node [%s] not found", mapNodeID)
- return
- }
- playerTable.Map.Join(mapNodeID)
- playerTable.Save2Queue()
- redis.Game.SavePlayerDataFields(playerTable.PlayerID, map[string]any{nameRedis.Player_MapNodeID: mapNodeID})
- // TODO 分配沙盘聊天室,有了匹配规则再统一改
- nodeConfig, found := data.Node.GetByNodeID(mapNodeID)
- if found {
- gameFacade.Chat.CreateChatRoom(playerTable.PlayerID, enum.ChatType_Map, int64(nodeConfig.MapID))
- }
- }
- }
- func (p *service) syncMapPlayer(playerTable *db.PlayerTable) {
- // 同步数据到 Map 节点
- sync := &pb.SyncMapPlayerRequest{
- PlayerID: playerTable.PlayerID,
- PlayerName: playerTable.Lord.Name,
- IconID: playerTable.Lord.IconID,
- FrameID: playerTable.Lord.FrameID,
- GameNodeID: playerTable.NodeID,
- }
- targetPath := cfacade.NewChildPath(playerTable.Map.MapNodeID, nameActor.Map_Player, playerTable.PlayerID)
- capp.Call(targetPath, nameRemote.MapPlayer_SyncData, sync)
- }
|