예제 #1
0
파일: sdBuff.cs 프로젝트: tsinglee2009/Dczg
    void    ModifySkillEffectProperty(
        HeaderProto.ESkillEffectPro PropertyType,
        HeaderProto.EOpreationFlag opType,
        HeaderProto.EOpreationFlag dataType,
        int data,
        HeaderProto.EEffectSkillBuffOptType optType,
        int SkillEffect_UID,
        bool bBegin
        )
    {
        string PropertyName = sdActorInterface.SkillEffectName[(int)PropertyType];

        if (PropertyName.Length == 0)
        {
            return;
        }
        SkillEffect baseSkillEffect  = sdConfDataMgr.Instance().m_BaseSkillEffect[SkillEffect_UID] as SkillEffect;
        Hashtable   skillEffectArray = GetActor().GetSkillEffect();
        SkillEffect skillEffect      = skillEffectArray[SkillEffect_UID] as SkillEffect;

        int Orgin   = (int)sdConfDataMgr.GetMemberValue(baseSkillEffect, PropertyName);
        int Current = (int)sdConfDataMgr.GetMemberValue(skillEffect, PropertyName);
        int iValue  = ConvertValue(dataType, data, Orgin);

        Current = GetModifyValue(bBegin, opType, Orgin, Current, iValue);

        sdConfDataMgr.SetMemberValue(skillEffect, PropertyName, Current);
    }
예제 #2
0
    public GameObject CreateEffect(string effectName, Vector3 position)
    {
        if (string.IsNullOrEmpty(effectName))
        {
            return(null);
        }

        GameObject toCreate = GetEffectFromPool(effectName);

        if (toCreate == null)
        {
            toCreate = CreateNewEffectToScene(effectName);
            toCreate.transform.localPosition = Vector3.zero;
            toCreate.transform.localRotation = Quaternion.identity;
            SkillEffect se = toCreate.AddComponent <SkillEffect>();
            se.CreateEffect(position);
            AddCount(se);
        }
        else
        {
            toCreate.transform.localPosition = Vector3.zero;
            toCreate.transform.localRotation = Quaternion.identity;
            SkillEffect se = toCreate.GetComponent <SkillEffect>();
            se.EnableEffect(position);
            AddCount(se);
        }

        return(toCreate);
    }
예제 #3
0
        private IEnumerator SkillEffectCorutine(SkillEffect skill)
        {
            skill.ActivateSkillAction.Perform();
            yield return(new WaitForSeconds(skill.SkillEffectDuration));

            skill.DeactivateSkillAction.Perform();
        }
예제 #4
0
        protected void ApplyEffect(Character source, GameObject target, SkillEffect ef, bool allowStackingSameEffect = false)
        {
            foreach (EquippableItem u in Owner.Inventory.ActiveUpgrades)
            {
                u.ModifySkillEffects(this, new SkillEffect[] { ef });
            }

            ef.Source            = source;
            ef.SourceSkill       = GetSkillId();
            ef.SourceSkillObject = this;

            if (!allowStackingSameEffect && !(ef is EffectDamage))
            {
                Character targetCh = target.GetChar();

                if (targetCh != null && targetCh.HasEffectAlready(ef))
                {
                    SkillEffect oldEf = targetCh.GetCopyEffect(ef);

                    if (oldEf != null)
                    {
                        targetCh.RemoveEffect(oldEf);
                    }
                    else
                    {
                        return;
                    }
                }
            }

            ef.ApplyEffect(source, target);
        }
예제 #5
0
    public void UpdateSkillEffects(uint elapsed)
    {
        // 构造临时容器, 更新之中的元素.
        // 因为在Update和Stop一个SkillEffect时, 可能产生新的SkillEffect加入到mContainer中,
        // 因此只遍历当前容器内的元素.
        int count = mContainer.Count;

        for (int i = 0; i < count; ++i)
        {
            SkillEffect effect = mContainer[i];
            if (!effect.IsAwake)
            {
                continue;
            }

            UpdateRetCode retCode = effect.Update(elapsed);
            if (retCode != UpdateRetCode.Continue)
            {
                // effect从运行状态开始, 经过Update之后, 不在工作, 原因只可能是
                // 时间结束或者在Update中, 被终止(不可能被回收).
                effect.Stop(retCode == UpdateRetCode.Finished
                                        ? SkillEffectStopReason.Expired : SkillEffectStopReason.Diffused
                            );
            }
        }

        mContainer.RemoveAll(x => (!x.IsAwake));
    }
예제 #6
0
    public void InitCastSkill(uint skill_id, ISkillPart skillPart, uint attackActionID)
    {
        if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART)
        {
            playerSkill = skillPart as PlayerSkillPart;
            SkillEffectProp skillEffectProp;
            if (playerSkill.SkillEffectDic.TryGetValue((int)skill_id, out skillEffectProp) == false)
            {
                skillEffectProp = playerSkill.RegisterSkill(skill_id);
                if (skillEffectProp == null)
                {
                    Log.LogGroup("ZDY", "没有注册技能配置 {0}", skill_id.ToString());
                }
                return;
            }

            playerSkill.NextSkillID     = 0;
            playerSkill.CurSkillID      = skill_id;
            playerSkill.AttackAnimState = null;
            playerSkill.SetFighting(true);

            SkillEffect skillEffect = CreateSkillEffect(skillEffectProp);
            Cast(skillEffect, skill_id);
        }
    }
예제 #7
0
 public void AddRunSkillEffect(SkillEffect eff)
 {
     if (!m_runSkillEffect.Contains(eff))
     {
         m_runSkillEffect.Add(eff);
     }
 }
예제 #8
0
    /// <summary>
    /// 서버로부터 전송받은 스킬의 효과를 대상에게 적용하도록 하는 함수
    /// </summary>
    /// <param name="tCampNum">타겟의 캠프 번호</param>
    /// <param name="tIndex">타겟이 되는 로봇의 번호</param>
    /// <param name="statusType">효과가 적용되는 스테이터스 타입</param>
    /// <param name="ccType">효과에 담긴 CC 타입</param>
    /// <param name="amount">변화할 스테이터스의 양</param>
    /// <param name="duration">변화할 시간. 0이면 무제한</param>
    public void ApplySkillEffect(int tCampNum, int tIndex, int statusType, int ccType, int amount, float duration, float chp)
    {
        Robot target;

        if (tCampNum == 1)
        {
            target = robotManager.FirstCampRobot(tIndex);
        }
        else
        {
            target = robotManager.SecondCampRobot(tIndex);
        }

        SkillEffect effect = new SkillEffect((StatusType)statusType, (CCType)ccType, amount, duration);

        if (target == null)
        {
            Debug.Log("해당하는 타겟을 찾을 수 없습니다. 스킬 효과 적용을 무시합니다." + System.Environment.NewLine
                      + "타겟 정보 : " + tCampNum + "P의 " + tIndex + "번째 로봇" + System.Environment.NewLine
                      + "스킬 정보 : " + (StatusType)statusType + "스탯, " + (CCType)ccType + "CC 기, " + amount + "만큼 " + duration + "초 동안 변화");
            return;
        }
        target.Synchronize(chp);
        target.Apply(effect);

        // 상대 로봇에게 가한 damage를 게임매니저에 저장.
        if ((StatusType)statusType == StatusType.CHP && tCampNum != MyCampNum)
        {
            if (amount < 0)
            {
                IncDamageCount(-amount);
            }
        }
    }
예제 #9
0
    /// <summary>
    /// 根据参数, 创建技能效果, 并使之开始运行.
    /// </summary>
    /// <returns></returns>
    public ErrorCode CreateSkillEffect(SkillEffectInitParam param)
    {
        SkillEffect effect = SkillDetails.AllocSkillEffect(param);

        if (effect == null)
        {
            return(ErrorCode.InvalidParam);
        }

        if (!effect.Initialize(param))
        {
            return(ErrorCode.LogicError);
        }

        ErrorCode err = effect.Start(param);

        if (err == ErrorCode.Succeeded)
        {
            if (effect.NeedUpdate)
            {
                mContainer.Add(effect as SkillBuff);
            }
            else
            {
                effect.Stop(SkillEffectStopReason.Expired);
            }
        }

        return(err);
    }
예제 #10
0
 public override void NotifyEffectRemoved(SkillEffect eff)
 {
     if (eff is EffectSkillReuse)
     {
         DeleteParticleEffect(particleSystem);
     }
 }
예제 #11
0
 private void ApplyEnmityToCharacters(BattleCharacter actor, SkillEffect effect, List<BattleCharacter> targets)
 {
     foreach (var target in targets)
     {
         this.ApplyEnmityToCharacter(actor, effect, target);
     }
 }
예제 #12
0
    public void showPlayerSkillActivate()
    {
        SkillEffect se = bcManager.getBattleSkillEffect();

        if (se == null)
        {
            // 沒使用技能
            Debug.Log("普通攻擊動畫!");
        }
        else
        {
            if (se.isSkillActivated)
            {
                // 技能發動成功
                battleSkillText.text = usingBattleSkill.skillName_ch;
                playSkillActivatedAnimation();
                Debug.Log("技能動畫! 技能成功");
            }
            else
            {
                // 技能沒發動成功
                Debug.Log("普通攻擊動畫! 技能失敗");
            }
        }
    }
예제 #13
0
    private void PatchSkillEffect(SkillEffect b)
    {
        switch (b.TypeValue)
        {
        case SkillEffect.EffectType.UpAttack:
            Status.AttackBase += b.Value;
            break;

        case SkillEffect.EffectType.UpCrit:
            Status.CritOffset += b.Value;
            break;

        case SkillEffect.EffectType.UpDodge:
            Status.Dodge += b.Value;
            break;

        case SkillEffect.EffectType.UpAim:
            Status.Aim += b.Value;
            break;

        case SkillEffect.EffectType.AddAttackTimes:
            Status.AdditionalAttackTimes += b.Value;
            break;

        case SkillEffect.EffectType.UpLife:
            Status.life_max += b.Value;
            break;
        }
    }
    IEnumerator PlayerAttackRoutine()
    {
        SkillEffect se = bcManager.getBattleSkillEffect();

        uiManager.showPlayerAttack();
        bcManager.destroyAllDice();         // 清掉骰子模型

        uiManager.showPlayerSkillActivate();

        if (se == null)
        {
            yield return(new WaitForSeconds(0.8f));
        }
        else
        {
            yield return(new WaitForSeconds(1));
        }

        if (bcManager.turnDamage > 0)
        {
            uiManager.showPlayerAttackAnim();

            yield return(new WaitForSeconds(0.5f));

            audioManager.playPlayerAttack();
            if (se != null && se.isSkillActivated && se.isDamage)
            {
                Instantiate(bcManager.getBattleSkill().skillprefab, monster.transform.position, Quaternion.identity);
            }

            else
            {
                Instantiate(normalAttackPrefab, monster.transform.position, Quaternion.identity);
            }
            uiManager.showMonsterHurt();
            yield return(new WaitForSeconds(1));
        }

        if (se != null && se.isHeal && se.heal > 0)
        {
            Instantiate(HealPrefab, currentCharacter.transform.position, Quaternion.identity);
            uiManager.showPlayerRecoverHp();
            yield return(new WaitForSeconds(1));
        }

        // demo用
        if (monster.Hp <= 0)
        {
            // 提醒一下,換scene前一定要將角色parent移回dataManager,不然就算有Don't Destroy,也因為父親被砍,而消失。
            // 只有戰敗死亡的時候,才不用管,反正都要重頭來過
            currentCharacter.transform.SetParent(dataManager.transform, false);
            currentCharacter.transform.localPosition = new Vector3(0f, 10f, 0f);
            screenEffectManager.fadeOutToLoot();
        }

        uiManager.updateMonsterUI();
        uiManager.updateCharacterUI();
        uiManager.showNextButton();
        currentUnitIndex = (currentUnitIndex + 1) % battleUnits.Length;
    }
예제 #15
0
    public void CreateSkillEffect()
    {
        uint count = m_skillEffectData.Number;

        if (count <= 0)
        {
            return;
        }

        bool hasInit = count == m_lstSkillList.Count;

        float   startShowTime = 0;
        Vector2 startPos      = (Vector2)m_owner.Transform.position + m_startPosOffset;

        for (int i = 0; i < count; i++)
        {
            if (!hasInit)
            {
                SkillEffect skillEffect = new SkillEffect(m_skillEffectData);
                m_lstSkillList.Add(skillEffect);
                skillEffect.Initialize(startShowTime, startPos, m_owner.Direction, m_loadObj, m_rootTrans, m_owner);
            }
            else
            {
                m_lstSkillList[i].Initialize(startShowTime, startPos, m_owner.Direction, m_loadObj, m_rootTrans, m_owner);
            }

            startShowTime += m_skillEffectData.CreatDeltaTime;
            startPos      += m_createPosOffset;
        }
    }
예제 #16
0
    public double CalculateDamage(BattleCharacter attacker, BattleCharacter defender, SkillEffect effect, bool shouldCritical)
    {
        var damage = 0d;
        if (effect.HasStatModifier(Const.Stats.Attack))
        {
            var modifiedAtk = attacker.GetStatWithModifiers(Const.Stats.Attack, effect.StatsModifiers);
            damage += modifiedAtk.Value - defender.GetStat(Const.Stats.Defense);
        }

        if (effect.HasStatModifier(Const.Stats.Wisdom))
        {
            var modifiedWis = attacker.GetStatWithModifiers(Const.Stats.Wisdom, effect.StatsModifiers);
            damage += modifiedWis.Value - defender.GetStat(Const.Stats.Mind);
        }

        if (effect.HasStatModifier(Const.Stats.Mind))
        {
            damage += attacker.GetStatWithModifiers(Const.Stats.Mind, effect.StatsModifiers).Value;
        }

        if (shouldCritical)
        {
            damage *= Const.CriticalDamageMultiplier;
        }

        // damage value needs to be positive or zero at this point so a low atk doesn't heal a high def without going thru affinities 
        damage = Math.Max(0d, damage);

        damage = ApplyAffinityBonuses(damage, defender, effect.Affinities);

        return Math.Floor(damage);
    }
예제 #17
0
 public TrashBin(TimeSpan birthTime, Texture texture, Vector startingPosition, string name, int price, string description, string iconTextureKey,
                 NecessityEffect necessityEffect, SkillEffect skillEffect)
     : base(birthTime, name, texture, startingPosition, price, description, iconTextureKey)
 {
     NecessityEffect = necessityEffect;
     SkillEffect     = skillEffect;
 }
예제 #18
0
    public override SkillEffect calSkillEffect(int[] checkValue)
    {
        bool isTrigger = true;

        finalCheckValue = 0;
        SkillEffect skilleffect = new SkillEffect(this.isDamage,
                                                  this.isHeal,
                                                  this.isDodge,
                                                  this.isShield,
                                                  this.isDisable,
                                                  this.isSelfDisable,
                                                  this.isMPDamage,
                                                  this.isHealMP);

        for (int i = 0; i < checkValue.Length; i++)
        {
            finalCheckValue += checkValue[i];
            if (checkValue[i] < 2)
            {
                isTrigger = false;
            }
        }

        if (isTrigger)
        {
            finalCheckValue += 4;
            skilleffect.setSkillActivated(true);
            Debug.Log("迴旋斬發動成功! - " + finalCheckValue);
        }

        skilleffect.setDamage(finalCheckValue);
        return(skilleffect);
    }
예제 #19
0
 public Skill(string name, Cost cost, SkillEffect effect, double skillStrength)
 {
     Name          = name;
     Cost          = cost;
     Effect        = effect;
     SkillStrength = skillStrength;
 }
예제 #20
0
 protected override void takeAction(SkillEffect effect)
 {
     if (effect.NeedRemoveOnOwnerEvent(mOwnerEvent))
     {
         effect.Stop(StopReason);
     }
 }
예제 #21
0
    public override SkillEffect calSkillEffect(int[] checkValue)
    {
        SkillEffect skilleffect = new SkillEffect(this.isDamage,
                                                  this.isHeal,
                                                  this.isDodge,
                                                  this.isShield,
                                                  this.isDisable,
                                                  this.isSelfDisable,
                                                  this.isMPDamage,
                                                  this.isHealMP);

        finalCheckValue = 0;
        for (int i = 0; i < checkValue.Length; i++)
        {
            if (checkValue[i] % 2 == 1)
            {
                finalCheckValue += checkValue[i];
            }
        }

        // 吸收對方的MP 回復自己的

        Debug.Log("魔力吸收! - " + finalCheckValue);
        skilleffect.setSkillActivated(true);
        skilleffect.setHealMP(finalCheckValue);
        skilleffect.setMPDamage(finalCheckValue);
        return(skilleffect);
    }
예제 #22
0
    //-----------------------------------------------------------------------//
    //
    // 戦闘判定用
    //
    //-----------------------------------------------------------------------//
    protected override bool BattleCanHit3Way()
    {
        SkillData        ActiveSkill = JobManager.instance.GetSkillFromID(ActiveSkillID);
        List <SkillData> UsableSkill = JobManager.instance.GetUsableSkill(this);

        if (ActiveSkill != null)
        {
            foreach (SkillEffect b in ActiveSkill.SkillEffect)
            {
                if (b.TypeValue == SkillEffect.EffectType.Hit3Way)
                {
                    return(true);
                }
            }
        }
        foreach (SkillData s in UsableSkill)
        {
            if (s.IsActiveSkill)
            {
                continue;
            }
            for (int i = 0; i < s.SkillEffect.Count; i++)
            {
                SkillEffect b = s.SkillEffect[i];
                if (b.TypeValue == SkillEffect.EffectType.Hit3Way)
                {
                    return(true);
                }
            }
        }
        return(false);
    }
예제 #23
0
    public override SkillEffect calSkillEffect(int[] checkValue)
    {
        SkillEffect skilleffect = new SkillEffect(this.isDamage,
                                                  this.isHeal,
                                                  this.isDodge,
                                                  this.isShield,
                                                  this.isDisable,
                                                  this.isSelfDisable,
                                                  this.isMPDamage,
                                                  this.isHealMP);

        bool isAllSmallerThanThree = true;

        for (int i = 0; i < checkValue.Length; i++)
        {
            if (checkValue[i] >= 3)
            {
                isAllSmallerThanThree = false;
            }
        }

        if (isAllSmallerThanThree)
        {
            finalCheckValue = 1;
            skilleffect.setSkillActivated(true);
            Debug.Log("下一擊不會中!");
        }


        skilleffect.setDodge(finalCheckValue);
        return(skilleffect);
    }
예제 #24
0
    public override SkillEffect calSkillEffect(int[] checkValue)
    {
        finalCheckValue = 0;
        SkillEffect skilleffect = new SkillEffect(this.isDamage,
                                                  this.isHeal,
                                                  this.isDodge,
                                                  this.isShield,
                                                  this.isDisable,
                                                  this.isSelfDisable,
                                                  this.isMPDamage,
                                                  this.isHealMP);

        for (int i = 0; i < checkValue.Length; i++)
        {
            finalCheckValue += checkValue[i];
        }

        if (finalCheckValue > 8)
        {
            finalCheckValue *= 2;
            skilleffect.setDamage(finalCheckValue);
            skilleffect.setHeal(2);
            skilleffect.setSkillActivated(true);
            Debug.Log("重擊發動成攻! - " + finalCheckValue);
        }
        else
        {
            skilleffect.setDamage(finalCheckValue);
        }

        return(skilleffect);
    }
예제 #25
0
파일: Skill.cs 프로젝트: ntntn/MyRpg
    public void EffectsTick(Character target, List <SkillEffects> skillEffects)
    {
        foreach (var e in skillEffects)
        {
            SkillEffect effect = default;

            switch (e.skillEffectType)
            {
            case SkillEffectType.ChangeHealth:
                effect = e.changeHealth;
                break;

            case SkillEffectType.ChangeHealthOverTime:
                effect = e.changeHealthOverTime;
                break;

            case SkillEffectType.Frozen:
                effect = e.frozen;
                break;

            default:
                break;
            }

            effect.user = this.user;
            effect.Tick(target);

            Debug.Log($"EffectsTick: {effect}");
        }
    }
 public void SetSkillsValues(SkillEffect skillEffect)
 {
     labelCommunicationValue.Text = String.Format("{0} {1}", (int)skillEffect.CommunicationEffectiveness, skillEffect.CommunicationEffectivenessToString());
     labelLeadershipValue.Text    = String.Format("{0} {1}", (int)skillEffect.LeadershipEffectiveness, skillEffect.LeadershipEffectivenessToString());
     labelCreativityValue.Text    = String.Format("{0} {1}", (int)skillEffect.CreativityEffectiveness, skillEffect.CreativityEffectivenessToString());
     labelIntelligenceValue.Text  = String.Format("{0} {1}", (int)skillEffect.IntelligenceEffectiveness, skillEffect.IntelligenceEffectivenessToString());
 }
예제 #27
0
 // enum types
 public static SkillEffect[] Add(SkillEffect n, SkillEffect[] list)
 {
     ArrayList tmp = new ArrayList();
     foreach(SkillEffect str in list) tmp.Add(str);
     tmp.Add(n);
     return tmp.ToArray(typeof(SkillEffect)) as SkillEffect[];
 }
예제 #28
0
    public override SkillEffect calSkillEffect(int[] checkValue)
    {
        SkillEffect skilleffect = new SkillEffect(this.isDamage,
                                                  this.isHeal,
                                                  this.isDodge,
                                                  this.isShield,
                                                  this.isDisable,
                                                  this.isSelfDisable,
                                                  this.isMPDamage,
                                                  this.isHealMP);

        finalCheckValue = 0;
        for (int i = 0; i < checkValue.Length; i++)
        {
            finalCheckValue += checkValue[i];
        }

        if (finalCheckValue > 10)
        {
            Debug.Log("風之守護!");
            skilleffect.setSkillActivated(true);
            finalCheckValue = 1;
        }


        skilleffect.setDodge(finalCheckValue);
        return(skilleffect);
    }
예제 #29
0
        public async Task <ActionResult> UpdateSkillEffect(int skillID, sbyte level, sbyte sequence, SkillEffect skillEffect)
        {
            if (!SkillEffect.Validate(skillEffect))
            {
                return(BadRequest(skillEffect));
            }

            var result = await _context.UpdateSkillEffect(skillID, level, sequence, skillEffect);

            if (result.Conflict)
            {
                return(Conflict($"{skillEffect.SkillID}/{skillEffect.Level}/{skillEffect.Sequence}"));
            }
            if (result.SkillID < 1 ||
                result.Level < 1 ||
                result.Sequence < 1)
            {
                return(NotFound($"{skillEffect.SkillID}/{skillEffect.Level}/{skillEffect.Sequence}"));
            }
            if (skillID != result.SkillID ||
                level != result.Level ||
                sequence != result.Sequence)
            {
                return(Redirect($"skilleffect/{skillEffect.SkillID}/{skillEffect.Level}/{skillEffect.Sequence}"));
            }
            return(NoContent());
        }
예제 #30
0
 protected override void takeAction(SkillEffect effect)
 {
     if (IsHarmfulEffect(effect.Type, effect.ResID) == mHarmful)
     {
         effect.Stop(StopReason);
     }
 }
예제 #31
0
 protected override void takeAction(SkillEffect effect)
 {
     if (effect.Type == SkillEffectType.Buff && effect.ResID == ResID)
     {
         effect.Stop(StopReason);
     }
 }
예제 #32
0
        public static PacketWriter GiveCrossSurgeBuff(Buff buff, MapleCharacter chr, SkillEffect effect)
        {
            BuffedCharacterStats stats    = chr.Stats;
            int          damageIncPercent = effect.Info[CharacterSkillStat.x];
            int          absorbPercent    = effect.Info[CharacterSkillStat.y];
            PacketWriter pw = new PacketWriter();

            pw.WriteHeader(SendHeader.GiveBuff);

            WriteBuffMask(pw, buff.Effect.BuffInfo.Keys);
            double hpPercent = (chr.Hp / (double)stats.MaxHp) * 100;
            short  dmgInc    = (short)(hpPercent * (damageIncPercent / 100.0));

            pw.WriteShort(dmgInc);
            pw.WriteInt(buff.SkillId);
            pw.WriteUInt(buff.Duration);

            pw.WriteInt(0);
            pw.WriteByte(0);
            int absorb = (int)((stats.MaxHp - chr.Hp) * (absorbPercent / 100.0));

            absorb = Math.Min(absorb, 4000);
            pw.WriteInt(absorb);
            pw.WriteInt(0);
            pw.WriteInt(540); //?
            pw.WriteInt(1);
            pw.WriteByte(0);

            return(pw);
        }
예제 #33
0
    public Skill(int id)
    {
        if (CfgManager.GetInstance().Skills.ContainsKey(id) == false)
        {
            Debug.LogErrorFormat("skill cfg not found: {0}", id);
            return;
        }

        CfgSkill cfg = CfgManager.GetInstance().Skills[id];

        this.id    = cfg.id;
        name       = cfg.name;
        desc       = cfg.desc;
        animation  = cfg.animation;
        sound      = cfg.sound;
        hiteffect  = cfg.hiteffect;
        hitpoints  = cfg.hitpoints;
        targettype = cfg.targettype;
        aoe        = cfg.aoe;
        spcost     = cfg.spcost;
        colddown   = cfg.colddown;

        // skill effects
        int count = cfg.skilleffects.Length;

        if (count > 0)
        {
            skilleffects = new SkillEffect[count];
            for (int i = 0; i < count; i++)
            {
                skilleffects[i] = SkillEffect.CreateSkillEffect(cfg.skilleffects[i], this);
            }
        }
    }
예제 #34
0
    public bool ShouldHit(BattleCharacter attacker, BattleCharacter defender, SkillEffect effect)
    {
        var modifiedStat = attacker.GetStatWithModifiers(Const.Stats.Accuracy, effect.StatsModifiers);
        var hitChance = modifiedStat.Value;
        var evaChance = modifiedStat.IsAbsolute ? 0d :defender.GetStat(Const.Stats.Evasion);

        return this.IsRandomCheckSuccess(hitChance - evaChance);
    }
예제 #35
0
 public void ApplyEnmityForSkillEffect(BattleCharacter actor, SkillEffect effect, List<BattleCharacter> affectedCharacters, List<BattleCharacter> allCharacters)
 {
     switch (effect.EnmityType)
     {
         case Const.EnmityTargetType.Target:
             this.ApplyEnmityToCharacters(actor, effect, affectedCharacters);
             break;
         case Const.EnmityTargetType.All:
             var targets = allCharacters.FindAll(x => x.Team != actor.Team);
             this.ApplyEnmityToCharacters(actor, effect, targets);
             break;
     }
 }
예제 #36
0
    public static SkillEffect CrossSlashEffect()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.CrossOpponentTarget();

        var affinities = new SkillEffectAffinities();
        affinities.SetAffinity(Const.Affinities.Physical, 1d);
        skillEffect.Affinities = affinities;

        skillEffect.BaseEnmity = 15;
        skillEffect.EnmityType = Const.EnmityTargetType.Target;

        skillEffect.EffectType = Const.SkillEffectType.Attack;

        skillEffect.AddStatModifier(Const.Stats.Attack, 2d, Const.ModifierType.Multiply);
        return skillEffect;
    }
예제 #37
0
    public static SkillEffect MeleeAttackEffect()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.SingleOpponentTarget();

        var affinities = new SkillEffectAffinities();
        affinities.SetAffinity(Const.Affinities.Physical, 1d);
        skillEffect.Affinities = affinities;

        skillEffect.BaseEnmity = 10;
        skillEffect.EnmityType = Const.EnmityTargetType.Target;

        skillEffect.EffectType = Const.SkillEffectType.Attack;

        skillEffect.AddStatModifier(Const.Stats.Attack, 1d, Const.ModifierType.Multiply);

        skillEffect.AddStatusEffect(StatusEffect.Blind());
        return skillEffect;
    }
예제 #38
0
 public bool ShouldCritical(BattleCharacter attacker, BattleCharacter defender, SkillEffect effect)
 {
     var critChance = attacker.GetStatWithModifiers(Const.Stats.Critical, effect.StatsModifiers);
     return this.IsRandomCheckSuccess(critChance.Value);
 }
예제 #39
0
 public static SkillEffect[] Remove(int index, SkillEffect[] list)
 {
     ArrayList tmp = new ArrayList();
     foreach(SkillEffect str in list) tmp.Add(str);
     tmp.RemoveAt(index);
     return tmp.ToArray(typeof(SkillEffect)) as SkillEffect[];
 }
예제 #40
0
 public EquippedSkillEffect(SkillEffect sE, float multiplier)
 {
     skillEffect = sE;
     skillMultiplier = multiplier;
 }
예제 #41
0
 private void ApplyEnmityToCharacter(BattleCharacter actor, SkillEffect effect, BattleCharacter target)
 {
     // TODO: better enmity calculation logic
     var enmityDelta = effect.BaseEnmity;
     target.Enmity.ChangeEnmityLevel(actor, enmityDelta);
 }
예제 #42
0
 public static int createEffect(ILuaState luaState)
 {
     SkillEffect effect = new SkillEffect();
     InterpreterManager.getInstance().registerEffect(effect);
     InterpreterManager.getInstance().pushEffect(luaState, effect);
     return 1;
 }
예제 #43
0
 public void InitializeAttributesStats(ArmorAttribute[] attributes, SkillEffect[] effects)
 {
     //characterTransform = Player.Instance.avatarObject.transform;
     skillEffects = effects;
     armorAttributes = attributes;
 }
예제 #44
0
    public static SkillEffect SquashEffect()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.SquashTarget();

        var affinities = new SkillEffectAffinities();
        affinities.SetAffinity(Const.Affinities.Physical, 1d);
        skillEffect.Affinities = affinities;

        skillEffect.BaseEnmity = 30;
        skillEffect.EnmityType = Const.EnmityTargetType.Target;

        skillEffect.EffectType = Const.SkillEffectType.Attack;

        skillEffect.AddStatModifier(Const.Stats.Attack, 0.5d, Const.ModifierType.Multiply);
        skillEffect.AddStatusEffect(StatusEffect.Poison());
        return skillEffect;
    }
예제 #45
0
    public static SkillEffect WaitEffect()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.SingleTarget();
        skillEffect.BaseEnmity = 0;
        skillEffect.EnmityType = Const.EnmityTargetType.Target;

        skillEffect.EffectType = Const.SkillEffectType.None;
        skillEffect.AddStatModifier(Const.Stats.Accuracy, 1d, Const.ModifierType.Absolute);

        return skillEffect;

    }
예제 #46
0
    public static SkillEffect MinorHealEffect()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.SingleTarget();

        var affinities = new SkillEffectAffinities();
        affinities.SetAffinity(Const.Affinities.Healing, 1d);
        skillEffect.Affinities = affinities;

        skillEffect.BaseEnmity = 40;
        skillEffect.EnmityType = Const.EnmityTargetType.All;

        skillEffect.EffectType = Const.SkillEffectType.Heal;

        skillEffect.AddStatModifier(Const.Stats.Accuracy, 1d, Const.ModifierType.Absolute);
        skillEffect.AddStatModifier(Const.Stats.Mind, 3d, Const.ModifierType.Multiply);

        skillEffect.AddStatusEffect(StatusEffect.PoisonResistanceUp());
        return skillEffect;
    }
예제 #47
0
    public static SkillEffect ChainLightningSecondary()
    {
        var skillEffect = new SkillEffect();

        skillEffect.EffectTarget = Targeting.ChainLightningSecondary();

        var affinities = new SkillEffectAffinities();
        affinities.SetAffinity(Const.Affinities.Lightning, 1d);
        skillEffect.Affinities = affinities;

        skillEffect.BaseEnmity = 20;
        skillEffect.EnmityType = Const.EnmityTargetType.Target;

        skillEffect.EffectType = Const.SkillEffectType.Attack;

        skillEffect.AddStatModifier(Const.Stats.Accuracy, 1d, Const.ModifierType.Absolute);
        skillEffect.AddStatModifier(Const.Stats.Wisdom, 1d, Const.ModifierType.Multiply);
        return skillEffect;
    }
예제 #48
0
파일: ResMgr.cs 프로젝트: hismile06jf/sgqy8
    public SkillCfg GetSkillCfg(int skillId)
    {
        if(null == skill001)
        {
            skill001 = new SkillCfg();
            skill001.SkillId = 1;
            skill001.AffNum = 1;
            skill001.AffRange = 0;
            skill001.AffDirection = (byte)ESkillDir.Fore;

            SkillEffect eff = new SkillEffect();
            eff.AnimType = EAnimType.Attack_Arrow_Fire;
            eff.EffectBegin = true;
            eff.EffectType = (byte)ESkillEffectType.TrackTarget;
            eff.EffectFile = AssetPath.GetAssetStorePathWithSlash() + "Particle/Arrow001.unity3d";
            eff.EffectTime = 0f;
            eff.EffectSpeed = 50f;
            eff.EffectHardPoint = (byte)EHardPoint.Back;
            eff.EffectFireSrc = (byte)ESkillFireSrc.WeaponLeft;
            eff.EffectFireSrcHardPoint = (byte)EHardPoint.Effect;

            skill001.EffectList = new List<SkillEffect>();
            skill001.EffectList.Add(eff);
            skill001.AnimTime = 1f;
            skill001.AnimList = new List<EAnimType>();
            skill001.AnimList.Add(EAnimType.Attack_Arrow_Begin);
            skill001.AnimList.Add(EAnimType.Attack_Arrow_Hold);
            skill001.AnimList.Add(EAnimType.Attack_Arrow_Fire);
        }

        return skill001;
    }
예제 #49
0
 private Const.Team GetPreferredSkillTargetTeam(SkillEffect skillEffect, Const.Team actorTeam)
 {
     switch (skillEffect.EffectType)
     {
         case Const.SkillEffectType.Attack:
         case Const.SkillEffectType.Debuff:
             return this.GetOpponentTeam(actorTeam);
         case Const.SkillEffectType.Buff:
         case Const.SkillEffectType.Heal:
             return actorTeam;
         case Const.SkillEffectType.None:
             return actorTeam;
         default:
             return this.GetOpponentTeam(actorTeam);
     }
 }
예제 #50
0
 public BattleSkill(string _skillName, SkillEffect[] _skillEffects, SkillElement _skillElement)
 {
     skillName = _skillName;
 }
 public void registerEffect(SkillEffect effect)
 {
     this._luaState.PushLightUserData(effect);
     effect.setRef(this._luaState.L_Ref(LuaDef.LUA_REGISTRYINDEX));
 }