using Yuanshen.Gameserver.Controllers.Attributes; using Yuanshen.Gameserver.Controllers.Result; using Yuanshen.Gameserver.Game; using Yuanshen.Gameserver.Network.Session; using Yuanshen.Protocol; namespace Yuanshen.Gameserver.Controllers; [NetController] internal sealed class SceneController : ControllerBase { [NetCommand(CmdType.EnterSceneReadyReq)] public async ValueTask OnEnterSceneReadyReq(NetSession session, GameState state) { await session.NotifyAsync(CmdType.EnterScenePeerNotify, new EnterScenePeerNotify { DestSceneId = GameState.SceneId, PeerId = Player.PeerId, HostPeerId = Player.PeerId, EnterSceneToken = state.EnterSceneToken }); return Response(CmdType.EnterSceneReadyRsp, new EnterSceneReadyRsp { EnterSceneToken = state.EnterSceneToken }); } [NetCommand(CmdType.SceneInitFinishReq)] public async ValueTask OnSceneInitFinishReq(NetSession session, GameState state, SceneManager sceneManager, Player player) { await session.NotifyAsync(CmdType.WorldDataNotify, new WorldDataNotify { WorldPropMap = { { 1u, new PropValue { Type = 1, Ival = 0, Val = 0 } }, { 2u, new PropValue { Type = 2, Ival = 0, Val = 0 } } } }); await session.NotifyAsync(CmdType.WorldPlayerInfoNotify, new WorldPlayerInfoNotify { PlayerInfoList = { new OnlinePlayerInfo { Uid = player.Uid, Nickname = "Traveler", PlayerLevel = 1, CurPlayerNumInWorld = 1, WorldLevel = 0 } }, PlayerUidList = { player.Uid } }); await session.NotifyAsync(CmdType.PlayerEnterSceneInfoNotify, sceneManager.BuildEnterSceneInfo()); await session.NotifyAsync(CmdType.SceneTeamUpdateNotify, sceneManager.BuildSceneTeamUpdate()); return Response(CmdType.SceneInitFinishRsp, new SceneInitFinishRsp { EnterSceneToken = state.EnterSceneToken }); } [NetCommand(CmdType.EnterSceneDoneReq)] public async ValueTask OnEnterSceneDoneReq(GameState state, SceneManager sceneManager, WorldSpawner worldSpawner) { await sceneManager.SpawnActiveAvatarAsync(VisionType.VisionMeet); await worldSpawner.EnterSceneAsync(state.CurrentPos); return Response(CmdType.EnterSceneDoneRsp, new EnterSceneDoneRsp { EnterSceneToken = state.EnterSceneToken }); } [NetCommand(CmdType.PostEnterSceneReq)] public ValueTask OnPostEnterSceneReq(GameState state) { return ValueTask.FromResult(Response(CmdType.PostEnterSceneRsp, new PostEnterSceneRsp { EnterSceneToken = state.EnterSceneToken })); } }