/// <summary> 向其他玩家推送在监狱移动</summary> public void PusuMovingActivity(Int64 userid, view_scene_user scene) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } var otherplays = Core.Common.Scene.ActivityOtherPlayers(userid, (int)ModuleNumber.BUILDING); //监狱内其他玩家 foreach (var item in otherplays) { var tokenTest = new CancellationTokenSource(); var temp = new ScenePush() { user_id = userid, scene_key = item, user_scene = scene.CloneEntity(), other_user_id = Variable.Activity.ScenePlayer[item].user_id }; Task.Factory.StartNew(m => { var t = m as ScenePush; if (t == null) { return; } var aso = new ASObject(BuildData((int)ResultType.SUCCESS, t.user_id, t.user_scene.X, t.user_scene.Y)); SendPv(t.other_user_id, aso, (int)BuildingCommand.PUSH_PLAYER_MOVING, (int)ModuleNumber.BUILDING); tokenTest.Cancel(); }, temp, tokenTest.Token); } }
/// <summary> 向其他玩家推送A玩家回到活动出生点</summary> public void PushRestartActivity(Int64 userid) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } var otherplays = Core.Common.Scene.ActivityOtherPlayers(userid, (int)ModuleNumber.BUILDING); foreach (var item in otherplays) { var tokenTest = new CancellationTokenSource(); var temp = new ScenePush() { user_id = userid, scene_key = item, other_user_id = Variable.Activity.ScenePlayer[item].user_id }; Task.Factory.StartNew(m => { var t = m as ScenePush; if (t == null) { tokenTest.Cancel(); } var dic = new Dictionary <string, object>() { { "userId", t.user_id } }; SendPv(t.other_user_id, new ASObject(dic), (int)BuildingCommand.PUSH_PLAYER_CHANGE, (int)ModuleNumber.BUILDING); tokenTest.Cancel(); }, temp, tokenTest.Token); } }
private void StartTask(ScenePush temp) { if (temp == null) { return; } var dic = new Dictionary <string, object> { { "result", (int)ResultType.SUCCESS }, { "userId", temp.user_id } }; var aso = new ASObject(dic); SendPv(temp.other_user_id, aso, (int)SceneCommand.PLAYER_EXIT_SCENET, (int)ModuleNumber.SCENE); }
/// <summary> 推送玩家进入场景并向其他人推送 </summary> public void PushMyEnterScene(Int64 userid, view_scene_user userscene) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } if (userscene == null) { return; } userscene.model_number = (int)ModuleNumber.SCENE; var key = string.Format("{0}_{1}", (int)ModuleNumber.SCENE, userid); if (Variable.SCENCE.ContainsKey(key)) { Variable.SCENCE[key].model_number = (int)ModuleNumber.SCENE; } var otherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE);//同场景内的其他玩家 var aso = new ASObject(BuildData((int)ResultType.SUCCESS, userscene.scene_id, userscene.X, userscene.Y, otherplays)); SendPv(userid, aso, (int)SceneCommand.PUSH_ENTER_SCENET, (int)ModuleNumber.SCENE); foreach (var item in otherplays) { var temp = new ScenePush() { user_id = userid, other_user_id = item.user_id, user_scene = userscene.CloneEntity() }; var tokentest = new CancellationTokenSource(); Task.Factory.StartNew(m => { var t = m as ScenePush; if (t == null) { return; } var aso1 = new ASObject(BuildData((int)ResultType.SUCCESS, t.user_scene)); SendPv(t.other_user_id, aso1, (int)SceneCommand.PLAYER_ENTER_SCENE, (int)ModuleNumber.SCENE);// 向其他玩家推送A玩家退出后的场景 tokentest.Cancel(); }, temp, tokentest.Token); } }
/// <summary> 推送玩家离开场景 </summary> public void PushMyLeaveScene(Int64 userid, view_scene_user userscene) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } if (userscene == null) { return; } userscene.model_number = (int)ModuleNumber.BUILDING; var session = Variable.OnlinePlayer[userid] as TGGSession; if (session == null) { return; } session.Player.Scene.model_number = (int)ModuleNumber.BUILDING; var otherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE); foreach (var item in otherplays) { var tokentest = new CancellationTokenSource(); var temp = new ScenePush() { user_id = userid, other_user_id = item.user_id }; Task.Factory.StartNew(m => { var t = m as ScenePush; StartTask(t); tokentest.Cancel(); }, temp, tokentest.Token); } }
/// <summary>向其他玩家推送A玩家离开活动 </summary> public void PusuLeaveActivity(Int64 userid) { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } var otherplays = Core.Common.Scene.ActivityOtherPlayers(userid, (int)ModuleNumber.BUILDING); //活动内内其他玩家 var key = string.Format("{0}_{1}", (int)ModuleNumber.BUILDING, userid); view_scene_user scene; Variable.Activity.ScenePlayer.TryRemove(key, out scene); foreach (var item in otherplays) { var tokenTest = new CancellationTokenSource(); var temp = new ScenePush() { user_id = userid, scene_key = item, other_user_id = Variable.Activity.ScenePlayer[item].user_id }; Task.Factory.StartNew(m => { var t = m as ScenePush; if (t == null) { return; } var dic = new Dictionary <string, object>() { { "userId", t.user_id } }; var aso = new ASObject(dic); SendPv(t.other_user_id, aso, (int)BuildingCommand.PUSH_PLAYER_EXIT, (int)ModuleNumber.BUILDING); }, temp, tokenTest.Token); } }