Пример #1
0
    private bool checkSkillEffect()
    {
        DataType myName           = DataType.DATA_SKILL_EFFECT;
        IDictionaryEnumerator itr = DataManager.SkillEffectTable.GetEnumerator();

        while (itr.MoveNext())
        {
            SkillEffectTableItem item = itr.Value as SkillEffectTableItem;

            for (uint i = 0; i < SkillEffectTableItem.SkillEffectCount; ++i)
            {
                SkillEffectItem subItem = item.items[i];
                SkillEffectType type    = subItem.effectType;
                uint            resId   = subItem.effectID;
                switch (type)
                {
                case SkillEffectType.Buff:
                    if (!checkLink(myName, item.resID, DataType.DATA_SKILL_BUFF, resId))
                    {
                        return(false);
                    }
                    break;

                case SkillEffectType.Displacement:
                    if (!checkLink(myName, item.resID, DataType.DATA_SKILL_DISPLACEMENT, resId))
                    {
                        return(false);
                    }
                    break;

                case SkillEffectType.Impact:
                    if (!checkLink(myName, item.resID, DataType.DATA_SKILL_IMPACT, resId))
                    {
                        return(false);
                    }
                    break;

                case SkillEffectType.Spasticity:
                    if (!checkLink(myName, item.resID, DataType.DATA_SKILL_SPASTICITY, resId))
                    {
                        return(false);
                    }
                    break;

                case SkillEffectType.Invalid:
                    break;

                default:
                    checkParam(false, myName, item.resID, "效果类型");
                    return(false);
                }
            }
        }
//      foreach (int key in DataManager.SkillEffectTable.Keys)
//      {
//
//      }

        return(true);
    }
Пример #2
0
    /// <summary>
    /// 判断某一skilleffect是否是有害的.
    /// </summary>
    /// <param name="type">skilleffect的类型</param>
    /// <param name="resID">skilleffect的资源ID</param>
    /// <returns></returns>
    public static bool IsHarmfulEffect(SkillEffectType type, uint resID)
    {
        switch (type)
        {
        case SkillEffectType.Buff:
            SkillBuffTableItem resBuff = DataManager.BuffTable[resID] as SkillBuffTableItem;
            return(resBuff == null || resBuff.harmful);

        case SkillEffectType.Impact:
            SkillImpactTableItem resImpact = DataManager.ImpactTable[resID] as SkillImpactTableItem;
            return(resImpact == null || resImpact.harmful);

        case SkillEffectType.Displacement:
            SkillDisplacementTableItem resDisplacement = DataManager.DisplacementTable[resID] as SkillDisplacementTableItem;
            return(resDisplacement == null || resDisplacement.harmful);

        case SkillEffectType.Spasticity:
            return(true);

        default:
            ErrorHandler.Parse(ErrorCode.LogicError, "invalid skill effect type: " + type);
            break;
        }

        return(true);
    }
Пример #3
0
    public virtual void CreateSkillEffect(EffectCreateContext ctx)
    {
        SkillEffectType effectType = ctx.EffectType;

        switch (effectType)
        {
        case SkillEffectType.Damage:
        {
            m_effect = new EffectSDamage();
        }
        break;

        default:
        {
            Debug.LogError("Skill::CreateSkillEffect Effect Type Not Implement!!!");
        }
        break;
        }

        if (m_effect.Create(ctx) == false)
        {
            Debug.LogError("Skill::Create " + effectType + " Failed !!!");
        }

        m_effect.Start();
    }
Пример #4
0
        public static string GetEffectDesc(SkillEffectType skillEffectType)
        {
            CTextManager instance = Singleton <CTextManager> .instance;
            string       text     = "{0}{1}";
            object       obj      = "Skill_Common_Effect_Type_";
            uint         num      = (uint)skillEffectType;

            return(instance.GetText(string.Format(text, obj, num.ToString())));
        }
Пример #5
0
 public static void AddEffect(List <Effect> Effects, SkillEffectType EffectType)
 {
     if (EffectType != SkillEffectType.None)
     {
         if (EffectType == SkillEffectType.AddStatus)
         {
             Effects.Add(new AddStatusEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.RemoveStatus)
         {
             Effects.Add(new RemoveStatusEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.NumericModify)
         {
             Effects.Add(new AttributeNumericModifyEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.CauseDamage)
         {
             Effects.Add(new DamageEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.CureHero)
         {
             Effects.Add(new CureEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.AddShield)
         {
             Effects.Add(new AddShieldEffect()
             {
                 Enabled = true
             });
         }
         if (EffectType == SkillEffectType.StackTag)
         {
             Effects.Add(new StackTagEffect()
             {
                 Enabled = true
             });
         }
         EffectType = SkillEffectType.None;
     }
 }
Пример #6
0
        public static string GetEffectDesc(SkillEffectType skillEffectType)
        {
            CTextManager arg_1D_0 = Singleton <CTextManager> .get_instance();

            string arg_18_0 = "{0}{1}";
            object arg_18_1 = "Skill_Common_Effect_Type_";
            uint   num      = skillEffectType;

            return(arg_1D_0.GetText(string.Format(arg_18_0, arg_18_1, num.ToString())));
        }
Пример #7
0
    public void RemovePower()
    {
        if (recepient == null)
        {
            return;
        }
        effectType = SkillEffectType.debuff;

        ImplementPower();
    }
Пример #8
0
 public override void Read(XmlNode item)
 {
     skillAreaType     = (SkillAreaType)GetInt(item, "skillAreaType");
     skillEffectType   = (SkillEffectType)GetInt(item, "skillEffectType");
     skillAdditionType = (SkillAdditionType)GetInt(item, "skillAdditionType");
     id        = GetInt(item, "id");
     skillName = GetString(item, "skillName");
     range     = GetInt(item, "range");
     des       = GetString(item, "des");
 }
Пример #9
0
 public Skill()
 {
     Id              = 1;
     NameLang        = 10000;
     DescriptionLang = 10001;
     Image           = Resources.Load("Skill/LinerSword", typeof(Sprite)) as Sprite;
     HotKeyIndex     = 0;
     RangeType       = SkillRangeType.Line;
     Range           = 3;
     EffectType      = SkillEffectType.PhysicalDamage;
     CD              = 2;
     Power           = 10000;
 }
Пример #10
0
        public int NameToValue(SkillEffectType status)
        {
            switch (status)
            {
            case SkillEffectType.MaxHp:
                return(MaxHp);

            case SkillEffectType.PAtk:
                return(PAtk);

            case SkillEffectType.PDef:
                return(PDef);

            case SkillEffectType.PCri:
                return(PCri);

            case SkillEffectType.MAtk:
                return(MAtk);

            case SkillEffectType.MDef:
                return(MDef);

            case SkillEffectType.MCri:
                return(MCri);

            case SkillEffectType.Hit:
                return(Hit);

            case SkillEffectType.Avoid:
                return(Avoid);

            case SkillEffectType.Accuracy:
                return(Accuracy);

            case SkillEffectType.HealUp:
                return(HealUp);

            case SkillEffectType.TPUp:
                return(TPUp);

            case SkillEffectType.HPAuto:
                return(HPAuto);

            case SkillEffectType.TPAuto:
                return(TPAuto);

            default:
                return(0);
            }
        }
Пример #11
0
    /// <summary>
    /// 给当前单位添加技能效果.
    /// </summary>
    /// <param name="attackerAttr">为this添加技能效果的单位的属性</param>
    /// <param name="type">效果类型</param>
    /// <param name="resID">效果ID</param>
    /// <returns></returns>
    public ErrorCode AddSkillEffect(AttackerAttr attackerAttr, SkillEffectType type, uint resID)
    {
        // 是否死亡.
        if (IsDead())
        {
            return(ErrorCode.TargetIsDead);
        }

        // 由单位的本身类型, 决定的是否免疫给类型的技能效果.
        if (SkillEffectImmunity(type))
        {
            return(ErrorCode.AddEffectFailedSkillEffectImmunity);
        }

        if (SkillUtilities.IsHarmfulEffect(type, resID) && IsInviolable())
        {
            return(ErrorCode.AddEffectFailedSkillEffectImmunity);
        }

        ErrorCode err = ErrorCode.ConfigError;

        switch (type)
        {
        case SkillEffectType.Spasticity:
            #region Pending
            err = SkillDetails.StartSpasticity(mActionCenter, attackerAttr, resID, ref mSpasticityCd);
            #endregion Pending
            break;

        case SkillEffectType.Displacement:
            err = SkillDetails.StartDisplace(mActionCenter, attackerAttr, resID);
            break;

        case SkillEffectType.Buff:
        case SkillEffectType.Impact:
            err = SkillDetails.StartSkillEffect(attackerAttr, mSkillEffectManager, type, resID);
            break;

        default:
            break;
        }

        if (err == ErrorCode.Succeeded && type == SkillEffectType.Buff)
        {
            onSkillBuffAdded((uint)resID);
        }

        return(err);
    }
Пример #12
0
    public static void Damage(Character character, int damage, SkillEffectType skillEffect, SkillLevelConf skillLevel)
    {
        Debug.LogError("Damage   " + damage + "name  " + character.name);
        switch (skillEffect)
        {
        case SkillEffectType.blood:
            if (character.blood - damage <= 0)
            {
                character.Dead();
            }
            else if (character.blood - damage > character.totalBlood)
            {
                character.blood = character.totalBlood;
            }
            else
            {
                character.blood -= damage;
            }
            break;

        case SkillEffectType.gas:
            if (character.gas - damage < 0)
            {
                character.gas = 0;
            }
            else if (character.gas - damage > character.totalGas)
            {
                character.gas = character.totalGas;
            }
            else
            {
                character.gas -= damage;
            }
            break;
        }
        if (skillLevel.buffList != null)
        {
            List <Buff> buffs = GetBuff(skillLevel.buffList);
            if (buffs != null)
            {
                character.buffList.AddRange(buffs);
            }
        }
        if (character.IsNPC)
        {
            character.GetComponent <AIBase>().IsAttack = true;
        }
    }
Пример #13
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));
    }
Пример #14
0
    public virtual bool Create(EffectCreateContext ctx)
    {
        m_owner = GameMgr.Instance.m_entityMgr.Get(ctx.TargetUID);
        if (m_owner == null)
        {
            return(false);
        }

        m_effectType = ctx.EffectType;
        m_srcID      = ctx.SrcUID;
        m_targetID   = ctx.TargetUID;
        m_showID     = ctx.ShowID;
        m_hitShowID  = ctx.HitShowID;

        return(true);
    }
Пример #15
0
    static public void UseSkillEffect(uint objId, SkillEffectType type, uint resID)
    {
        BaseScene scn = SceneManager.Instance.GetCurScene();

        if (scn == null)
        {
            return;
        }

        ObjectBase obj = scn.FindObject(objId);

        if (obj == null)
        {
            return;
        }

        BattleUnit npc = (BattleUnit)obj;

        npc.AddSkillEffect(new AttackerAttr(npc), type, resID);
    }
Пример #16
0
    /// <summary>
    /// 添加出生技能效果, 不会检查是否可以添加该效果.
    /// </summary>
    /// <param name="summonerAttr">召唤者的属性, 如果没有召唤者, 那么通过this构造该结构</param>
    protected ErrorCode AddBornSkillEffect(AttackerAttr summonerAttr, SkillEffectType type, uint resID)
    {
        ErrorCode err = ErrorCode.ConfigError;

        switch (type)
        {
        case SkillEffectType.Displacement:
            err = SkillDetails.StartDisplace(mActionCenter, summonerAttr, resID);
            break;

        case SkillEffectType.Buff:
        case SkillEffectType.Impact:
            err = SkillDetails.StartSkillEffect(summonerAttr, mSkillEffectManager, type, resID);
            break;

        default:
            break;
        }

        return(err);
    }
Пример #17
0
 public Skill(int id)
 {
     this.SkillID = id;
     if (id == 1) {
         this.Name = "愤怒一击";
         this.Type = SkillType.Active;
         this.TargetNumber = 1;
         this.TargetState =  SkillTargetState.EnemyAlive;
         this.TargetStrategy = SkillTargetStrategy.Random;
         this.EffectType = SkillEffectType.HPReduce;
         this.EffectValue = 5;
         this.EffectProbability = 0.8;
         this.SpellType = SkillSpellType.AfterCooldown;
         this.FirstSpellTurn = 1;
         this.CurrentHPRequire = 1;
         this.UnitCountRequire = 1;
         this.Cooldown = 3;
     }
 }
Пример #18
0
 public static string GetEffectSlotBg(SkillEffectType skillEffectType)
 {
     return(string.Format("{0}{1}", "UGUI/Sprite/Common/", CSkillData.slotBgStrs[(int)((uint)((UIntPtr)((ulong)((long)(skillEffectType - SkillEffectType.Physical)))))]));
 }
Пример #19
0
        public static string GetEffectDesc(SkillEffectType skillEffectType)
        {
            uint num = (uint)skillEffectType;

            return(Singleton <CTextManager> .instance.GetText(string.Format("{0}{1}", "Skill_Common_Effect_Type_", num.ToString())));
        }
Пример #20
0
 protected override bool SkillEffectImmunity(SkillEffectType type)
 {
     // 免疫位移, buff和硬直.
     return(type == SkillEffectType.Displacement || type == SkillEffectType.Buff || type == SkillEffectType.Spasticity);
 }
Пример #21
0
 /// <summary>
 /// 返回true, 表示免疫某些类型的技能效果.
 /// </summary>
 protected virtual bool SkillEffectImmunity(SkillEffectType type)
 {
     return(false);
 }
Пример #22
0
 public static string GetEffectSlotBg(SkillEffectType skillEffectType)
 {
     return(string.Format("{0}{1}", "UGUI/Sprite/Common/", CSkillData.slotBgStrs[(int)(skillEffectType - 1)]));
 }
Пример #23
0
    public static ParticleEffect showEfectBySkillEffectTypeWithCharacterSize(int effId, Monster target, SkillEffectType type, int attackerUniqueId = -1000)
    {
        switch (type)
        {
        case  SkillEffectType.isUp:
            if (string.IsNullOrEmpty(GameManager.info.skillEffectSetupData[effId].effUp))
            {
                return(null);
            }
            return(GameManager.info.effectData[GameManager.info.skillEffectSetupData[effId].effUp].getParticleEffectByCharacterSize(attackerUniqueId, target));

            break;

        case  SkillEffectType.isDown:
            if (string.IsNullOrEmpty(GameManager.info.skillEffectSetupData[effId].effDown))
            {
                return(null);
            }
            return(GameManager.info.effectData[GameManager.info.skillEffectSetupData[effId].effDown].getParticleEffectByCharacterSize(attackerUniqueId, target));

            break;

        case  SkillEffectType.upLoop:
            if (string.IsNullOrEmpty(GameManager.info.skillEffectSetupData[effId].effUpLoop))
            {
                return(null);
            }
            return(GameManager.info.effectData[GameManager.info.skillEffectSetupData[effId].effUpLoop].getParticleEffectByCharacterSize(attackerUniqueId, target, target.tf, target.tf));

            break;

        case  SkillEffectType.downLoop:
            if (string.IsNullOrEmpty(GameManager.info.skillEffectSetupData[effId].effDownLoop))
            {
                return(null);
            }
            return(GameManager.info.effectData[GameManager.info.skillEffectSetupData[effId].effDownLoop].getParticleEffectByCharacterSize(attackerUniqueId, target, target.tf, target.tf));

            break;
        }

        return(null);
    }