package sandMap import ( capp "f1-game/internal/cherry_app" checkCenter "f1-game/internal/component/check_center" funcLoad "f1-game/internal/component/func_load" cgops "f1-game/internal/component/gops" "f1-game/internal/component/redis" "f1-game/internal/constant" "f1-game/internal/data" genPool "f1-game/internal/gen_pool" nameActor "f1-game/internal/name/actor" nameRemote "f1-game/internal/name/remote" "f1-game/internal/sessions" mapAOI "f1-game/nodes/map/aoi" mapExchange "f1-game/nodes/map/exchange" "f1-game/nodes/map/internal/db" facadeInit "f1-game/nodes/map/internal/facade/init" mapLeague "f1-game/nodes/map/league" mapLogic "f1-game/nodes/map/logic" "f1-game/nodes/map/ops" mapPathfind "f1-game/nodes/map/pathfind" mapPlayer "f1-game/nodes/map/player" "f1-game/nodes/map/rank" "f1-game/nodes/map/scout" mapSeason "f1-game/nodes/map/season" mapUnion "f1-game/nodes/map/union" "github.com/cherry-game/cherry" csnowflake "github.com/cherry-game/cherry/extend/snowflake" cfacade "github.com/cherry-game/cherry/facade" clog "github.com/cherry-game/cherry/logger" ) func Run(node cfacade.INode) { app := cherry.ConfigureNode( node, false, cherry.Cluster, ) app.Register(initBeforeFunc()) app.Register(cgops.New()) app.Register(data.New()) app.Register(redis.NewClients( redis.GUID, redis.Game, )) app.Register(checkCenter.New()) app.Register(db.NewMap()) app.Register(initAfterFunc()) app.AddActors( sessions.NewActor(true), genPool.NewActor(node.NodeID()), mapSeason.NewActor(), ops.NewActor(), rank.NewActor(), ) app.ActorSystem().SetArrivalTimeout(50) app.ActorSystem().SetExecutionTimeout(50) app.Startup() } func initBeforeFunc() cfacade.IComponent { fn := func(app cfacade.IApplication) { csnowflake.InitDefaultNode(app.NodeID()) capp.Init(app) facadeInit.Load() // 当用户断开连接时,触发玩家退出消息 sessions.SetOnUnbindFunc(func(playerID int64) { targetPath := cfacade.NewChildPath("", nameActor.Map_Player, playerID) capp.Call(targetPath, nameRemote.MapPlayer_OnSessionClosed, nil) }) } return funcLoad.New("initBeforeFunc", fn) } func initAfterFunc() cfacade.IComponent { fn := func(app cfacade.IApplication) { initMap(app) } return funcLoad.New("initAfterFunc", fn) } // Init 初始化各地图actor的数据 func initMap(app cfacade.IApplication) { if app.NodeType() != constant.NodeMap { clog.Fatalf("Node type error. nodeType =%s, nodeID = %s", capp.App().NodeType(), capp.NodeID()) return } nodeTable, found := db.GetMapNodeTable(capp.NodeID()) if !found { clog.Fatalf("NodeID not found. nodeID = %s", capp.NodeID()) } // 加载玩家数据 playerTables := db.LoadPlayerTables(capp.NodeID()) if playerTables == nil { clog.Fatalf("Load player table fail. nodeID = %s", capp.NodeID()) } // 加载联盟数据 leagueTables := db.LoadLeagueTables(capp.NodeID()) if leagueTables == nil { clog.Fatalf("Load league table fail. nodeID = %s", capp.NodeID()) } // 初始化 联盟 mapLeague.Init(app, leagueTables) // 初始化 侦察 mapScoutTable, found := db.GetMapScoutTable(capp.NodeID()) if !found { clog.Fatalf("Load map scout table fail. nodeID=%s", capp.NodeID()) } scout.Init(app, mapScoutTable) // 加载交易所相关数据到缓存 db.LoadMapExchangeStatsTables() exchangeDeliverTables := db.LoadMapExchangeDeliverTables() exchangeTables := db.LoadMapExchangeTables() mapExchange.Init(app, exchangeTables, exchangeDeliverTables) // 加载地编数据 data.MapID.LoadData(capp.NodeID()) // 加载地图数据 mapTables := db.LoadLogicData(nodeTable) if mapTables == nil { clog.Fatalf("Load map data fail. nodeID = %s", capp.NodeID()) } // 初始化 pathfind mapPathfind.Init(app, mapTables) // 初始化 AOI mapAOI.Init(app, mapTables) // 初始化 logic 数据 mapLogic.Init(app, mapTables, playerTables, leagueTables) // 初始化 mapPlayer mapPlayer.Init(app) // 初始化 联邦 mapUnion.Init(app) }