//通知进入场景 public void NotifyEnterScene(CharacterSceneInfo info, int changeType, SceneParam sp) { PlayerLog.WriteLog(888, "NotifyEnterScene characterId={0},SceneId={1},newScene={2}", info.CharacterId, info.SceneInfo.SceneId, info.SceneInfo.SceneGuid); mLogger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds); mLogger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint); var content = new __RPC_Scene_SSEnterScene_ARG_uint64_characterId_uint64_guid_uint64_applyGuid_int32_changeType_SceneParam_sceneParam__ (); content.CharacterId = info.CharacterId; content.Guid = info.SceneInfo.SceneGuid; content.ChangeType = changeType; content.SceneParam = sp; var message = new ServiceDesc(); message.FuncId = 3055; message.ServiceType = (int)ServiceType.Scene; message.PacketId = mBroker.GetUniquePacketId(); message.Data = ProtocolExtension.Serialize(content); message.Type = (int)MessageType.SS; message.CharacterId = info.CharacterId; info.SceneInfo.Server.SendMessage(message); }
public void SetScenePosition(SceneBorder.BorderPosition borderPos) { GameObject SceneObject = SceneManager.GetActiveScene().GetRootGameObjects()[0]; GameObject PrevSceneObject = PrevActive.GetRootGameObjects()[0]; SceneParam SceneParm = SceneObject.GetComponent <SceneParam>(); SceneParam PrevSceneParm = PrevSceneObject.GetComponent <SceneParam>(); switch (borderPos) { case SceneBorder.BorderPosition.top: SceneObject.transform.position = new Vector3(0, (-SceneParm.BottomBorder.transform.position.y + PrevSceneParm.TopBorder.transform.position.y), 0); break; case SceneBorder.BorderPosition.bottom: SceneObject.transform.position = new Vector3(0, -(SceneParm.TopBorder.transform.position.y - PrevSceneParm.BottomBorder.transform.position.y), 0); break; case SceneBorder.BorderPosition.right: SceneObject.transform.position = new Vector3((-SceneParm.LeftBorder.transform.position.x + PrevSceneParm.RightBorder.transform.position.x), 0, 0); break; case SceneBorder.BorderPosition.left: SceneObject.transform.position = new Vector3(-(SceneParm.RightBorder.transform.position.x - PrevSceneParm.LeftBorder.transform.position.x), 0, 0); break; } }
/// <summary> /// フェードシーンをロード /// </summary> public static void ChangeScene(Action cb = null) { var param = new SceneParam(); param.cb = cb; AppSceneManager.Instance.LoadScene("MainMenuScene", false); }
public bool Init(LeaverScene _this, SceneParam param) { //Obstacle.Load(); _this.Active = false; _this.TableSceneData = Table.GetScene(_this.TypeId); //Param = param; return(true); }
public static SceneParam Create(string name, Action <int> callback = null) { SceneParam param = new SceneParam(); param.SceneName = name; param.LoadCallback = callback; return(param); }
public void LoadScene(string sceneName) { var param = new SceneParam(); param.PutParam("loading_scene", sceneName); SceneFlowManager.PushCurrentScene(); SceneFlowManager.LoadScene("Loading", sceneParam: param); }
public Scene CreateScene(SceneManager _this, int serverId, int sceneId, ulong regionId = 0, SceneParam sceneParam = null) { Dictionary <int, Dictionary <ulong, Scene> > servers = null; if (!_this.ScenesDic.ContainsKey(serverId)) { servers = new Dictionary <int, Dictionary <ulong, Scene> >(); _this.ScenesDic.Add(serverId, servers); } else { servers = _this.ScenesDic[serverId]; } Dictionary <ulong, Scene> scenes = null; if (!servers.ContainsKey(sceneId)) { scenes = new Dictionary <ulong, Scene>(); servers.Add(sceneId, scenes); } else { scenes = servers[sceneId]; } //var scene = new Scene {TypeId = sceneId, ServerId = serverId, Guid = regionId}; Scene scene; if (sceneId == 0) { scene = new LeaverScene(); scene.Init(sceneParam); } else { scene = SceneRegister.CreateScene(sceneId, serverId, regionId); scene.Init(sceneParam); } scenes.Add(regionId, scene); _this.Scenes.Add(regionId, scene); try { scene.OnCreate(); } catch (Exception e) { Logger.Error(e); } return(scene); }
//desc.FuncId == 3002 此场景已经不存在 public void NoHaveScene(ServerClient client, ServiceDesc desc) { var msg = ProtocolExtension.Deserialize <__RPC_Scene_NotifySceneNotExist_ARG_uint64_sceneId_uint64_characterId__>( desc.Data); var characterId = msg.CharacterId; mLogger.Info("Enter Game {0} - NotifySceneNotExist - 1 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); var info = mBroker.GetCharacter(characterId); if (info == null) { return; } var serverId = info.SceneInfo.ServerId; var sceneId = info.SceneInfo.SceneId; mLogger.Info("Enter Game {0} - NotifySceneNotExist - 2 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); RemoveScene(msg.SceneId); mLogger.Info("Enter Game {0} - NotifySceneNotExist - 3 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); var newScene = SelectServerForScene(serverId, sceneId, msg.CharacterId); if (newScene == null) { mLogger.Info("Enter Game {0} - NotifySceneNotExist - 4 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); newScene = CreateNewSceneInfo(serverId, sceneId, 0); newScene.PushCharacter(msg.CharacterId); //DebugCounter[1]++; var param = new SceneParam(); param.ObjId = desc.CharacterId; CreateNewScene(newScene, param); } if (newScene.Status == SceneStatus.ReadyToEnter) { mBroker.ChangeScene(msg.CharacterId, newScene); mLogger.Info("Enter Game {0} - NotifySceneNotExist - 5 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); } else { newScene.WaitingActions.Add(() => { mLogger.Info("Enter Game {0} - NotifySceneNotExist - 6 - {1}", characterId, TimeManager.Timer.ElapsedMilliseconds); mBroker.ChangeScene(msg.CharacterId, newScene); }); } }
/// <summary> /// シーン作成 /// </summary> /// <typeparam name="Type"></typeparam> /// <returns></returns> public Type CreateScene <Type>(SceneParam param) where Type : SceneBase { Type newScene = gameObject.AddComponent <Type>(); newScene.SceneParam = param; newScene.GameManager = this; newScene.GridGameObject = grid; newScene.CanvasGameObject = canvas; newScene.FadeManager = fadeManager; return(newScene); }
//开始创建副本 public IEnumerator AskEnterDungeonByTeamCoroutine(Coroutine co, List <ulong> characters, int serverId, FubenRecord tbFuben, ulong sceneGuid) { PlayerLog.WriteLog((int)LogType.QueueMessage, "NotifyCreateChangeSceneCoroutine Team={0}", characters.GetDataString()); //先把进入副本应扣除的材料,扣除掉 var co1 = CoroutineFactory.NewSubroutine(DeleteDungeonMaterialCoroutine, co, characters, tbFuben); if (co1.MoveNext()) { yield return(co1); } //组队进入副本时,根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(serverId); var sceneInfo = new ChangeSceneInfo { SceneId = tbFuben.SceneId, ServerId = serverLogicId, SceneGuid = sceneGuid, Type = (int)eScnenChangeType.EnterDungeon }; sceneInfo.Guids.AddRange(characters); if (sceneInfo.Pos == null) { var param = new SceneParam(); sceneInfo.Pos = param; if (tbFuben.OpenTime[0] != -1) { int hour; int min; if (Utils.GetDungeonOpenTime(tbFuben, out hour, out min)) { param.Param.Add(hour); param.Param.Add(min); } else { Logger.Warn("NotifyCreateChangeSceneCoroutine can't enter scene {0}", tbFuben.SceneId); yield break; } } } var msgChgScene = TeamServer.Instance.SceneAgent.SBChangeSceneByTeam(characters[0], sceneInfo); yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30))); }
public void LoadPreviousScene() { var preScene = SceneFlowManager.PopPreviousScene(); if (preScene == string.Empty) { Debug.Log("No previous scene"); return; } var param = new SceneParam(); param.PutParam("loading_scene", preScene); SceneFlowManager.LoadScene("Loading", sceneParam: param); }
public IEnumerator EnterFight(Coroutine coroutine, ulong characterId, int allianceId) { // 进入副本 var stage = UnionBattleManager.mDBData.Stage; if (stage < 0 || stage >= UnionBattleManager.BreakoutFightTime.Count) { yield break; } var fighTime = UnionBattleManager.BreakoutFightTime[stage]; var param = new SceneParam(); param.Param.Add(fighTime.Hour); param.Param.Add(fighTime.Minute); var msg = TeamServer.Instance.SceneAgent.AskEnterDungeon(characterId, -1, 2200, 123123, param); yield return(msg.SendAndWaitUntilDone(coroutine)); }
//创造新场景 public void CreateNewScene(SceneInfo sceneInfo, SceneParam param = null) { var content = new __RPC_Scene_BSCreateScene_ARG_int32_serverId_int32_sceneId_uint64_guid_SceneParam_sceneParam__(); content.ServerId = sceneInfo.ServerId; content.SceneId = sceneInfo.SceneId; content.Guid = sceneInfo.SceneGuid; content.SceneParam = param ?? new SceneParam(); var message = new ServiceDesc(); message.FuncId = 3010; message.ServiceType = (int)ServiceType.Scene; message.PacketId = mBroker.GetUniquePacketId(); message.Data = ProtocolExtension.Serialize(content); message.Type = (int)MessageType.BS; mLogger.Info("Notify Scene server CreateNewScene {0}, {1}, {2}", sceneInfo.ServerId, sceneInfo.SceneId, sceneInfo.SceneGuid); ConcurrentDictionary <ulong, SceneInfo> infos; var serverSceneId = CalcServerSceneId(sceneInfo.ServerId, sceneInfo.SceneId); if (mFromServerIdAndSceneId2Guid.TryGetValue(serverSceneId, out infos)) { infos.TryAdd(sceneInfo.SceneGuid, sceneInfo); } else { var temp = new ConcurrentDictionary <ulong, SceneInfo>(); temp.TryAdd(sceneInfo.SceneGuid, sceneInfo); mFromServerIdAndSceneId2Guid.TryAdd(serverSceneId, temp); } mBroker.DebugCounter[17]++; mFromSceneGuid2Server.TryAdd(sceneInfo.SceneGuid, sceneInfo); SceneServerManager.CreateScene(sceneInfo.Server, 1); var act = new Action <bool, ServiceDesc>((b, item) => { if (b) { if (item.Error == 0) { mLogger.Info("Scene server CreateNewScene replied {0}, {1}, {2}", sceneInfo.ServerId, sceneInfo.SceneId, sceneInfo.SceneGuid); sceneInfo.Status = SceneStatus.ReadyToEnter; foreach (var action in sceneInfo.WaitingActions) { try { action(); } catch (Exception ex) { mLogger.Error(ex, "Create new scene callback error."); } } sceneInfo.WaitingActions.Clear(); } else { mLogger.Error("CreateNewScene failed {0}....", item.Error); } } else { mLogger.Error("CreateNewScene timeout...."); } }); mBroker.RegisterCallback(message.PacketId, act); sceneInfo.Server.SendMessage(message); }
public IEnumerator PlayerEnter(Coroutine co, AllianceWar _this, ulong characterId, int allianceId, AsyncReturnValue <ErrorCodes> err) { err.Value = ErrorCodes.OK; if (!_this.AllianceIds.Contains(allianceId)) { Logger.Error("In CheckPlayerEnter().!AllianceIds.Contains(allianceId), characterId = {0}", characterId); err.Value = ErrorCodes.Error_AllianceWarQualification; yield break; } if (_this.GetStatus() < (int)eAllianceWarState.WaitStart) { err.Value = ErrorCodes.Error_FubenNotInOpenTime; yield break; } //锁,避免多进入,且在等待进入的人数不足50时,不锁 var count = _this.AlliancePlayers[allianceId].Count; while (count + _this.EnterPlayerCount[allianceId] >= Constants.AllianceMaxPlayer) { if (count >= Constants.AllianceMaxPlayer) { err.Value = ErrorCodes.Error_AllianceWarFull; yield break; } yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50))); count = _this.AlliancePlayers[allianceId].Count; } ++_this.EnterPlayerCount[allianceId]; var sceneId = -1; var sceneParam = new SceneParam(); if (_this.BattleFieldGuid == 0) { _this.BattleFieldGuid = ulong.MaxValue; sceneId = Constants.AllianceWarSceneId; sceneParam.Param.Add(_this.StartHour); sceneParam.Param.Add(_this.StartMin); sceneParam.Param.AddRange(_this.AllianceIds); while (sceneParam.Param.Count < 5) { sceneParam.Param.Add(-1); } } else if (_this.BattleFieldGuid == ulong.MaxValue) { do { yield return(TeamServer.Instance.ServerControl.Wait(co, TimeSpan.FromMilliseconds(50))); } while (_this.BattleFieldGuid == ulong.MaxValue); } //帮战根据合服ID进行 var serverLogicId = SceneExtension.GetServerLogicId(_this.ServerId); var msg = TeamServer.Instance.SceneAgent.SBChangeScene(characterId, characterId, serverLogicId, sceneId, _this.BattleFieldGuid, (int)eScnenChangeType.EnterDungeon, sceneParam); yield return(msg.SendAndWaitUntilDone(co)); if (msg.State != MessageState.Reply) { Logger.Error("In PlayerEnterCoroutine().SBChangeScene not replied!"); err.Value = ErrorCodes.Unknow; yield break; } if (msg.ErrorCode != (int)ErrorCodes.OK) { Logger.Error("In PlayerEnterCoroutine().SBChangeScene error = {0}", msg.ErrorCode); err.Value = (ErrorCodes)msg.ErrorCode; yield break; } if (_this.BattleFieldGuid == ulong.MaxValue) { _this.BattleFieldGuid = msg.Response; } PlayerLog.WriteLog((ulong)LogType.AllianceWar, "In PlayerEnter() player entered, characterId = {0}, allianceId = {1}", characterId, allianceId); err.Value = ErrorCodes.OK; }
public override bool Init(SceneParam param) { return(mImpl.Init(this, param)); }
// Use this for initialization void Start() { var argument = AppSceneManager.Instance.GetArgument(); _sceneParam = argument as SceneParam; }
//desc.FuncId == 3069 一堆人同时进一个场景 private void ChangeSceneByTeam(ServerClient client, ServiceDesc desc) { var msg = ProtocolExtension.Deserialize <__RPC_Scene_SBChangeSceneByTeam_ARG_ChangeSceneInfo_changeSceneData__>( desc.Data); var sceneInfo = mSceneManager.SelectOldScene(msg.ChangeSceneData.SceneGuid, msg.ChangeSceneData.ServerId, msg.ChangeSceneData.SceneId, 0, msg.ChangeSceneData.CheckFull); PlayerLog.WriteLog(888, "ChangeSceneByTeam characterId={0},ServerId={1},SceneId={2},SceneGuid={3}", msg.ChangeSceneData.Guids.GetDataString(), msg.ChangeSceneData.ServerId, msg.ChangeSceneData.SceneId, msg.ChangeSceneData.SceneGuid); // 如果场景不存在,不用造新的 if (sceneInfo == null && msg.ChangeSceneData.SceneId == -1) { PlayerLog.WriteLog(888, "ChangeSceneByTeam not find and not new,guids={0}", msg.ChangeSceneData.Guids.GetDataString()); desc.Data = ProtocolExtension.Serialize(new __RPC_Scene_SBChangeSceneByTeam_RET_uint64__ { ReturnValue = 0 }); client.SendMessage(desc); return; } var param = msg.ChangeSceneData.Pos; if (param == null) { param = new SceneParam(); } param.ObjId = desc.CharacterId; if (sceneInfo == null) { sceneInfo = mSceneManager.CreateNewSceneInfo(msg.ChangeSceneData.ServerId, msg.ChangeSceneData.SceneId, msg.ChangeSceneData.SceneGuid); mSceneManager.CreateNewScene(sceneInfo, param); //sceneInfo.PushCharacter(desc.CharacterId); } desc.Data = ProtocolExtension.Serialize(new __RPC_Scene_SBChangeSceneByTeam_RET_uint64__ { ReturnValue = sceneInfo.SceneGuid }); client.SendMessage(desc); var changeSceneInfos = new List <ChangeSceneInfo>(); foreach (var characterId in msg.ChangeSceneData.Guids) { sceneInfo.CharacterIds.Add(characterId); var info = GetCharacter(characterId); if (info == null) { continue; } var oldSceneInfo = info.SceneInfo; if (oldSceneInfo != sceneInfo) { oldSceneInfo.CharacterIds.Remove(characterId); info.SceneInfo = sceneInfo; } changeSceneInfos.Add(new ChangeSceneInfo { Info = info, OldSceneInfo = oldSceneInfo, NewSceneInfo = sceneInfo }); } var type = msg.ChangeSceneData.Type; var act = new Action(() => { PlayerLog.WriteLog(888, "ChangeSceneByTeam not find! new scene over guids={0}", msg.ChangeSceneData.Guids.GetDataString()); foreach (var changeSceneInfo in changeSceneInfos) { Logger.Info("Enter Game {0} {1} {2} - ChangeSceneByTeam - 2 - {3}", changeSceneInfo.Info.CharacterId, changeSceneInfo.OldSceneInfo.SceneGuid, changeSceneInfo.NewSceneInfo.SceneGuid, TimeManager.Timer.ElapsedMilliseconds); ChangeSceneOver(changeSceneInfo.Info, changeSceneInfo.OldSceneInfo, changeSceneInfo.NewSceneInfo, b => { mSceneManager.NotifyEnterScene(changeSceneInfo.Info, type, param); }); } }); if (sceneInfo.Status == SceneStatus.ReadyToEnter) { act(); } else { sceneInfo.WaitingActions.Add(act); } }
public Scene CreateScene(int serverId, int sceneId, ulong regionId = 0, SceneParam sceneParam = null) { return(mImpl.CreateScene(this, serverId, sceneId, regionId, sceneParam)); }