示例#1
0
        internal void SetData(BuffInst buffInst)
        {
            BuffTemplate templet = BuffTemplateData.GetData(buffInst.tplId);

            if (templet == null)
            {
                return;
            }
            img.url = ResPath.GetUiImagePath(PackageName.BATTLE, templet.szImg);
            switch (templet.nType)
            {
            case BuffType.ADD_ARMOR_ROUND_END:
            case BuffType.MULTI_ARMOR:
                txtValue.text    = buffInst.effectVal.ToString();
                txtValue.visible = true;
                break;

            case BuffType.MAGIC_SWORD:      //幻剑
                txtValue.text    = buffInst.effectVal.ToString();
                txtValue.visible = true;
                break;

            default:
                txtValue.text    = buffInst.leftBout.ToString();
                txtValue.visible = buffInst.leftBout > 0;
                break;
            }
        }
示例#2
0
    IEnumerator Healing()
    {
        while (curBuff.Contains(eBuffType.HEAL.ToString()))
        {
            BuffTemplateData buffEffect = BuffManager.Instance.Get(curBuff);
            int muchOfHeal = (int)(buffEffect.HEAL * 0.01 * SelfCharacter.CHARACTER_STATUS.GetStatusData(eStatusData.MAX_HP));
            SelfCharacter.IncreaseCurrentHP(muchOfHeal);


            BaseBoard board = BoardManager.Instance.GetBoardData(this, eBoardType.BOARD_HP);
            if (board != null)
            {
                board.SetData(ConstValue.SetData_HP,
                              GetStatusData(eStatusData.MAX_HP),
                              SelfCharacter.CURRENT_HP);
            }

            //// Board 초기화
            board = null;

            yield return(new WaitForSeconds(1f));
        }

        isHealing = false;
    }
示例#3
0
    private void SettleBuffOnBoutStart(ObjectBase targetObj)
    {
        List <BuffInst> lstBuffInst = new List <BuffInst>(targetObj.lstBuffInst);

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }

            if (template.nType == BuffType.GET_BUFF_ROUND_START)
            {
                _battleModel.AddBuff(targetObj, targetObj, (uint)template.iEffectB, buffInst.effectVal);
            }

            if (buffInst.leftBout != -1)
            {
                //Debug.LogError("DecBuffLeftBout" + buffInst.leftBout);
                if (template.nTrigger == BuffTriggerType.BOUT_START)
                {
                    _battleModel.DecBuffLeftBout(targetObj, buffInst, 1);
                }
            }
        }
    }
示例#4
0
    public BuffTemplateData Get(string _key)
    {
        BuffTemplateData tempData = null;

        DicBuff.TryGetValue(_key, out tempData);
        if (tempData == null)
        {
            Debug.Log(_key + " is not containsed key");
        }

        return(tempData);
    }
示例#5
0
 public BuffInst GetBuffInstByType(uint buffType)
 {
     foreach (var buffInst in lstBuffInst)
     {
         BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
         if (template == null)
         {
             continue;
         }
         if (template.nType == buffType)
         {
             return(buffInst);
         }
     }
     return(null);
 }
示例#6
0
 public bool HasBuff(uint buffType)
 {
     foreach (var buffInst in lstBuffInst)
     {
         BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
         if (template == null)
         {
             continue;
         }
         if (template.nType == buffType)
         {
             return(true);
         }
     }
     return(false);
 }
示例#7
0
    private void SettleBuffOnBoutEnd(ObjectBase targetObj)
    {
        List <BuffInst> lstBuffInst = new List <BuffInst>(targetObj.lstBuffInst);

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }
            switch (template.nType)
            {
            case BuffType.ADD_ARMOR_ROUND_END:
            case BuffType.MULTI_ARMOR:
                _battleModel.AddArmor(targetObj, buffInst.effectVal);
                break;

            default:
                //Debug.LogError("unhandle bout end buff:" + template.nType);
                break;
            }
        }

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }

            if (buffInst.selfAddDebuffThisBout)
            {
                buffInst.selfAddDebuffThisBout = false;
                //Debug.LogError("buffId:" + buffInst.tplId + " selfAddDebuffThisBout");
            }
            else if (buffInst.leftBout != -1)
            {
                //Debug.LogError("DecBuffLeftBout" + buffInst.leftBout);
                if (template.nTrigger != BuffTriggerType.BOUT_START)
                {
                    _battleModel.DecBuffLeftBout(targetObj, buffInst, 1);
                }
            }
        }
    }
示例#8
0
    /// <summary>
    /// 获取BUFF提示
    /// </summary>
    /// <param name="buffInst"></param>
    /// <returns></returns>
    internal static TipStruct GetBuffTip(BuffInst buffInst)
    {
        BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);

        if (template == null)
        {
            return(null);
        }
        TipStruct tipStruct = new TipStruct()
        {
            name    = template.szName,
            desc    = template.szDesc,
            iconUrl = ResPath.GetUiImagePath(PackageName.BATTLE, template.szImg)
        };

        return(tipStruct);
    }
示例#9
0
    public void RecoverCost()
    {
        curCost = maxCost;

        foreach (var buffInst in selfData.lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }
            if (template.nType == BuffType.GET_ENERGY_ROUND_START)
            {
                curCost += buffInst.effectVal;
            }
        }

        CostChangeHandle();
    }
示例#10
0
    protected virtual void Update()
    {
        //0625 교준, 현재 버프상태가 무엇인지 체크.
        if (curBuff != eBuffType.NONE.ToString())
        {
            //0702 교준, 힐링버프 추가
            if (curBuff.Contains(eBuffType.HEAL.ToString()) && isHealing == false)              //
            {
                isHealing = true;
                StartCoroutine("Healing");
            }


            BuffTime += Time.deltaTime;
            BuffTemplateData buffEffect = BuffManager.Instance.Get(curBuff);

            if (BuffTime >= buffEffect.TIME)
            {
                BuffTime = 0f;
                curBuff  = eBuffType.NONE.ToString();
            }
        }



        //BaseBoard board = BoardManager.Instance.GetBoardData(this,
        //eBoardType.BOARD_HP);
        //if (board != null)
        //	board.SetData(ConstValue.SetData_HP,
        //		GetStatusData(eStatusData.MAX_HP),
        //		SelfCharacter.CURRENT_HP);

        ////// Board 초기화
        //board = null;

        //건희
        //AI.UpdateAI();
        //if(AI.END)
        //{
        //	Destroy(SelfObject);
        //}
    }
示例#11
0
    public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId)
    {
        BattleModel battleModel = BattleModel.Inst;

        List <BuffInst> lstBuffInst = new List <BuffInst>(battleModel.selfData.lstBuffInst);

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }

            if (template.nType > BuffType.DEBUFF_BEGIN && template.nType < BuffType.DEBUFF_END)
            {
                battleModel.RemoveBuff(battleModel.selfData, buffInst);
            }
        }
    }
示例#12
0
    //结算受击效果
    private void OnObjectHitted(ObjectBase caster, ObjectBase target, int reduceHp, int reduceArmor)
    {
        List <BuffInst> lstBuffInst = new List <BuffInst>(target.lstBuffInst);

        foreach (var buffInst in lstBuffInst)
        {
            BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId);
            if (template == null)
            {
                continue;
            }
            switch (template.nType)
            {
            case BuffType.ARMOR_REFLECT:
                if (0 == reduceArmor)
                {
                    continue;
                }

                int reflectValue = (reduceArmor * buffInst.effectVal) / 100;
                _battleModel.ReduceEnemyHp(caster.instId, reflectValue);
                break;

            case BuffType.MULTI_ARMOR:
                if (reduceHp > 0)
                {
                    //受伤少一层护甲
                    _battleModel.DecBuffEffectVal(target, buffInst, 1);
                }
                break;

            default:
                //Debug.LogError("unhandle on hit buff type:" + template.nType);
                break;
            }
        }
    }
示例#13
0
    /// <summary>
    /// 目标对象获得buff
    /// </summary>
    /// <param name="buffId"></param>
    internal void AddBuff(ObjectBase casterObject, ObjectBase targetObject, uint buffId, int count = 1)
    {
        if (count == 0 || buffId == 0)
        {
            return;
        }

        if (null == targetObject)
        {
            return;
        }

        List <BuffInst> lstBuffInst = targetObject.lstBuffInst;

        BuffTemplate templet = BuffTemplateData.GetData(buffId);

        if (templet == null)
        {
            return;
        }

        foreach (var buffInst in lstBuffInst)
        {
            if (buffInst.tplId != buffId)
            {
                continue;
            }
            if (templet.iBout != -1)
            {
                // 无法抽卡只有1层
                if (templet.nType != BuffType.CAN_NOT_DRAW_CARD)
                {
                    buffInst.leftBout += templet.iBout * count;
                }
            }
            else
            {
                buffInst.effectVal += templet.iEffectA * count;
            }

            if (targetObject.objType == ObjectType.PLAYER)
            {
                SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst);
            }
            else if (targetObject.objType == ObjectType.ENEMY)
            {
                SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst);
            }
            return;
        }

        //加入新BUFF
        int iBout      = -1;
        int iEffectVal = templet.iEffectA;

        if (templet.iBout != -1)
        {
            // 无法抽卡只有1层
            iBout = 1;
            if (templet.nType != BuffType.CAN_NOT_DRAW_CARD)
            {
                iBout = templet.iBout * count;
            }
        }
        else
        {
            iEffectVal = templet.iEffectA * count;
        }
        BuffInst newBuffInst = new BuffInst(targetObject.instId)
        {
            tplId                 = buffId,
            leftBout              = iBout,
            effectVal             = iEffectVal,
            selfAddDebuffThisBout = (BuffInst.IsDebuff(templet.nType) && casterObject == targetObject)
        };

        lstBuffInst.Add(newBuffInst);
        if (targetObject.objType == ObjectType.PLAYER)
        {
            SendEvent(BattleEvent.SELF_BUFF_ADD, newBuffInst);
        }
        else if (targetObject.objType == ObjectType.ENEMY)
        {
            SendEvent(BattleEvent.ENEMY_BUFF_ADD, newBuffInst);
        }
    }
示例#14
0
    //메소드가 사용되어야 하는 상황을 구분짓기 위해 두개를 나눔.
    public override void ThrowEvent(string keyData, params object[] datas)
    {
        if (keyData == ConstValue.EventKey_Hit)
        {
            if (OBJECT_STATE == eBaseObjectState.STATE_DIE)
            {
                return;
            }

            if (IS_SUPERARMOR)
            {
                IS_SUPERARMOR = false;
            }

            // 공격 주체의 케릭터
            GameCharacter casterCharacter
                = datas[0] as GameCharacter;
            SkillTemplate skillTemplate =
                datas[1] as SkillTemplate;

            //0625 교준, 현재의 buff를 받기 위함.
            string curBuff = datas[2] as string;

            //0626 교준, 여기에 공격 방향도 받아야 할듯? -> 피의 방향을 위해
            //Vector3 damagedPos = (Vector3)datas[3];
            Quaternion attackDir = (Quaternion)datas[3];

            if (curBuff != eBuffType.NONE.ToString())
            {
                BuffTemplateData buffEffect = BuffManager.Instance.Get(curBuff);
                casterCharacter.CHARACTER_STATUS.AddStatusData("BUFF", buffEffect.STATUS_DATA);
            }



            casterCharacter.CHARACTER_STATUS.AddStatusData("SKILL",
                                                           skillTemplate.STATUS_DATA);
            //데미지 수치를 랜덤값으로 만들면 더 좋다. 규칙을 정한것이지 구조가 아님. 다른곳에서도 처리 가능함.
            double attackDamage = casterCharacter.CHARACTER_STATUS.GetStatusData(eStatusData.ATTACK) - SelfCharacter.CHARACTER_STATUS.GetStatusData(eStatusData.DEFENCE);

            if (attackDamage < 0)
            {
                attackDamage = 0;
            }

            // SelfCharacter.CHARACTER_STATUS.GetStatusData(eStatusData.DEFFENCE);



            casterCharacter.CHARACTER_STATUS.RemoveStatusData("SKILL");


            if (curBuff != eBuffType.NONE.ToString())
            {
                casterCharacter.CHARACTER_STATUS.RemoveStatusData("BUFF");
            }
            //은기 완전 무적상태 추가
            if (IS_INVUL == false)
            {
                if (IS_SUPERARMOR == false)
                {
                    //은기 6.29 콤보게이지 관련 추가(양 조절)
                    if (GameManager.Instance.PLAYER_ACTOR.GetComponent <Player>().ComboSkillSet.COMBO_GAGE < 1)
                    {
                        GameManager.Instance.PLAYER_ACTOR.GetComponent <Player>().ComboSkillSet.COMBO_GAGE      += 0.3f;
                        GameManager.Instance.PLAYER_ACTOR.GetComponent <Player>().ComboSkillSet.POWER_DOWN_STATE = false;
                    }

                    SelfCharacter.IncreaseCurrentHP(-attackDamage);
                }
                Vector3 damagedPos = gameObject.transform.localPosition;

                if (attackDir != null)
                {
                    BloodManager.Instance.CreateBloodParticle(gameObject, damagedPos, attackDir);
                }
                else
                {
                    BloodManager.Instance.CreateBloodParticle(gameObject, damagedPos);
                }
            }
            //재인이형
            // HPBoard
            BaseBoard board = BoardManager.Instance.GetBoardData(this,
                                                                 eBoardType.BOARD_HP);
            if (board != null)
            {
                board.SetData(ConstValue.SetData_HP,
                              GetStatusData(eStatusData.MAX_HP),
                              SelfCharacter.CURRENT_HP);
            }

            //재인이형
            //// Board 초기화
            board = null;

            //// DamageBoard
            //board = BoardManager.Instance.AddBoard(this, eBoardType.BOARD_DAMAGE);
            //if (board != null)
            //	board.SetData(ConstValue.SetData_Damage, attackDamage);

            //건희
            //// 피격 에니메이션
            //AI.ANIMATOR.SetInteger("Hit", 1);
        }
        else if (keyData == ConstValue.EventKey_SelectSkill)
        {
            int       index = (int)datas[0];
            SkillData data  = SelfCharacter.GetSkillByIndex(index);
            SelfCharacter.SELECT_SKILL = data;
        }
        else if (keyData == ConstValue.ActorData_SetTarget)
        {
            TargetObject = datas[0] as BaseObject;
        }
        else if (keyData == ConstValue.EventKey_SelectState)
        {
            if (this.tag != "Player")
            {
                BaseBoard board = BoardManager.Instance.GetBoardData(this,
                                                                     eBoardType.BOARD_STATUS);
                if (board != null)
                {
                    board.SetData(ConstValue.SetData_Status,
                                  (eStateType)datas[0],
                                  (BaseObject)datas[1]);
                }
            }
        }
        else
        {
            base.ThrowEvent(keyData, datas);
        }
    }