/// <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)); }
/// <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)); }
/// <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()); } }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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))); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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()); } }