Exemplo n.º 1
0
 /// <summary>
 /// 将技能中的属性(如果有)附加到单位属性上
 /// </summary>
 /// <param name="skillInfo">技能信息</param>
 /// <param name="memberData">单位属性</param>
 public void AttachSkillAttribute(SkillInfo skillInfo, VOBase memberData)
 {
     if (skillInfo == null || memberData == null)
     {
         return;
     }
     SkillBase.AdditionAttribute(memberData, skillInfo);
 }
Exemplo n.º 2
0
    /// <summary>
    /// buff的Attach事件
    /// </summary>
    /// <param name="buffInfo">buff数据</param>
    /// <param name="buffDoType">buff执行类型</param>
    /// <param name="paramsPacker"></param>
    public void DoBuff([NotNull] BuffInfo buffInfo, BuffDoType buffDoType, [NotNull] FormulaParamsPacker paramsPacker)
    {
        if (buffInfo.ReleaseMember == null || buffInfo.ReceiveMember == null)
        {
            throw new Exception("参数错误.");
        }

        IFormula formula = null;

        switch (buffDoType)
        {
        case BuffDoType.Action:
            formula = buffInfo.GetActionFormula(paramsPacker);
            break;

        case BuffDoType.Attach:

            // 互斥或叠加或共存的检测流程
            if (BuffAttachRule(buffInfo.ReceiveMember.ClusterData.AllData.BuffInfoList, buffInfo))
            {
                // 设置buff启动时间
                buffInfo.BuffStartTime = DateTime.Now.Ticks;
                formula = buffInfo.GetAttachFormula(paramsPacker);
                // 判断是否需要将buff放入TriggerTicker中
                if (buffInfo.BuffTime > Utils.ApproachZero)
                {
                    TriggerTicker.Single.Add(buffInfo);
                }
                buffInfo.ReceiveMember.ClusterData.AllData.BuffInfoList.Add(buffInfo);
                // 如果buff增加属性, 则将属性加入对象中
                SkillBase.AdditionAttribute(buffInfo.ReceiveMember.ClusterData.AllData.MemberData, buffInfo);
            }
            break;

        case BuffDoType.Detach:
            //Debug.Log("Buff Detach:" + buffInfo.AddtionId);
            buffInfo.ReceiveMember.ClusterData.AllData.BuffInfoList.Remove(buffInfo);
            formula = buffInfo.GetDetachFormula(paramsPacker);
            // 检查TriggerTicker中是否有该buff, 如果有则删除
            TriggerTicker.Single.Remove(buffInfo.AddtionId);

            // 如果buff增加了属性, 则将属性从对象属性中删除
            SkillBase.SubAttribute(buffInfo.ReceiveMember.ClusterData.AllData.MemberData, buffInfo.ChangedData);
            // 从buff列表中删除buff实例
            DelBuffInstance(buffInfo.AddtionId);
            break;
        }
        SkillManager.Single.DoFormula(formula);
    }
Exemplo n.º 3
0
 static int AdditionAttribute(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 2);
         VOBase    arg0 = (VOBase)ToLua.CheckObject(L, 1, typeof(VOBase));
         SkillBase arg1 = (SkillBase)ToLua.CheckObject(L, 2, typeof(SkillBase));
         SkillBase.AdditionAttribute(arg0, arg1);
         return(0);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }