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; } }
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; }
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); } } } }
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); }
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); }
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); }
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); } } } }
/// <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); }
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(); }
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); //} }
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); } } }
//结算受击效果 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; } } }
/// <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); } }
//메소드가 사용되어야 하는 상황을 구분짓기 위해 두개를 나눔. 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); } }