Example #1
0
        /// <summary>获取场景内其他玩家数据 并将当前玩家数据推送给其他玩家</summary>
        private List <ScenePlayerVo> GetOtherPlayerPush(SiegePlayer model, view_scene_user scene)
        {
            var otherplays = new List <ScenePlayerVo>();

            var otherplayer = Variable.Activity.ScenePlayer.Where(m =>
                                                                  m.Value.model_number == (int)ModuleNumber.SIEGE && m.Key != Common.GetInstance().GetKey(model.user_id)).ToList();

            if (!otherplayer.Any())
            {
                return(otherplays);
            }

            var aso = new ASObject(BuildData(EntityToVo.ToScenePlayerVo(scene)));

            foreach (var item in otherplayer)
            {
                otherplays.Add(EntityToVo.ToScenePlayerVo(item.Value));
                var token = new CancellationTokenSource();
                Task.Factory.StartNew(
                    m =>
                {
                    var userid = Convert.ToInt64(m);
                    if (!Variable.OnlinePlayer.ContainsKey(userid))
                    {
                        return;
                    }
                    var session = Variable.OnlinePlayer[userid];
                    Common.GetInstance().TrainingSiegeEndSend(session, aso, (int)SiegeCommand.PUSH_PLAYER_ENTER);
                }, item.Value.user_id, token.Token);
            }
            return(otherplays);
        }
Example #2
0
        /// <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);
            }
        }
Example #3
0
        /// <summary>
        /// 向监狱内玩家推送出狱
        /// </summary>
        public void PusuLeavePrison(Int64 userid)
        {
            if (!Variable.OnlinePlayer.ContainsKey(userid))
            {
                return;
            }
            var otherplays = GetPrisonOhters(userid); //监狱内其他玩家
            var key        = string.Format("{0}_{1}", (int)ModuleNumber.PRISON, userid);

            if (!Variable.SCENCE.ContainsKey(key))
            {
                return;
            }
            var scene = new view_scene_user();

            Variable.SCENCE.TryRemove(key, out scene);

            foreach (var item in otherplays)
            {
                var dic = new Dictionary <string, object>()
                {
                    { "userId", userid }
                };
                var aso = new ASObject(dic);
                SendPv(aso, (int)PrisonCommand.PUSH_PLAYER_EXIT, item.user_id, (int)ModuleNumber.PRISON);
            }
        }
Example #4
0
        /// <summary>数据组装</summary>
        private Dictionary <String, Object> BuildData(object result, view_scene_user sceneplayer)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "playerVo", sceneplayer != null?EntityToVo.ToScenePlayerVo(sceneplayer)  : null }
            };

            return(dic);
        }
Example #5
0
        /// <summary>推送玩家进入当前场景</summary>
        public void CommandStart(view_scene_user sceneplayer, Int64 userid, Int64 otheruserid)
        {
            const int result = (int)ResultType.SUCCESS;
            var       aso    = new ASObject(Common.GetInstance().BuildData(result, sceneplayer));

#if DEBUG
            XTrace.WriteLine("玩家{0}向其他玩家推送上线!\t", userid);
#endif
            Common.GetInstance().SendPv(userid, aso, (int)SceneCommand.PLAYER_ENTER_SCENE, otheruserid);
        }
Example #6
0
 /// <summary> 获取活动出生坐标 </summary>
 public void GetActivityPoint(view_scene_user scene, int camp)
 {
     if (camp == (int)CampType.East)
     {
         scene.X = Variable.Activity.BuildActivity.EastBornPointX;
         scene.Y = Variable.Activity.BuildActivity.EastBornPointY;
     }
     else
     {
         scene.X = Variable.Activity.BuildActivity.WestBornPointX;
         scene.Y = Variable.Activity.BuildActivity.WestBornPointY;
     }
 }
Example #7
0
 /// <summary> view_scene_user  组装 ScenePlayerVo </summary>
 /// <param name="model">场景视图实体</param>
 /// <summary> 前端ScenePlayerVo </summary>
 public static ScenePlayerVo ToScenePlayerVo(view_scene_user model)
 {
     return(new ScenePlayerVo
     {
         camp = model.player_camp,
         id = model.user_id,
         level = model.role_level,
         name = model.player_name,
         sex = model.player_sex,
         vocation = model.player_vocation,
         x = model.X,
         y = model.Y,
         identityId = model.role_identity,
     });
 }
Example #8
0
        /// <summary>新数据更新到内存中</summary>
        private void SceneDataSave(long sceneid, view_scene_user userscene, view_scene_user sessionscene, BaseRoleBornPoint _base)
        {
            var key = string.Format("{0}_{1}", (int)ModuleNumber.SCENE, userscene.user_id);

            userscene.scene_id = sceneid;
            if (Variable.SCENCE.ContainsKey(key))
            {
                Variable.SCENCE.TryUpdate(key, userscene, userscene);
            }
            var v = _base.coorPoint.Split(',');

            userscene.X           = int.Parse(v[0]);
            userscene.Y           = int.Parse(v[1]);
            sessionscene.scene_id = sceneid;
            sessionscene.X        = userscene.X;
            sessionscene.Y        = userscene.Y;
        }
Example #9
0
        /// <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);
            }
        }
Example #10
0
        /// <summary> 获取监狱坐标 </summary>
        public bool GetPrisonPoint(view_scene_user scene)
        {
            var baseinfo = Variable.BASE_RULE.FirstOrDefault(q => q.id == "25004");

            if (baseinfo == null)
            {
                return(false);
            }
            var temp = baseinfo.value;

            if (!temp.Contains(','))
            {
                return(false);
            }
            var split = temp.Split(',');

            scene.X = Convert.ToInt32(split[0]);
            scene.Y = Convert.ToInt32(split[1]);
            return(true);
        }
Example #11
0
        /// <summary>正常下线</summary>
        private void NormalOut(view_scene_user userscene)
        {
            var otherplays = Scene.GetOtherPlayers(userscene.user_id, userscene.scene_id, (int)ModuleNumber.SCENE);

            if (!otherplays.Any())
            {
                return;
            }

            #region 场景拆分 2015-03-19
            var _plays = SceneSplit.GetSceneSplitPlayers(userscene.user_id, otherplays);
            #endregion

            foreach (var item in _plays)
            {
                var obj = new OnlineObject {
                    OffLine = userscene.user_id, OtherPlayer = item.user_id
                };
                var tokenTest = new CancellationTokenSource();
                Task.Factory.StartNew(m =>
                {
                    var temp = m as OnlineObject;
                    if (temp == null)
                    {
                        return;
                    }
                    if (!Variable.OnlinePlayer.ContainsKey(temp.OtherPlayer))
                    {
                        return;
                    }
                    var otherplayerssession = Variable.OnlinePlayer[temp.OtherPlayer] as TGGSession;
                    if (otherplayerssession == null)
                    {
                        return;
                    }
                    var aso = BuildData(temp.OffLine);
                    SendPushCommand(otherplayerssession, aso, (int)SceneCommand.PLAYER_EXIT_SCENET, (int)ModuleNumber.SCENE);
                    tokenTest.Cancel();
                }, obj, tokenTest.Token);
            }
        }
Example #12
0
        /// <summary>
        /// 向其他玩家推送在监狱移动
        /// </summary>
        public void PusuMovingPrison(view_scene_user myscene)
        {
            var userid = myscene.user_id;

            if (!Variable.OnlinePlayer.ContainsKey(userid))
            {
                return;
            }
            var otherplays = GetPrisonOhters(userid);

            //监狱内其他玩家
            if (!otherplays.Any())
            {
                return;
            }
            foreach (var item in otherplays)
            {
                var aso = new ASObject(BuildData((int)ResultType.SUCCESS, userid, myscene.X, myscene.Y));
                SendPv(aso, (int)PrisonCommand.PUSH_PLAYER_MOVING, item.user_id, (int)ModuleNumber.PRISON);
            }
        }
Example #13
0
        /// <summary> 验证玩家坐标是否在附近 </summary>
        /// <param name="xy">坐标</param>
        /// <param name="scene">玩家坐标信息</param>
        public bool IsCoorPoint(string[] xy, view_scene_user scene)
        {
            if (scene == null)
            {
                return(false);
            }
            var xmin = Convert.ToInt32(xy[0]) - 150;
            var xmax = Convert.ToInt32(xy[0]) + 150;
            var ymin = Convert.ToInt32(xy[1]) - 150;
            var ymax = Convert.ToInt32(xy[1]) + 150;

            if (!(xmin <= scene.X && scene.X <= xmax))
            {
                return(false);
            }
            if (!(ymin <= scene.Y && scene.Y <= ymax))
            {
                return(false);
            }
            return(true);
        }
Example #14
0
        /// <summary>
        /// 推送玩家进入场景
        /// </summary>
        public void PushMyEnterScene(Int64 userid)
        {
            if (!Variable.OnlinePlayer.ContainsKey(userid))
            {
                return;
            }
            var key = string.Format("{0}_{1}", (int)ModuleNumber.SCENE, userid);

            if (!Variable.SCENCE.ContainsKey(key))
            {
                return;
            }
            var userscene = Variable.SCENCE[key];

            if (userscene == null)
            {
                return;
            }
            userscene.model_number = (int)ModuleNumber.SCENE;  //模块号改为场景模块
            key = string.Format("{0}_{1}", (int)ModuleNumber.PRISON, userscene.user_id);
            var scene = new view_scene_user();

            if (Variable.SCENCE.ContainsKey(key))
            {
                Variable.SCENCE.TryRemove(key, out 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));
            var session    = Variable.OnlinePlayer[userid] as TGGSession;

            if (session == null)
            {
                return;
            }
            var pv = session.InitProtocol((int)ModuleNumber.SCENE,
                                          (int)SceneCommand.PUSH_ENTER_SCENET, (int)ResponseType.TYPE_SUCCESS, aso);

            session.SendData(pv);
        }
Example #15
0
        /// <summary> 一夜墨俣--退出活动</summary>
        public ASObject CommandStart(TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("一夜墨俣:退出 -{0}——{1}", session.Player.User.player_name, "EXIT");
#endif
            var userid  = session.Player.User.id;
            var myscene = session.Player.Scene;
            var key     = ModuleNumber.BUILDING + "_" + session.Player.User.id;
            var acp     = Variable.Activity.ScenePlayer.ContainsKey(key); //活动内是否有该玩家
            if (acp)
            {
                var scene = new view_scene_user();
                Variable.Activity.ScenePlayer.TryRemove(key, out scene);
            }
            Common.GetInstance().PusuLeaveActivity(userid);         //向活动内的其他玩家推送离开
            Common.GetInstance().PushMyEnterScene(userid, myscene); //向活动外场景的其他玩家推送进入场景
            var dic = new Dictionary <string, object>()
            {
                { "result", (int)ResultType.SUCCESS }
            };
            return(new ASObject(dic));
        }
Example #16
0
        /// <summary> 玩家下线操作 </summary>
        private void PlayerOffline(view_scene_user scene)
        {
            try
            {
                var             userid   = scene.user_id;
                var             scenekey = (int)ModuleNumber.SCENE + "_" + userid;
                view_scene_user scenevalue;
                Variable.SCENCE.TryRemove(scenekey, out scenevalue); //从内存中移除

#if DEBUG
                XTrace.WriteLine("玩家{0}下线时的场景:{1}  坐标:{2},{3}", Player.User.player_name, scene.scene_id, scene.X, scene.Y);
#endif
                var prison = tg_prison.GetPrisonByUserId(userid);
                if (prison != null)
                {
                    PrisonOut(userid);
                    tg_scene.GetSceneUpdate(scene); //保存到数据库
                    return;                         //监狱内下线
                }
                if (Variable.Activity.ScenePlayer.Keys.Contains(string.Format("{0}_{1}", (int)ModuleNumber.BUILDING, userid)) ||
                    Variable.Activity.ScenePlayer.Keys.Contains(string.Format("{0}_{1}", (int)ModuleNumber.SIEGE, userid)))
                {
                    ActivityOut(userid);
                    scene.model_number = (int)ModuleNumber.SCENE;
                    tg_scene.GetSceneUpdate(scene); //保存到数据库
                    return;
                }
                scene.model_number = (int)ModuleNumber.SCENE;
                //下线后回到出生点
                //SceneBackBorn(scene);
                tg_scene.GetSceneUpdate(scene); //保存到数据库
                NormalOut(scene);               //正常场景下线
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
            }
        }
Example #17
0
        /// <summary>
        /// 下线后回到出生点
        /// </summary>
        /// <param name="scene"></param>
        private void SceneBackBorn(view_scene_user scene)
        {
            var basescene = Variable.BASE_SCENE.FirstOrDefault(q => q.id == scene.scene_id);

            if (basescene == null)
            {
                return;
            }
            var basebornpoint = Variable.BASE_ROLEBORNPOINT.FirstOrDefault(q => q.id == basescene.bornPoint);

            if (basebornpoint == null)
            {
                return;
            }
            if (!basebornpoint.coorPoint.Contains(','))
            {
                return;
            }
            var v = basebornpoint.coorPoint.Split(',');

            scene.X = int.Parse(v[0]);
            scene.Y = int.Parse(v[1]);
        }
Example #18
0
        /// <summary> 场景处理</summary>
        private void CheckScene(Int64 userid, view_scene_user scene, int camp)
        {
            if (scene == null)
            {
                return;
            }
            scene.model_number = (int)ModuleNumber.BUILDING;
            var oldkey = string.Format("{0}_{1}", (int)ModuleNumber.BUILDING, scene.user_id);

            if (Variable.SCENCE.ContainsKey(oldkey))
            {
                Variable.SCENCE[oldkey].model_number = (int)ModuleNumber.BUILDING;
            }
            Common.GetInstance().PushMyLeaveScene(userid, scene); //活动外场景推送离开
            var activityscene = scene.CloneEntity();

            activityscene.model_number = (int)ModuleNumber.BUILDING;
            Common.GetInstance().GetActivityPoint(activityscene, camp); //初始坐标
            var key = string.Format("{0}_{1}", (int)ModuleNumber.BUILDING, userid);

            Variable.Activity.ScenePlayer.AddOrUpdate(key, activityscene, (m, n) => n); //加入到内存中
            Common.GetInstance().PushEnterActivity(userid, activityscene);              //向活动内玩家推送进入
        }
Example #19
0
        /// <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);
            }
        }