private int SetRecoveryAndGetOverRecovery(int _value, UnitCtrl _source, BasePartsData _target, bool _isMagic) { eInhibitHealType eInhibit = _isMagic ? eInhibitHealType.MAGIC : eInhibitHealType.PHYSICS; SetRecovery(_value, eInhibit, _source, true, false, false, false, true, _target); return((int)(Hp + _value - BaseValues.Hp)); }
public void SetRecovery(int _value, eInhibitHealType _inhibitHealType, UnitCtrl _source, bool _isEffect = true, bool _isRevival = false, bool _isUnionBurstLifeSteal = false, bool _isRegenerate = false, bool _useNumberEffect = true, BasePartsData _target = null) { if (_target == null) { _target = GetFirstParts(true, 0); } if ((isDead || Hp <= 0) && !_isRevival) { Debug.LogError("治疗无效,目标已经死了!"); } else { if (_inhibitHealType != eInhibitHealType.NO_EFFECT && IsAbnormalState(eAbnormalState.INHIBIT_HEAL)) { if (GetAbnormalStateMainValue(eAbnormalStateCategory.INHIBIT_HEAL) != 0) { DamageData damageData_0 = new DamageData(); damageData_0.Target = GetFirstParts(this != null, 0); damageData_0.Damage = Mathf.FloorToInt(GetAbnormalStateMainValue(eAbnormalStateCategory.INHIBIT_HEAL) * _value); damageData_0.DamageType = eDamageType.NONE; AbnormalStateCategoryData abdata = abnormalStateCategoryDataDictionary[eAbnormalStateCategory.INHIBIT_HEAL]; damageData_0.Source = abdata.Source; damageData_0.DamageNumMagic = _inhibitHealType == eInhibitHealType.MAGIC; damageData_0.ActionType = eActionType.INHIBIT_HEAL; SetDamage(damageData_0, false, abdata.ActionId, null, true, abdata.Skill, true, null, false, 1, 1, null); } } else { Hp += _value; //AppendbattleLog; if (Hp > BaseValues.Hp) { Hp = BaseValues.Hp; } unitUI.SetHP(Hp / BaseValues.Hp); string msg = UnitName + "恢复<color=#00FF00>" + _value + "</color>生命"; BattleUIManager.Instance.LogMessage(msg, eLogMessageType.HP_RECOVERY, IsOther); if (_isUnionBurstLifeSteal) { unionburstLifeStealNum += _value; } else { if (_useNumberEffect) { //特效数字 } if (_isEffect) { //治疗特效 } } } } }
internal int SetDamage(DamageData damageData, bool byAttack, int actionId, ActionParameter.OnDamageHitDelegate onDamageHit, bool hasEffect, Skill skill, bool energyAdd, Action onDefeat, bool noMotion, float weight, float actionWeightSum, Func <int, float, int> p) { int randomInt = staticBattleManager.Random(); bool critical = false; if (randomInt <= damageData.CriticalRate && damageData.CriticalRate != 0) { critical = true; } if (damageData.ActionType == eActionType.ATTACK) { eDamageType damageType = damageData.DamageType; if ((damageType == eDamageType.ATK && IsAbnormalState(eAbnormalState.LOG_ATK_BARRIR)) || (damageType == eDamageType.MGC && IsAbnormalState(eAbnormalState.LOG_MGC_BARRIR)) || IsAbnormalState(eAbnormalState.LOG_ALL_BARRIR)) { critical = damageData.IsLogBarrierCritical; } } int damage = SetDamageImpl(damageData, byAttack, onDamageHit, hasEffect, skill, energyAdd, critical, onDefeat, noMotion, p); //boss相关代码鸽了 if (damageData.Source != null) { if (damageData.ActionType != eActionType.DESTROY) { if (damageData.ActionType != eActionType.ATTACK_FIELD && (skill == null || skill.IsLifeStealEnabled)) { int lifesteal = damageData.LifeSteal; if (skill != null) { lifesteal += skill.LifeSteal; } if (lifesteal >= 1) { float recovery_value = lifesteal * damage / (lifesteal + UnitData.level + 100); if (recovery_value > 0) { eInhibitHealType eh = damageData.DamageType == eDamageType.MGC ? eInhibitHealType.MAGIC : eInhibitHealType.PHYSICS; SetRecovery((int)recovery_value, eh, damageData.Source, false, false, false,//鸽了 false, true, null); } } } } if (IsOther ^ damageData.Source.IsOther) { UnitCtrl source = damageData.Source; if (damageData.Source.SummonType != eSummonType.NONE) { source = source.SummonSource; } //伤害统计 if (source != null) { //source.UnitDamageinfo.Setdamage(damage + 原伤害) } } } accumulateDamage += damage; //log if (skill != null) { if (damageData.Source != null) { if (skill.SkillId == damageData.Source.UBSkillId) { if (byAttack) { damageData.Target.PassiveUbIsMagic = damageData.DamageType == eDamageType.MGC; } damageData.Target.TotalDamage += damage; } } if (damage >= 1) { if (!skill.DamageedPartsList.Contains(damageData.Target)) { skill.DamageedPartsList.Add(damageData.Target); } } } if (damageData.Source != null) { if (damage >= 1 && DamageSealDataDictionary.ContainsKey(damageData.Source)) { Dictionary <int, AttackSealData> dic = DamageSealDataDictionary[damageData.Source]; foreach (AttackSealData sealData in dic.Values) { if (!sealData.OnlyCritical || critical) { sealData.AddSeal(this); } } } if (damage >= 1 && damageData.Source.DamageOnceOwnerSealDateDictionary.ContainsKey(damageData.Source) && skill != null) { if (!skill.AlreadyAddAttackSelfSeal) { Dictionary <int, AttackSealData> dic2 = DamageOnceOwnerSealDateDictionary[damageData.Source]; foreach (AttackSealData sealData in dic2.Values) { sealData.AddSeal(damageData.Source); } skill.AlreadyAddAttackSelfSeal = true; } } } if (damageData.Source == null || damage < 1 || !damageData.Source.DamageOwnerSealDataDictionary.ContainsKey(damageData.Source)) { if (skill == null) { return(damage); } skill.TotalDamage += damage; return(damage); } foreach (AttackSealData sealData1 in damageData.Source.DamageOwnerSealDataDictionary[damageData.Source].Values) { if (sealData1.OnlyCritical) { if (critical) { sealData1.AddSeal(damageData.Source); } } else { sealData1.AddSeal(damageData.Source); } } if (skill != null) { skill.TotalDamage += damage; } return(damage); }