Beispiel #1
0
    public override bool Initialize(SkillEffectInitParam param)
    {
        SkillImpactInitParam initParam = param as SkillImpactInitParam;

        mImpactRes = initParam.impactResource;

        if (mImpactRes == null)
        {
            return(false);
        }

        return(base.Initialize(param));
    }
Beispiel #2
0
    /// <summary>
    /// 添加技能效果.
    /// </summary>
    /// <param name="attackerAttr">添加者的属性</param>
    /// <param name="effectManager">被添加者的技能效果控制器</param>
    /// <param name="type">效果类型</param>
    /// <param name="resID">效果ID</param>
    /// <returns></returns>
    public static ErrorCode StartSkillEffect(AttackerAttr attackerAttr,
                                             SkillEffectManager effectManager,
                                             SkillEffectType type,
                                             uint resID
                                             )
    {
        if (effectManager == null)
        {
            return(ErrorCode.LogicError);
        }

        SkillEffect          effect = null;
        SkillEffectInitParam param  = null;

        switch (type)
        {
        case SkillEffectType.Buff:
            effect = effectManager.FindSkillEffectByPredicate(new SkillUtilities.FindBuffByResource(resID));

            // 存在相同的buff, 进行叠加.
            if (effect != null)
            {
                return((effect as SkillBuff).AddStack());
            }

            // 不存在相同的buff, 创建buff.
            param = new SkillBuffInitParam(effectManager.Owner, attackerAttr, resID);

            // 移除所有与新buff互斥的效果.
            uint mutex = ((SkillBuffInitParam)param).buffResource.mutex;
            if (mutex != uint.MaxValue)
            {
                effectManager.ForEverySkillEffect(new SkillUtilities.KillMutuallyExclusiveSkillBuff(mutex));
            }
            break;

        case SkillEffectType.Impact:
            // 创建impact.
            param = new SkillImpactInitParam(effectManager.Owner, attackerAttr, resID);
            break;

        default:
            ErrorHandler.Parse(ErrorCode.ConfigError, "invalid skilleffect type " + (uint)type);
            break;
        }

        return(effectManager.CreateSkillEffect(param));
    }