internal static int AdjustAttackVal(ObjectBase caster, ObjectBase target, int iVal) { // 如果目标身上有易伤,增加伤害 if (target != null) { BuffInst vulnerableBuff = target.GetBuffInstByType(BuffType.VULNERABLE); if (vulnerableBuff != null) { iVal = (iVal * (100 + vulnerableBuff.effectVal) / 100); } } // 攻击者身上有虚弱BUFF,减少伤害 if (caster != null) { BuffInst weakBuff = caster.GetBuffInstByType(BuffType.WEAK); if (weakBuff != null) { iVal = (iVal * (100 - weakBuff.effectVal) / 100); if (iVal < 0) { iVal = 0; } } } return(iVal); }
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; } }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { BattleModel battleModel = BattleModel.Inst; BuffInst decBuff = battleModel.selfData.GetBuffInst((uint)effectTplt.iEffectValue); if (decBuff != null) { battleModel.DecBuffEffectVal(battleModel.selfData, decBuff, effectTplt.iEffectCount); } }
internal static int AdjustArmorVal(ObjectBase obj, int iVal) { BuffInst frailBuff = obj.GetBuffInstByType(BuffType.FRAIL); if (frailBuff != null) { iVal = iVal * (100 - frailBuff.effectVal) / 100; } return(iVal); }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { BattleModel battleModel = BattleModel.Inst; BuffInst rmBuff = battleModel.selfData.GetBuffInst((uint)effectTplt.iEffectValue); if (rmBuff != null) { battleModel.RemoveBuff(battleModel.selfData, rmBuff); battleModel.AddBuff(battleModel.selfData, battleModel.selfData, (uint)effectTplt.iEffectValue_2, rmBuff.effectVal); } }
/// <summary> /// 移除自身buff /// </summary> /// <param name="buffInst"></param> internal void RemoveBuff(ObjectBase targetObject, BuffInst buffInst) { targetObject.lstBuffInst.Remove(buffInst); if (targetObject.objType == ObjectType.PLAYER) { SendEvent(BattleEvent.SELF_BUFF_REMOVE, buffInst); } else if (targetObject.objType == ObjectType.ENEMY) { SendEvent(BattleEvent.ENEMY_BUFF_REMOVE, buffInst); } }
/// <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); }
/// <summary> /// 减少buff效果值 /// </summary> /// <param name="buffInst"></param> internal void DecBuffEffectVal(ObjectBase targetObject, BuffInst buffInst, int iDec) { if (buffInst.effectVal == 0) { return; } if (buffInst.effectVal <= iDec) { RemoveBuff(targetObject, buffInst); } else { buffInst.effectVal -= iDec; if (targetObject.objType == ObjectType.PLAYER) { SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst); } else if (targetObject.objType == ObjectType.ENEMY) { SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst); } } }
/// <summary> /// 减少buff剩余回合数 /// </summary> /// <param name="buffInst"></param> internal void DecBuffLeftBout(ObjectBase targetObject, BuffInst buffInst, int iDec) { if (buffInst.leftBout == -1) { return; } if (buffInst.leftBout <= iDec) { RemoveBuff(targetObject, buffInst); } else { buffInst.leftBout -= iDec; if (targetObject.objType == ObjectType.PLAYER) { SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst); } else if (targetObject.objType == ObjectType.ENEMY) { SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst); } } }
/// <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); } }
private void OnEnemyBuffRemove(object obj) { BuffInst buffInst = obj as BuffInst; RefreshEnemyBuff(buffInst.ownerInstId); }