예제 #1
0
파일: Common.XLJ.cs 프로젝트: Lantnr/MyTest
        /// <summary>发放奖励</summary>
        public void PushReward(tg_task task)
        {
            var userid = task.user_id;
            var _base  = Variable.BASE_TASKVOCATION.FirstOrDefault(q => q.id == task.task_id);

            if (_base == null)
            {
                return;
            }
            if (task.task_state != (int)TaskStateType.TYPE_REWARD)
            {
                return;
            }

            var b = Variable.OnlinePlayer.ContainsKey(task.user_id);

            if (!b)
            {
                return;
            }
            var session      = Variable.OnlinePlayer[task.user_id] as TGGSession;
            var rewardstring = GetRewardString(_base, session);   //领取奖励

            new Share.Reward().GetReward(rewardstring, userid, (int)ModuleNumber.TASK, (int)TaskCommand.TASK_VOCATION_UPDATE);
        }
예제 #2
0
        /// <summary>守护线程</summary>
        public void WatchThreading(int time, tg_task newtask)
        {
# if DEBUG
            //time = 10;
#endif
            try
            {
예제 #3
0
파일: Common.LZH.cs 프로젝트: Lantnr/MyTest
        /// <summary>完成任务并推送</summary>
        private void TaskUpdateAndSend(tg_task task, string finishstep)
        {
            var taskinfo = Variable.TaskInfo.FirstOrDefault(q => q.userid == task.user_id);

            if (taskinfo == null)
            {
                return;
            }

            //更新对应任务戒严场景id
            switch (task.task_step_type)
            {
            case (int)TaskStepType.ARREST_RUMOR: taskinfo.ArrestRumorSceneId = 0; break;

            case (int)TaskStepType.ARREST_FIRE: taskinfo.ArrestFireSceneId = 0; break;

            case (int)TaskStepType.ARREST_BREAK: taskinfo.ArrestBreakSceneId = 0; break;

            case (int)TaskStepType.ARREST_SEll_WINE: taskinfo.ArrestSellSceneId = 0; break;
            }
            task.task_step_data = finishstep;
            task.task_state     = (int)TaskStateType.TYPE_REWARD;
            task.Update();
            (new Share.TGTask()).AdvancedTaskPush(task.user_id, task);    //推送协议
        }
예제 #4
0
파일: Common.LZH.cs 프로젝트: Lantnr/MyTest
 /// <summary>更新谣言任务</summary>
 private bool CheckRumorTask(tg_task task, string finishstep)
 {
     task.task_step_data = finishstep;
     task.task_state     = (int)TaskStateType.TYPE_REWARD;
     task.Update();
     return(true);
 }
예제 #5
0
        //private bool CheckQueue(Int64 userid)
        //{
        //    if (dic.ContainsKey(userid)) return false;
        //    dic.TryAdd(userid, true);
        //    return true;
        //}

        //private void RemoveQuene(Int64 userid)
        //{
        //    Boolean tryremove;
        //    dic.TryRemove(userid, out tryremove);
        //}

        #region 任务验证

        /// <summary>
        /// 接受任务验证
        /// </summary>
        /// <param name="task">tg_task实体</param>
        /// <param name="npcid">接取任务npcid</param>
        /// <param name="npc">前端提交npcid</param>
        /// <param name="session"></param>
        /// <returns>验证后返回的数据</returns>
        private ASObject ReceiveTaskCheck(tg_task task, Int32 npcid, int npc)
        {
            if (!Variable.OnlinePlayer.ContainsKey(task.user_id))
            {
                return(new ASObject(BulidReturnData((int)ResultType.UNKNOW_ERROR, null)));
            }

            if (npcid != npc)
            {
                return(new ASObject(BulidReturnData((int)ResultType.TASK_NPC_FALSE, null)));
            }
            if (task.task_state != (int)TaskStateType.TYPE_UNRECEIVED)
            {
                return(new ASObject(BulidReturnData((int)ResultType.TASK_RECEIVED, null)));
            }

            task.task_state = (int)TaskStateType.TYPE_UNFINISHED;
            tg_task.GetTaskUpdate(task.task_state, task.task_step_data, task.task_id, task.id, task.user_id);

            var session = Variable.OnlinePlayer[task.user_id] as TGGSession;

            session.MainTask.task_state = (int)TaskStateType.TYPE_UNFINISHED;
            //  RemoveQuene(task.user_id);
            return(new ASObject(BulidReturnData((int)ResultType.SUCCESS, task)));
        }
예제 #6
0
        /// <summary>谣言类任务</summary>
        /// <param name="player">玩家信息 player</param>
        /// <param name="task">任务信息 task</param>
        /// <param name="finishstep">任务步骤 finishstep</param>
        /// <param name="npcid">对话npcid </param>
        /// <returns>ASObject</returns>
        public ASObject RumorTask(Player player, tg_task task, string finishstep, int npcid)
        {
            var userid  = task.user_id;
            var myscene = Scene.GetSceneInfo((int)ModuleNumber.PRISON, player.User.id);

            if (myscene != null)
            {
                CommonHelper.ErrorResult((int)ResultType.TASK_VOCATION_PRISON);                     //验证是否在监狱中
            }
            //验证对话npc是否正确
            if (!CheckNpc(task.task_step_data, npcid))
            {
                return(CommonHelper.ErrorResult((int)ResultType.TASK_VOCATION_NOTASK));
            }
            //验证谣言任务是否成功
            var istrue = (new Share.TGTask()).IsTaskSuccess(player.Role, task.task_step_type);
            var gtask  = GetWorkInfo(userid);

            if (istrue)       //成功  更新任务
            {
                if (!CheckRumorTask(task, finishstep))
                {
                    return(CommonHelper.ErrorResult((int)ResultType.DATABASE_ERROR));
                }
                UpdateFailCount(task.task_step_type, gtask);    //更新失败次数
            }
            else
            {
                UpdateAndPush(task, gtask, player.User.id, player.User.player_name, player.Scene.scene_id);    //更新失败次数并验证是否入狱
            }
            return(new ASObject(BulidData((int)ResultType.SUCCESS, task)));
        }
예제 #7
0
        /// <summary> 评定结束</summary>
        public void CommandStart(tg_task task)
        {
#if DEBUG
            XTrace.WriteLine("任务{0}评定结束{1}--{2}", task.id, task.user_id, "PUSH_TASK_END");
#endif
            Common.GetInstance().AppraiseEnd(task);
            if (Variable.OnlinePlayer.ContainsKey(task.user_id))
            {
                var session = Variable.OnlinePlayer[task.user_id] as TGGSession;
                if (session == null)
                {
                    return;
                }
#if DEBUG
                XTrace.WriteLine("玩家{0}在线,向前端推送任务结束{0}", task.id);
#endif
                var dic = new Dictionary <string, object>()
                {
                    { "task", EntityToVo.ToRoleVo(task) }
                };
                var aso = new ASObject(dic);
                var pv  = session.InitProtocol((int)ModuleNumber.APPRAISE,
                                               (int)AppraiseCommand.PUSH_TASK_END, (int)ResponseType.TYPE_SUCCESS, aso);
                session.SendData(pv);
            }
        }
예제 #8
0
        /// <summary> 任务数据更新 </summary>
        public void TaskUpdate(tg_task task, string newstep, string basestep)
        {
            if (task == null)
            {
                return;
            }
            if (!Variable.OnlinePlayer.ContainsKey(task.user_id))
            {
                return;
            }
            var session = Variable.OnlinePlayer[task.user_id] as TGGSession;

            if (session == null || session.MainTask == null)
            {
                return;
            }
            task.task_step_data = newstep;
            if (newstep == basestep)
            {
                task.task_state = (int)TaskStateType.TYPE_REWARD;
            }
            tg_task.GetTaskUpdate(task.task_state, task.task_step_data, task.task_id, task.id, task.user_id);
            if (task.task_type == (int)TaskType.MAIN_TASK)
            {
                session.MainTask.task_state     = task.task_state;
                session.MainTask.task_step_data = task.task_step_data;
                session.MainTask.task_id        = task.task_id;
            }
        }
예제 #9
0
        /// <summary>多个npc完成总对话次数 任务验证 </summary>
        private bool CheckTwoNpc(string basestep, int npc, tg_task task)
        {
            var steplist = task.task_step_data.Split('_');
            var npccheck = false;

            for (var i = 0; i < steplist.Count(); i++)
            {
                if (steplist[i] != npc.ToString())
                {
                    continue;
                }
                npccheck = true;
                break;
            }
            if (npccheck == false)
            {
                return(false);
            }
            var countindex = steplist.Count() - 1;
            var count      = Convert.ToInt32(steplist[countindex]);
            var needcount  = Convert.ToInt32(basestep.Split('_')[countindex]);

            count++;
            if (count > needcount)
            {
                return(false);
            }
            steplist[3] = count.ToString();
            var newstep = string.Join("_", steplist);

            Common.getInstance().TaskUpdate(task, newstep, basestep);
            return(true);
        }
예제 #10
0
 /// <summary>
 /// 开启新线程
 /// </summary>
 /// <param name="time"></param>
 /// <param name="mytask"></param>
 /// <param name="finishstep"></param>
 public void NewTaskStart(Int64 time, tg_task mytask, string finishstep)
 {
     try
     {
         var token = new CancellationTokenSource();
         var task  = new System.Threading.Tasks.Task(() => SpinWait.SpinUntil(() =>
         {
             var taskinfo = Common.getInstance().GetWorkInfo(mytask.user_id);
             if (taskinfo.GuardSceneId == 0)
             {
                 token.Cancel();
                 return(true);
             }
             return(false);
         }, (int)time * 1000), token.Token);
         task.Start();
         task.ContinueWith(m =>
         {
             TaskUpdateAndSend(mytask, finishstep);
             token.Cancel();
         }, token.Token);
     }
     catch (Exception ex)
     {
         XTrace.WriteException(ex);
     }
 }
예제 #11
0
            /// <summary>
            /// 验证是否是最后一个主线任务
            /// </summary>
            /// <param name="task"></param>
            /// <param name=" baseindex"></param>
            /// <returns>bool:是否最后一个任务 BaseTaskMain:新任务基表数据 ASObject:最后一个任务返回前端数据</returns>
            private Tuple <bool, ASObject> CheckIsLastTask(tg_task task, int baseindex)
            {
                if (task == null)
                {
                    return(Tuple.Create(false, BulidReturnData((int)ResultType.UNKNOW_ERROR, null)));
                }
                if (baseindex == Variable.BASE_TASKMAIN.Count - 1) //判断是不是最后一个主线任务
                {
                    task.task_state = (int)TaskStateType.TYPE_FINISHED;
                    tg_task.GetTaskUpdate(task.task_state, task.task_step_data, task.task_id, task.id, task.user_id);
                    if (!Variable.OnlinePlayer.ContainsKey(task.user_id))
                    {
                        return(Tuple.Create(false, BulidReturnData((int)ResultType.UNKNOW_ERROR, null)));
                    }

                    var session = Variable.OnlinePlayer[task.user_id] as TGGSession;
                    if (session == null || session.MainTask == null)
                    {
                        return(Tuple.Create(false, BulidReturnData((int)ResultType.UNKNOW_ERROR, null)));
                    }
                    session.MainTask.task_state = (int)TaskStateType.TYPE_FINISHED;

                    var aso = !new Share.Reward().GetReward(Variable.BASE_TASKMAIN[baseindex].reward, task.user_id, (int)ModuleNumber.TASK, (int)TaskCommand.TASK_FINISH) ?
                              BulidReturnData((int)ResultType.BAG_ISFULL_ERROR, null)
                     : BulidReturnData((int)ResultType.SUCCESS, null);

                    // RemoveQuene(task.user_id);
                    return(Tuple.Create(true, aso));
                }
                // RemoveQuene(task.user_id);
                return(Tuple.Create(false, new ASObject()));
            }
예제 #12
0
파일: WORK_FIGHT.cs 프로젝트: Lantnr/MyTest
        /// <summary> 推送协议 </summary>
        /// <param name="session">session</param>
        /// <param name="task">任务实体</param>
        public void SendProtocol(TGGSession session, tg_task task)
        {
            var aso = new ASObject(BulidData(task));
            var pv  = session.InitProtocol((int)ModuleNumber.WORK, (int)WorkCommand.WORK_PUSH_UPDATE, (int)ResponseType.TYPE_SUCCESS, aso);

            session.SendData(pv);
        }
예제 #13
0
 /// <summary> 开启新线程 </summary>
 public void NewTaskStart(decimal time, tg_task newtask)
 {
     try
     {
         if (time < 0)
         {
             return;
         }
         if (Variable.RoleTask.ContainsKey(newtask.id))
         {
             return;
         }
         Variable.RoleTask.TryAdd(newtask.id, true);
         var token = new CancellationTokenSource();
         var task  = Task.Factory.StartNew(() => SpinWait.SpinUntil(() => false, (int)time), token.Token);
         task.ContinueWith(m =>
         {
             if (Variable.RoleTask.ContainsKey(newtask.id))
             {
                 var a = true;
                 Variable.RoleTask.TryRemove(newtask.id, out a);
             }
             var taskcheck = tg_task.FindByid(newtask.id); //验证该任务是否还存在,如果武将已经被放逐,任务则不存在
             if (taskcheck != null)
             {
                 PUSH_TASK_END.GetInstance().CommandStart(newtask);
             }
             token.Cancel();
         }, token.Token);
     }
     catch (Exception ex)
     {
         XTrace.WriteException(ex);
     }
 }
예제 #14
0
파일: Work.cs 프로젝트: Lantnr/MyTest
        /// <summary>高级任务推送</summary>
        /// <param name="user_id">玩家编号</param>
        /// <param name="task">推送任务实体</param>
        public void AdvancedWorkPush(Int64 user_id, tg_task task)
        {
            var    token = new CancellationTokenSource();
            Object obj   = new TaskObject {
                user_id = user_id, task = task
            };

            System.Threading.Tasks.Task.Factory.StartNew(m =>
            {
                var entity = m as TaskObject;
                if (entity == null)
                {
                    return;
                }
                if (!Variable.OnlinePlayer.ContainsKey(user_id))
                {
                    return;
                }
                var session = Variable.OnlinePlayer[entity.user_id] as TGGSession;
                if (session == null)
                {
                    return;
                }
                var data = new ASObject(BulidData((int)ResultType.SUCCESS, entity.task));
                Push(session, data, (int)WorkCommand.WORK_PUSH_UPDATE);
                token.Cancel();
            }, obj, token.Token);
        }
예제 #15
0
파일: Work.cs 프로젝트: Lantnr/MyTest
 private Dictionary <String, Object> BulidData(int result, tg_task newtask)
 {
     return(new Dictionary <string, object>
     {
         { "result", result },
         { "workVo", newtask == null ? null : EntityToVo.ToVocationTaskVo(newtask) }
     });
 }
예제 #16
0
파일: WORK_FIGHT.cs 프로젝트: Lantnr/MyTest
 /// <summary> 组装数据 </summary>
 private Dictionary <String, Object> BulidData(tg_task task)
 {
     return(new Dictionary <string, object>
     {
         { "result", (int)ResultType.SUCCESS },
         { "workVo", EntityToVo.ToVocationTaskVo(task) },
     });
 }
예제 #17
0
 /// <summary>
 /// 组装数据
 /// </summary>
 /// <param name="result"></param>
 /// <param name="task"></param>
 /// <returns></returns>
 private ASObject BuildData(int result, tg_task task)
 {
     return(new ASObject(new Dictionary <string, object>()
     {
         { "result", result },
         { "workVo", task == null?null:EntityToVo.ToVocationTaskVo(task) }
     }));
 }
예제 #18
0
파일: Common.cs 프로젝트: Lantnr/MyTest
 public void TaskUpdate(tg_task task, string newstep, string basestep)
 {
     task.task_step_data = newstep;
     if (newstep == basestep)
     {
         task.task_state = (int)TaskStateType.TYPE_REWARD;
     }
     task.Update();
 }
예제 #19
0
파일: EntityToVo.cs 프로젝트: Lantnr/MyTest
 /// <summary>
 /// 装换成主线任务vo
 /// </summary>
 /// <param name="task">tg_task实体</param>
 public static TaskVo ToTaskVo(tg_task task)
 {
     return(new TaskVo()
     {
         id = Convert.ToDouble(task.id),
         state = task.task_state,
         stepData = task.task_step_data,
         baseId = task.task_id,
     });
 }
예제 #20
0
        /// <summary> 组装数据 </summary>
        private Dictionary <String, Object> BulidReturnData(int result, tg_task newtask)
        {
            var dic = new Dictionary <string, object>
            {
                { "result", result },
                { "mainTask", newtask == null ? null : EntityToVo.ToTaskVo(newtask) }
            };

            return(dic);
        }
예제 #21
0
파일: WORK_FIGHT.cs 프로젝트: Lantnr/MyTest
        /// <summary> 任务失败 </summary>
        private ASObject TaskFightLose(TGGSession session, tg_task newtask)
        {
            var mainid = newtask.id;

            newtask    = Common.GetInstance().WorkTasksInit(newtask);
            newtask.id = mainid;
            newtask.Update();
            SendProtocol(session, newtask);
            return(new ASObject(BulidData()));
        }
예제 #22
0
        private ASObject BuildData(tg_task task)
        {
            var dic = new Dictionary <string, object>()
            {
                { "result", result },
                { "task", task == null ? null : EntityToVo.ToRoleVo(task) }
            };

            return(new ASObject(dic));
        }
예제 #23
0
        /// <summary>组装数据 </summary>
        private ASObject BuildData(int result, Int64 time, tg_task task)
        {
            var dic = new Dictionary <string, object>()
            {
                { "result", result },
                { "time", time },
                { "workVo", task == null?null:EntityToVo.ToVocationTaskVo(task) }
            };

            return(new ASObject(dic));
        }
예제 #24
0
파일: EntityToVo.cs 프로젝트: Lantnr/MyTest
 /// <summary>
 /// 转换成职业任务vo
 /// </summary>
 /// <param name="task">tg_task实体</param>
 public static VocationTaskVo ToVocationTaskVo(tg_task task)
 {
     return(new VocationTaskVo()
     {
         id = task.id,
         state = task.task_state,
         stepData = task.task_step_data,
         baseId = task.task_id,
         endTime = task.task_endtime,
     });
 }
예제 #25
0
파일: EntityToVo.cs 프로젝트: Lantnr/MyTest
 public static RoleTaskVo ToRoleVo(tg_task task)
 {
     return(new RoleTaskVo()
     {
         id = task.id,
         roleId = task.rid,
         time = task.task_endtime,
         baseId = task.task_id,
         beginTime = task.task_starttime,
         state = task.task_state,
     });
 }
예제 #26
0
 /// <summary>启动任务线程</summary>
 /// <param name="task">任务实体</param>
 private void TaskThreadStart(tg_task task)
 {
     switch (task.task_step_type)
     {
     case (int)TaskStepType.RAISE_COIN:
     {
         Common.GetInstance().RaiseTaskThread(task);
         (new Share.Work()).AdvancedWorkPush(task.user_id, task);
         break;
     }
     }
 }
예제 #27
0
        public ASObject TASK_VOCATION_REFRESH(TGGSession session)
        {
            string data = "202|1_200055_1|8_15020034_3_0";
            var    task = new tg_task();

            task.task_step_data = "202|1_200055_0|8_15020034_0_0";
            task.user_id        = 1;
            task.task_type      = 0;
            var aso = TGG.Module.Task.Service.Common.getInstance().ContinueFight(session, task, data, 200055);

            return(aso);
        }
예제 #28
0
        /// <summary>
        /// 任务步骤更新验证
        /// </summary>
        /// <param name="task">tg_task实体</param>
        /// <param name="basestep">基表任务条件</param>
        /// <param name="npc">前端提交npcid</param>
        /// <returns>验证后返回的数据</returns>
        private ASObject FinishTaskCheck(tg_task task, string basestep, int npc)
        {
            var tuple = new Share.TGTask().CheckTaskStep(basestep, task.task_step_data, task.user_id, npc);

            if (tuple.Item1 < 0)
            {
                return(new ASObject(BulidReturnData(tuple.Item1, null)));
            }
            Common.getInstance().TaskUpdate(task, tuple.Item2, basestep);
            // RemoveQuene(task.user_id);
            return(new ASObject(BulidReturnData((int)ResultType.SUCCESS, task)));
        }
예제 #29
0
파일: Common.LZH.cs 프로젝트: Lantnr/MyTest
        /// <summary>开启戒严线程</summary>
        private void NewArrestStart(decimal time, tg_task mytask, string finishstep)
        {
            try
            {
                var token = new CancellationTokenSource();
                var task  = new System.Threading.Tasks.Task(() => SpinWait.SpinUntil(() =>
                {
                    var taskinfo = Variable.TaskInfo.FirstOrDefault(q => q.userid == mytask.user_id);
                    if (taskinfo == null)
                    {
                        token.Cancel(); return(true);
                    }
                    switch (mytask.task_step_type)     //根据对应类型验证是否取消线程
                    {
                    case (int)TaskStepType.ARREST_RUMOR: if (taskinfo.ArrestRumorSceneId == 0)
                        {
                            token.Cancel(); return(true);
                        }
                        break;

                    case (int)TaskStepType.ARREST_FIRE: if (taskinfo.ArrestFireSceneId == 0)
                        {
                            token.Cancel(); return(true);
                        }
                        break;

                    case (int)TaskStepType.ARREST_BREAK: if (taskinfo.ArrestBreakSceneId == 0)
                        {
                            token.Cancel(); return(true);
                        }
                        break;

                    case (int)TaskStepType.ARREST_SEll_WINE: if (taskinfo.ArrestSellSceneId == 0)
                        {
                            token.Cancel(); return(true);
                        }
                        break;
                    }
                    return(false);
                }, (int)time * 1000), token.Token);
                task.Start();
                task.ContinueWith(m =>
                {
                    TaskUpdateAndSend(mytask, finishstep);
                    token.Cancel();
                }, token.Token);
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
            }
        }
예제 #30
0
        /// <summary> 得到新的家臣任务 </summary>
        private tg_task GetNewTask(tg_task task, IEnumerable <tg_task> newtasks)
        {
            var baseids  = newtasks.Select(q => q.task_id).ToList();
            var basetask = Variable.BASE_APPRAISE.Where(q => !baseids.Contains(q.id)).ToList();

            if (!basetask.Any())
            {
                return(null);
            }
            var indexlist = RNG.Next(0, basetask.Count - 1);

            return(indexlist >= basetask.Count ? null : new Share.TGTask().BuildNewRoleTask(basetask[indexlist].id, task.user_id));
        }