/// <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); }
/// <summary> 验证破坏城门的间隔时间 </summary> /// <param name="playerdata">玩家活动数据</param> private ResultType IsTime(SiegePlayer playerdata) { var t = playerdata.gatetime + Variable.Activity.Siege.BaseData.GateTime; var time = Convert.ToDouble((DateTime.Now.Ticks - 621355968000000000) / 10000); if (t > time) { return(ResultType.ARENA_TIME_ERROR); } playerdata.gatetime = time; return(ResultType.SUCCESS); }
/// <summary>数据组装</summary> private Dictionary <String, Object> BuildData(int result, SiegePlayer player, Dictionary <string, Object> dataA, Dictionary <string, Object> dataB, List <ScenePlayerVo> list) { var dic = new Dictionary <string, object> { { "result", result }, { "ladder", player.count }, { "fame", player.fame }, { "dataA", dataA }, { "dataB", dataB }, { "playerList", list }, }; return(dic); }
/// <summary> 区分玩家应获得奖励 </summary> /// <param name="model">玩家活动数据</param> /// <param name="type">活动胜利类型</param> private List <RewardVo> ConvertRewardVos(SiegePlayer model, SiegeResultType type) { var list = new List <RewardVo>(); switch (type) { case SiegeResultType.DOGFALL: { list = GetRewardVos(model.fame, Convert.ToInt32(ActivityRewardType.DRAW)); break; } case SiegeResultType.EAST_LOSE: { list = GetRewardVos(model.fame, model.player_camp == (int)CampType.East ? Convert.ToInt32(ActivityRewardType.LOSE) : Convert.ToInt32(ActivityRewardType.WIN)); break; } case SiegeResultType.EAST_WIN: { list = GetRewardVos(model.fame, model.player_camp == (int)CampType.East ? Convert.ToInt32(ActivityRewardType.WIN) : Convert.ToInt32(ActivityRewardType.LOSE)); break; } default: { break; } } return(list); }
/// <summary> 破坏城门时间到后返回破坏城门结果 </summary> /// <param name="session">session</param> /// <param name="playerdata">玩家活动数据</param> private ASObject ThreadGateResult(Int64 userid, SiegePlayer playerdata) { playerdata.ismatching = false; var token = new CancellationTokenSource(); var task = new Task(() => SpinWait.SpinUntil(() => false, Variable.Activity.Siege.BaseData.GateTime), token.Token); task.Start(); task.ContinueWith(m => { if (!Variable.OnlinePlayer.ContainsKey(userid)) { return; } var session = Variable.OnlinePlayer[userid]; PUSH_GATE_RESULT.GetInstance().CommandStart(session); token.Cancel(); }, token.Token); return(new ASObject(Common.GetInstance().BuildData((int)ResultType.SUCCESS))); }
/// <summary> 数据验证 </summary> /// <param name="playerdata">要验证的玩家活动数据</param> /// <param name="boss">boss</param> private ResultType IsData(SiegePlayer playerdata, CampCondition boss) { if (playerdata.count < Variable.Activity.Siege.BaseData.BossLadder) { return(ResultType.SIEGE_YUNTI_ERROR); //验证云梯 } var time = Convert.ToDouble((DateTime.Now.Ticks - 621355968000000000) / 10000); if (playerdata.bosstime > time) { return(ResultType.ARENA_TIME_ERROR); //验证间隔 } if (boss == null) { return(ResultType.BASE_TABLE_ERROR); //验证全局Boss数据 } if (boss.GateLife > 0 || boss.BossLife <= 0) { return(ResultType.SIEGE_BOSS_ERROR); //验证城门是否破坏 } return(ResultType.SUCCESS); }