コード例 #1
0
 protected virtual bool AddBuff(ISkill srcSkill, ISkillPlayer caster, ISkillOwner target, bool pureFlag)
 {
     if (!pureFlag)
     {
         if (BoostUtil.IfAntiDebuff(this, srcSkill, target, true, (int)EnumBoostRootType.AntiPropDebuff))
         {
             return(true);
         }
     }
     if (this.ExecType == EnumBuffExec.MustHit)
     {
         int rate    = this.Rate;
         int maxRate = SkillDefines.MAXStorePercent;
         if (rate >= 0 && rate < maxRate)
         {
             if (srcSkill.Context.RandomPercent(maxRate) > rate)
             {
                 return(false);
             }
         }
     }
     target.AddBuff(InnerCreatePropBuff(srcSkill, caster));
     this.AddTgtShowModel(srcSkill, target, this.Last);
     return(true);
 }
コード例 #2
0
        protected override bool AddBuff(ISkill srcSkill, ISkillPlayer caster, ISkillPlayer target, bool pureFlag, int last, int rate)
        {
            if (this.BlurCode == (int)EnumBlurBuffCode.Stun)
            {
                last = srcSkill.Context.GetBuffLast(srcSkill, caster, last, target);
            }
            if (!pureFlag)
            {
                if (BoostUtil.IfAntiDebuff(this, srcSkill, target, true, (int)EnumBoostRootType.AntiBlur, this.BlurCode))
                {
                    return(true);
                }
                BoostUtil.GetEaseRate(out rate, rate, target, (int)EnumBoostRootType.BlurRate, this.BlurCode);
                if (this.Last > 0)
                {
                    BoostUtil.GetEaseLast(out last, last, target, (int)EnumBoostRootType.BlurLast, this.BlurCode);
                    last = srcSkill.Context.GetBuffLast(srcSkill, caster, last);
                }
            }
            if (!BuffUtil.ExecRate(out rate, rate, srcSkill.Context, this.ExecType))
            {
                return(false);
            }
            if (rate <= 0)
            {
                return(true);
            }
            int buffId = this.BuffId[0];

            if (buffId == (int)EnumBlurType.BanMan)
            {
                target.DisableState = (int)this.BlurCode;
                target.RaiseBlurEvent(new BlurEventArgs(target.BlurSrcSkill, target, target, (EnumBlurType)buffId, (EnumBlurBuffCode)this.BlurCode));
            }
            else
            {
                if (buffId == (int)EnumBlurType.LockMotion)
                {
                    target.RemoveBuff(buffId, 0);
                }
                if (!target.AddBuff(InnerCreateBuff(srcSkill, target, (short)last, rate)))
                {
                    return(false);
                }
                if (this.BlurCode == (int)EnumBlurBuffCode.Rebel)
                {
                    ((IPlayer)target).AddSilenceBuff(last);
                }
                if (this.BlurCode == (int)EnumBlurBuffCode.Falldown)
                {
                    target.RaiseBlurEvent(new BlurEventArgs(target.BlurSrcSkill, target, target, (EnumBlurType)buffId, (EnumBlurBuffCode)this.BlurCode));
                }
            }
            this.AddTgtShowModel(srcSkill, target, last);
            return(true);
        }
コード例 #3
0
        protected bool FoulPlayer(ISkill srcSkill, ISkillPlayer caster, ISkillPlayer target, int buffId, int rate, int depth)
        {
            int foulType = this.FoulType;

            if (null == target)
            {
                return(false);
            }
            if (null == caster || caster == target)
            {
                caster = target.OppSkillPlayer;
            }
            if (null == caster)
            {
                return(false);
            }
            if (!this.PureFlag)
            {
                //反弹犯规
                if (depth > 0 && BoostUtil.IfAntiDebuff(this, srcSkill, target, (int)EnumBoostRootType.TurnFoul))
                {
                    return(FoulPlayer(srcSkill, target, caster, buffId, rate, --depth));
                }
                //免疫犯规
                if (BoostUtil.IfAntiDebuff(this, srcSkill, target, (int)EnumBoostRootType.AntiFoul))
                {
                    return(true);
                }
                //降低犯规概率
                BoostUtil.GetEaseRate(out rate, rate, target, (int)EnumBoostRootType.FoulRate, buffId);
            }
            if (srcSkill.Context.RandomPercent(SkillDefines.MAXStorePercent) > rate)
            {
                return(true);
            }
            //一定概率降低犯规等级
            int point, percent;

            if (BoostUtil.GetEaseValue(out point, out percent, target, (int)EnumBoostRootType.FoulValue))
            {
                if (srcSkill.Context.RandomPercent(SkillDefines.MAXStorePercent) <= percent)
                {
                    foulType -= point;
                }
            }
            if (foulType >= 0)
            {
                InnerFoul(srcSkill, target, foulType);
            }
            return(true);
        }
コード例 #4
0
 protected void GetAmp(ISkill srcSkill, ISkillPlayer caster, bool pureFlag, out int last, out int rate)
 {
     //ISkillOwner owner = caster ?? srcSkill.Owner;
     BoostUtil.GetAmpRate(out rate, this.Rate, srcSkill, (int)EnumBoostRootType.BlurRate, this.BlurCode);
     last = this.Last;
     if (last > 0)
     {
         BoostUtil.GetAmpLast(out last, last, srcSkill, (int)EnumBoostRootType.BlurLast, this.BlurCode);
     }
     if (pureFlag || this.Last <= 0)
     {
         last = srcSkill.Context.GetBuffLast(srcSkill, caster, last);
     }
 }
コード例 #5
0
 protected void GetAmp(ISkill srcSkill, ISkillPlayer caster, int buffId, bool pureFlag, out int last, out int point, out int percent)
 {
     //ISkillOwner owner = caster ?? srcSkill.Owner;
     BoostUtil.GetAmpValue(out point, out percent, this.Point, this.Percent, srcSkill, ValueBuffUnits(buffId));
     last = this.Last;
     if (last > 0)
     {
         BoostUtil.GetAmpLast(out last, last, srcSkill, LastBuffUnits(buffId));
     }
     if (pureFlag || this.Last <= 0)
     {
         last = srcSkill.Context.GetBuffLast(srcSkill, caster, last);
     }
 }
コード例 #6
0
        protected virtual bool AddBuff(ISkill srcSkill, ISkillPlayer caster, ISkillPlayer target, bool pureFlag, int last, int rate)
        {
            if (!pureFlag)
            {
                if (BoostUtil.IfAntiDebuff(this, srcSkill, target, true, (int)EnumBoostRootType.AntiBlur, this.BlurCode))
                {
                    return(true);
                }
                BoostUtil.GetEaseRate(out rate, rate, target, (int)EnumBoostRootType.BlurRate, this.BlurCode);
                if (this.Last > 0)
                {
                    BoostUtil.GetEaseLast(out last, last, target, (int)EnumBoostRootType.BlurLast, this.BlurCode);
                    last = srcSkill.Context.GetBuffLast(srcSkill, caster, last);
                }
            }
            if (!BuffUtil.ExecRate(out rate, rate, srcSkill.Context, this.ExecType))
            {
                return(false);
            }
            if (rate <= 0)
            {
                return(true);
            }
            int buffId = this.BuffId[0];

            if (buffId == (int)EnumBlurType.BanMan)
            {
                target.DisableState = (int)this.BlurCode;
            }
            else
            {
                if (buffId == (int)EnumBlurType.LockMotion)
                {
                    target.RemoveBuff(buffId, 0);
                }
                if (!target.AddBuff(InnerCreateBuff(srcSkill, target, (short)last, rate)))
                {
                    return(false);
                }
            }
            this.AddTgtShowModel(srcSkill, target, last);
            return(true);
        }
コード例 #7
0
 protected virtual bool AddBuff(ISkill srcSkill, ISkillPlayer caster, ISkillOwner target, int buffId, bool pureFlag, int last, int point, int percent)
 {
     if (!pureFlag)
     {
         if (BoostUtil.IfAntiDebuff(this, srcSkill, target, true, (int)EnumBoostRootType.AntiPropDebuff))
         {
             return(true);
         }
         BoostUtil.GetEaseValue(out point, out percent, point, percent, target, ValueBuffUnits(buffId));
         if (this.Last > 0)
         {
             BoostUtil.GetEaseLast(out last, last, target, LastBuffUnits(buffId));
             last = srcSkill.Context.GetBuffLast(srcSkill, caster, last);
         }
     }
     if (!target.AddBuff(InnerCreatePropBuff(srcSkill, point, percent, (short)last)))
     {
         return(false);
     }
     this.AddTgtShowModel(srcSkill, target, last);
     return(true);
 }
コード例 #8
0
        public bool EffectPlayers(ISkill srcSkill, ISkillPlayer caster, IList <ISkillPlayer> dstPlayers)
        {
            if (null == dstPlayers || dstPlayers.Count == 0)
            {
                return(false);
            }
            int  last;
            int  rate;
            bool pureFlag = BoostUtil.IfPureBuff(this, srcSkill, caster);

            GetAmp(srcSkill, caster, pureFlag, out last, out rate);
            bool rtnVal = false;

            foreach (var target in dstPlayers)
            {
                rtnVal |= AddBuff(srcSkill, caster, target, pureFlag, last, rate);
            }
            if (rtnVal)
            {
                this.AddSrcShowModel(srcSkill, caster, last);
            }
            return(rtnVal);
        }
コード例 #9
0
 protected virtual void GetAmp(ISkill srcSkill, ISkillPlayer caster, int buffId, out int rate)
 {
     BoostUtil.GetAmpRate(out rate, this.Rate, srcSkill, (int)EnumBoostRootType.FoulRate, buffId);
 }