Пример #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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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)));
        }
Пример #6
0
        /// <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);
        }