Пример #1
0
        /// <summary>
        /// 检测是否符合逻辑
        /// </summary>
        /// <param name="sk">技能</param>
        /// <param name="cfg">条件配置技能</param>
        /// <param name="caster">施法者忽略</param>
        /// <param name="targets">目标者们忽略</param>
        public bool check(RtSkData sk, ConditionConfigure cfg, ServerNPC caster, IEnumerable <ServerNPC> targets)
        {
                        #if DEBUG
            Utils.Assert(sk == null, "Skill is null in TimeoutCondition.");
            Utils.Assert(cfg == null, "ConditionConfigure is null in TimeoutCondition.");
                        #endif

            bool Condi = false;

            ///
            /// 1. 判定是否符合关心的BeHead类型
            ///
            var self           = this.GetType();
            var classAttribute = (ConditionAttribute)Attribute.GetCustomAttribute(self, typeof(ConditionAttribute));
            if (cfg.ConditionType == classAttribute.Con)
            {
                RtFakeSkData fakeSk = sk as RtFakeSkData;
                if (fakeSk != null)
                {
                    float TimeOut = cfg.Param1 * Consts.OneThousand;
                    ///
                    ///2.判定是否超时
                    ///
                    Condi = fakeSk.aliveDur >= TimeOut;

                    ///3.判定概率
                    if (Condi)
                    {
                        Condi = PseudoRandom.getInstance().happen(cfg.Prop);
                    }
                }
            }

            return(Condi);
        }
Пример #2
0
        /// <summary>
        /// 倒计时调用的检查逻辑
        /// </summary>
        /// <param name="fakeSk">Fake sk.</param>
        public void EnterIncite(RtFakeSkData fakeSk)
        {
            ConditionConfigure timeOut = pickUp(fakeSk);

            Utils.Assert(timeOut == null, "Time out must exist.");
            float max = timeOut.Param1 * Consts.OneThousand;

            //超时
            if (fakeSk.aliveDur >= max)
            {
                ServerLifeNpc life = WarServerManager.Instance.npcMgr.GetNPCByUniqueID(fakeSk.lifeNpcId) as ServerLifeNpc;
                life.runSkMd.switchToSkill(fakeSk.pos, timeOut.TargetSkID, false);
            }
        }
Пример #3
0
        /// <summary>
        /// 检测是否符合逻辑
        /// </summary>
        /// <param name="sk">技能</param>
        /// <param name="cfg">条件配置技能, 忽略</param>
        /// <param name="caster">施法者, 忽略</param>
        /// <param name="targets">目标者们, 忽略</param>
        public bool check(RtSkData sk, ConditionConfigure cfg, ServerNPC caster, IEnumerable <ServerNPC> targets)
        {
                        #if DEBUG
            Utils.Assert(sk == null, "Skill is null in CountingCondition.");
            Utils.Assert(cfg == null, "ConditionConfigure is null in CountingCondition.");
                        #endif

            bool Condi = false;

            ///
            /// 1. 判定是否符合关心的Counting类型
            ///
            var self           = this.GetType();
            var classAttribute = (ConditionAttribute)Attribute.GetCustomAttribute(self, typeof(ConditionAttribute));
            if (cfg.ConditionType == classAttribute.Con)
            {
                ///
                /// 2. 只有RtFakeSkData才有计算功能
                ///
                RtFakeSkData fakeSk = sk as RtFakeSkData;
                if (fakeSk != null)
                {
                    ///
                    /// 3. 判定计数
                    ///
                    if (fakeSk.curCounting >= cfg.Param1)
                    {
                        Condi = true;
                    }

                    ///4.判定概率
                    if (Condi)
                    {
                        Condi = PseudoRandom.getInstance().happen(cfg.Prop);
                    }
                }
            }

            return(Condi);
        }