public void OnDamage(VCharacterBase vCharacter) { Manager.BattleCalculateManager calculateManager = Global.battleManager.calculateManager; Manager.BattleCharactersManager charactersManager = Global.charactersManager; MCharacter mCharacter = vCharacter.mCharacter; MCharacter targetModel = mCharacter.target; VCharacterBase target = charactersManager.GetVCharacter(targetModel); List <VCharacterBase> characters = charactersManager.GetTargetCharacters(vCharacter, target, mCharacter.currentSkill.master); VTile tile = Global.mapSearch.GetTile(mCharacter.coordinate); foreach (VCharacter child in characters) { MCharacter childModel = child.mCharacter; bool hit = calculateManager.AttackHitrate(mCharacter, childModel); if (!hit) { child.SendMessage(CharacterEvent.OnBlock.ToString()); continue; } Model.Battle.MDamageParam arg = new App.Model.Battle.MDamageParam(-calculateManager.Hert(mCharacter, childModel, tile)); child.SendMessage(CharacterEvent.OnDamage.ToString(), arg); if (child.mCharacter.characterId != targetModel.characterId) { continue; } if (mCharacter.currentSkill.master.effect.enemy.time == SkillEffectBegin.enemy_hert) { if (mCharacter.currentSkill.master.effect.special == SkillEffectSpecial.vampire) { Model.Master.MStrategy strategy = Cacher.StrategyCacher.Instance.Get(mCharacter.currentSkill.master.effect.enemy.strategys[0]); int addHp = -UnityEngine.Mathf.FloorToInt(arg.value * strategy.hert * 0.01f); Model.Battle.MDamageParam arg2 = new Model.Battle.MDamageParam(addHp); vCharacter.SendMessage(CharacterEvent.OnHealWithoutAction.ToString(), arg2); } } else if (mCharacter.currentSkill.master.effect.enemy.time == SkillEffectBegin.attack_end) { if (mCharacter.currentSkill.master.effect.special == SkillEffectSpecial.status) { int specialValue = mCharacter.currentSkill.master.effect.special_value; if (specialValue > 0 && UnityEngine.Random.Range(0, 50) > specialValue) { continue; } childModel.attackEndEffects.Add(mCharacter.currentSkill.master.effect.enemy); } } } }