예제 #1
0
        /// <summary> 进入家臣任务评定</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("进入家臣评定指令{0}——{1}", session.Player.User.player_name, "APPRAISE_JOIN");
#endif
            var dic   = new Dictionary <string, object>();
            var tasks = tg_task.GetTaskQueryByType(session.Player.User.id, (int)TaskType.ROLE_TASK).OrderByDescending(q => q.id).ToList(); //按照主键id倒序排列 新接的任务在前
            var now   = (DateTime.Now.Ticks - 621355968000000000) / 10000;
            foreach (var task in tasks.Where(q => q.task_state != (int)TaskStateType.TYPE_UNRECEIVED &&
                                             q.task_state != (int)TaskStateType.TYPE_FINISHED)) //未接受或已完成的任务不做特殊处理
            {
                if (task.task_endtime != 0 && task.task_endtime <= now)                         //到达时间小于等于当前时间
                {
                    Common.GetInstance().AppraiseEnd(task);
                }
                else
                {
                    var times = task.task_endtime - now;
                    Common.GetInstance().NewTaskStart(times, task);
                }
            }
#if DEBUG
            XTrace.WriteLine("玩家的家臣任务数{0},剩余刷新数{1}", tasks.Count, 2 - session.Player.UserExtend.task_role_refresh);
#endif
            var reflashcount = 2 - session.Player.UserExtend.task_role_refresh;
            dic.Add("result", (int)ResultType.SUCCESS);
            dic.Add("task", tasks.Any() ? Common.GetInstance().ConvertListAsObject(tasks) : null);
            dic.Add("count", reflashcount);
            return(new ASObject(dic));
        }
예제 #2
0
        /// <summary>所有邮件信息</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "MESSAGE_VIEW", "查询所有邮件信息");
#endif
            var list = view_messages.GetEntityListByUserId(session.Player.User.id);
            return(Common.GetInstance().BuildData((int)ResultType.SUCCESS, list));
        }
예제 #3
0
        /// <summary>登录后进入当前场景</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
            try
            {
#if DEBUG
                XTrace.WriteLine("{0}:{1} - 玩家:{2}", "LOGIN_ENTER_SCENE", "登录后进入当前场景", session.Player.User.player_name);
#endif
                const int result    = (int)ResultType.SUCCESS;
                var       userid    = session.Player.User.id;
                var       userscene = session.Player.Scene;
                if (userscene == null)
                {
                    return(new ASObject(Common.GetInstance().BuildData((int)ResultType.SCENE_NOFIND, 0, 0, 0, null)));
                }
#if DEBUG
                XTrace.WriteLine("玩家{0}当前场景---{1}", session.Player.User.player_name, userscene.scene_id);
                XTrace.WriteLine("玩家{0}当前坐标---{1},{2}", session.Player.User.player_name, userscene.X, userscene.Y);
#endif

                var key = string.Format("{0}_{1}", (int)ModuleNumber.SCENE, userid);
                Variable.SCENCE.AddOrUpdate(key, userscene, (m, n) => n); //加入到内存中
                if (userscene.model_number != (int)ModuleNumber.SCENE)
                {
                    return(new ASObject(Common.GetInstance().BuildData(result, userscene.scene_id, userscene.X, userscene.Y, new List <view_scene_user>())));
                }
                var otherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE);//同场景内的其他玩家
                foreach (var item in otherplays)
                {
#if DEBUG
                    XTrace.WriteLine("向{0}玩家推送{1}进入当前场景---{2}", item.player_name, session.Player.User.player_name, userscene.scene_id);
#endif
                    var temp = new Common.ScenePush()
                    {
                        user_id       = userid,
                        other_user_id = item.user_id,
                        user_scene    = userscene
                    };
                    var ts = new CancellationTokenSource();
                    Task.Factory.StartNew(m =>
                    {
                        var t = m as Common.ScenePush;
                        if (t == null)
                        {
                            return;
                        }
                        new PLAYER_ENTER_SCENE().CommandStart(t.user_scene, t.user_id, t.other_user_id);
                        ts.Cancel();
                    }, temp, ts.Token);
                }

                return(new ASObject(Common.GetInstance().BuildData(result, userscene.scene_id, userscene.X, userscene.Y, otherplays)));
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
                return(new ASObject());
            }
        }
예제 #4
0
        /// <summary>邮件读取</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "MESSAGE_READ", "邮件读取");
#endif
            var id = Convert.ToInt64(data.FirstOrDefault(q => q.Key == "id").Value.ToString());
            tg_messages.GetMessagesIsReadUpdate(id, (int)MessageIsReadType.HAVE_READ);
            return(Common.GetInstance().BuildData((int)ResultType.SUCCESS));
        }
예제 #5
0
        /// <summary>未读邮件</summary>
        public ASObject CommandStart(SocketServer.TGGSession session)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "MESSAGE_NOREAD", "未读邮件");
#endif
            var dic = new Dictionary <string, object>();

            int rc = tg_messages.GetCountByUserId(session.Player.User.id, (int)Core.Enum.Type.MessageIsReadType.UN_READ);
            dic.Add("result", (int)Core.Enum.Type.ResultType.SUCCESS);
            dic.Add("number", rc);
            return(new ASObject(dic));
        }
예제 #6
0
        /// <summary>删除邮件</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1}", "MESSAGE_DETELE", "删除邮件");
#endif

            /*
             * type:[int] 0:当前邮件 1:所有邮件
             * ids:[List<double>]邮件主键集合(全部删除时为空)
             */
            //var type = Convert.ToInt32(data.FirstOrDefault(q => q.Key == "type").Value);
            var _type = Convert.ToInt32(data.FirstOrDefault(q => q.Key == "type").Value);
            var _ids  = data.FirstOrDefault(q => q.Key == "ids").Value as object[];
            //_type = 1;
#if DEBUG
            XTrace.WriteLine("type {0} (0:当前邮件 1:所有邮件)", _type);
#endif
            switch (_type)
            {
            case (int)MessageSelectType.SELECT:
            {
                if (_ids == null)
                {
                    return(Common.GetInstance().BuildData((int)ResultType.MESSAGE_SUBMIT_DATA_ERROR));
                }
                var ids = _ids.Select(Convert.ToInt64).ToList();
                //var list = tg_messages.GetMessagesByIds(ids);
                //if (!list.Any()) return Common.GetInstance().BuildData((int)ResultType.MESSAGE_DATA_NO_EXIST_ERROR);
                //var ids_is = list.Where(m => m.isattachment == (int)MessageIsAnnexType.UN_ANNEX).Select(m => m.id).ToList();
                //if (!ids_is.Any()) return Common.GetInstance().BuildData((int)ResultType.MESSAGE_NO_DELETE_ATTACHMENT_ERROR);
                if (!tg_messages.GetMessagesDelete(ids, (int)MessageIsAnnexType.UN_ANNEX))
                {
                    return(Common.GetInstance().BuildData((int)ResultType.DATABASE_ERROR));
                }
            }
            break;

            case (int)MessageSelectType.ALL:
                if (!tg_messages.GetMessagesDeleteByUser(session.Player.User.id, (int)MessageIsAnnexType.UN_ANNEX))
                {
                    return(Common.GetInstance().BuildData((int)ResultType.DATABASE_ERROR));
                }
                break;
            }
            return(Common.GetInstance().BuildData((int)ResultType.SUCCESS));
        }
예제 #7
0
        /// <summary> 开始评定</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("开始评定{0}——{1}", session.Player.User.player_name, "APPRAISE_START");
#endif
            result = (int)ResultType.SUCCESS;
            var rid      = Convert.ToInt64(data.FirstOrDefault(q => q.Key == "role").Value);
            var taskmain = Convert.ToInt64(data.FirstOrDefault(q => q.Key == "task").Value);
            var roleinfo = tg_role.FindByid(rid);
            var mytask   = tg_task.FindByid(taskmain);
            if (!CheckRole(roleinfo, session.Player.User.id))
            {
                return(new ASObject(BuildData(null))); //验证武将
            }
            if (!CheckIdentify(session, roleinfo))     //身份验证
            {
                return(new ASObject(BuildData(null)));
            }

            if (!CheckTask(mytask))
            {
                return(new ASObject(BuildData(null)));                    //验证任务
            }
            var baseinfo = Variable.BASE_APPRAISE.FirstOrDefault(q => q.id == mytask.task_id);
            if (baseinfo == null)
            {
                result = (int)ResultType.BASE_TABLE_ERROR;
                return(new ASObject(BuildData(null)));
            }
#if DEBUG
            XTrace.WriteLine("武将{0}开始任务前的体力{1}", roleinfo.id, roleinfo.power);
#endif
            if (!CheckPower(roleinfo, session))
            {
                return(new ASObject(BuildData(null)));
            }
#if DEBUG
            XTrace.WriteLine("武将{0}开始任务后的体力{1}", roleinfo.id, roleinfo.power);
#endif
            GetTaskChange(mytask, roleinfo, baseinfo);
#if DEBUG
            XTrace.WriteLine("任务的开始时间{0}和结束时间{1}", mytask.task_starttime, mytask.task_endtime);
#endif

            return(new ASObject(BuildData(mytask)));
        }
예제 #8
0
        /// <summary>采集木材</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("一夜墨俣:采集木材 -{0}——{1}", session.Player.User.player_name, "GET_WOOD");
#endif
            var userid = session.Player.User.id;
            var camp   = session.Player.User.player_camp;

            if (!Variable.Activity.BuildActivity.userGoods.ContainsKey(userid))
            {
                return(BuildData((int)ResultType.BUILDING_NOT_IN, false, 0));
            }
            var ac = Variable.Activity.BuildActivity.userGoods[userid];

            if (!CheckTime(ac.woodTime))
            {
                return(BuildData((int)ResultType.BUILDING_TIME_OUT, false, ac.wood)); //倒计时是否完成
            }
            if (!CheckPoint(camp, userid))
            {
                return(BuildData((int)ResultType.BUILDING_POINT_OUT, false, 0)); //验证玩家当前坐标
            }
            if (ac.wood >= Variable.Activity.BuildActivity.WoodFull)
            {
                return(BuildData((int)ResultType.BUILDING_WOOD_FULL, false, 0)); //验证木头有没有到达上限
            }
            var pro = Variable.BASE_BUILD.FirstOrDefault(q => q.content == (int)BuildStepType.GET_WOOD &&
                                                         q.level == session.Player.Role.LifeSkill.sub_calculate_level);
            if (pro == null)
            {
                return(BuildData((int)ResultType.BUILDING_BASE_ERROR, false, 0));
            }
            var istrue = (new RandomSingle()).IsTrue(pro.probability);

            if (istrue)
            {
                ac.wood++; ac.totalwood++;
            }
            ac.woodTime = DateTime.Now;
            return(BuildData((int)ResultType.SUCCESS, istrue, ac.wood));
        }
예제 #9
0
        /// <summary>收集火把</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("一夜墨俣:收集火把 -{0}——{1}", session.Player.User.player_name, "TORCH");
#endif
            var userid = session.Player.User.id;
            if (!Variable.Activity.BuildActivity.userGoods.ContainsKey(userid))
            {
                return(BuildData((int)ResultType.BUILDING_NOT_IN, false, 0));
            }
            var ac = Variable.Activity.BuildActivity.userGoods[userid];

            if (!CheckTorch(ac.torch))
            {
                return(BuildData((int)ResultType.BUILDING_TORCH_FULL, false, 0));                       //验证火把是否达到上限
            }
            if (!CheckTime(ac))
            {
                return(BuildData((int)ResultType.BUILDING_TIME_OUT, false, ac.wood));                //倒计时内发数据
            }
            if (!CheckPoint(session.Player.User.player_camp, session.Player.User.id))
            {
                return(BuildData((int)ResultType.BUILDING_WOOD_FULL, false, 0)); //验证玩家当前坐标
            }
            var pro = Variable.BASE_BUILD.FirstOrDefault(q => q.content == (int)BuildStepType.GET_TORCH &&
                                                         q.level == session.Player.Role.LifeSkill.sub_eloquence_level); //基表中查询概率(辩才有关)
            if (pro == null)
            {
                return(BuildData((int)ResultType.BUILDING_BASE_ERROR, false, 0));
            }
            var istrue = (new RandomSingle()).IsTrue(pro.probability);
            if (istrue)
            {
                ac.torch++; ac.totaltorch++;
            }

            ac.TorchTime = DateTime.Now;
            return(BuildData((int)ResultType.SUCCESS, istrue, ac.torch));
        }
예제 #10
0
        /// <summary>切换场景</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1} - {2}", "ENTER_SCENE", "切换场景", session.Player.User.player_name);
#endif
            var result    = (int)ResultType.SUCCESS;
            var sceneid   = Convert.ToInt32(data.FirstOrDefault(m => m.Key == "id").Value);
            var userid    = session.Player.User.id;
            var userscene = session.Player.Scene;
#if DEBUG
            XTrace.WriteLine("玩家{0}当前场景---{1}\t", session.Player.User.player_name, userscene.scene_id);
            XTrace.WriteLine("玩家{0}当前坐标---{1},{2}\t", session.Player.User.player_name, userscene.X, userscene.Y);
#endif
            var basescene = Variable.BASE_SCENE.FirstOrDefault(q => q.id == sceneid);
            if (basescene == null || userscene == null)
            {
                return(BuildData((int)ResultType.SCENE_BASEDATA_WRONG, null));
            }
            if (userscene.scene_id == sceneid)
            {
                return(BuildData((int)ResultType.SCENE_ENTER_SAME, null));
            }
            //1.表示开启 0表示未开启
            if (basescene.enabled == 0)
            {
                return(BuildData((int)ResultType.SCENE_CITY_UNOPEN, null));
            }
            var basebornpoint = Variable.BASE_ROLEBORNPOINT.FirstOrDefault(q => q.id == basescene.bornPoint);
            if (basebornpoint == null)
            {
                return(BuildData((int)ResultType.SCENE_BASEDATA_WRONG, null));
            }

            var otherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE); //同场景内的其他玩家
            //推送玩家离开场景信息
            foreach (var item in otherplays)                                                                         //调用推送
            {
#if DEBUG
                XTrace.WriteLine("向{0}玩家推送{1}离开场景---{2}\t\n", item.player_name, session.Player.User.player_name, userscene.scene_id);
#endif
                var tokenTest = new CancellationTokenSource();
                var temp      = new Common.ScenePush()
                {
                    user_id       = userid,
                    other_user_id = item.user_id
                };
                Task.Factory.StartNew(m =>
                {
                    var t = m as Common.ScenePush;
                    if (t == null)
                    {
                        return;
                    }
                    new PLAYER_EXIT_SCENET().CommandStart(t.user_id, t.other_user_id);
                    tokenTest.Cancel();
                }, temp, tokenTest.Token);
            }
            SceneDataSave(sceneid, userscene, session.Player.Scene, basebornpoint);
            var newotherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE); //同场景内的其他玩家

            foreach (var item in newotherplays)                                                                         //向新场景玩家推送玩家进入
            {
#if DEBUG
                XTrace.WriteLine("玩家{0}当前坐标---{1},{2}\t", session.Player.User.player_name, userscene.X, userscene.Y);
                XTrace.WriteLine("向{0}玩家推送{1}进入当前场景---{2}\t", item.player_name, session.Player.User.player_name, userscene.scene_id);
#endif
                var tokenTest = new CancellationTokenSource();
                var temp      = new Common.ScenePush()
                {
                    user_id       = userid,
                    other_user_id = item.user_id,
                    user_scene    = userscene
                };
                Task.Factory.StartNew(m =>
                {
                    var t = m as Common.ScenePush;
                    if (t == null)
                    {
                        return;
                    }
                    new PLAYER_ENTER_SCENE().CommandStart(t.user_scene, t.user_id, t.other_user_id);
                    tokenTest.Cancel();
                }, temp, tokenTest.Token);
            }
            return(BuildData(result, newotherplays));
        }
예제 #11
0
파일: MOVING.cs 프로젝트: Lantnr/MyTest
        /// <summary>玩家移动</summary>
        public ASObject CommandStart(SocketServer.TGGSession session, ASObject data)
        {
#if DEBUG
            XTrace.WriteLine("{0}:{1} - {2}", "MOVING", "玩家移动", session.Player.User.player_name);
#endif
            try
            {
                var dic       = new Dictionary <string, object>();
                var result    = (int)ResultType.SUCCESS;
                var x         = Convert.ToInt32(data.FirstOrDefault(q => q.Key == "x").Value);
                var y         = Convert.ToInt32(data.FirstOrDefault(q => q.Key == "y").Value);
                var userid    = session.Player.User.id;
                var userscene = session.Player.Scene;
#if DEBUG
                XTrace.WriteLine("玩家{0}当前场景---{1}\t", session.Player.User.player_name, userscene.scene_id);
                XTrace.WriteLine("玩家{0}当前坐标---{1},{2}\t", session.Player.User.player_name, userscene.X, userscene.Y);
#endif
                if (userscene == null)
                {
                    dic.Add("result", (int)ResultType.SCENE_BASEDATA_WRONG);
                    return(new ASObject(dic));
                }

                userscene.X            = x;
                userscene.Y            = y;
                session.Player.Scene.X = x;
                session.Player.Scene.Y = y;
                #region 测试数据
                //var otherplays = Core.Common.Scene.GetOtherPlayersByArea(userid, userscene.scene_id, (int)ModuleNumber.SCENE, userscene.X, userscene.Y, session.window.X, session.window.Y);//同场景内的其他玩家
                //var otherplays = new Share.TGTask().TestOhters(userid, userscene.scene_id, (int)ModuleNumber.SCENE);
                #endregion
                var otherplays = Core.Common.Scene.GetOtherPlayers(userid, userscene.scene_id, (int)ModuleNumber.SCENE);//同场景内的其他玩家
#if DEBUG
                XTrace.WriteLine("玩家{0}新坐标---{1},{2}\t\n", session.Player.User.player_name, userscene.X, userscene.Y);
#endif

                foreach (var item in otherplays)// 推送玩家进入信息
                {
#if DEBUG
                    XTrace.WriteLine("向{0}玩家推送{1}移动---{2}\t\n", item.player_name, session.Player.User.player_name, userscene.scene_id);
#endif
                    var tokenTest = new CancellationTokenSource();
                    var temp      = new Common.ScenePush()
                    {
                        user_id       = userid,
                        other_user_id = item.user_id,
                        user_scene    = userscene
                    };
                    Task.Factory.StartNew(m =>
                    {
                        var t = m as Common.ScenePush;
                        if (t == null)
                        {
                            return;
                        }
                        PlayerMoving(t.user_scene.X, t.user_scene.Y, t.user_id, t.other_user_id);
                        tokenTest.Cancel();
                    }, temp, tokenTest.Token);
                }
                dic.Add("result", result);
                return(new ASObject(dic));
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
                return(new ASObject());
            }
        }