public System.Collections.IEnumerator OnBoutFixedDamage(MCharacter mCharacter, Model.Master.MSkill skill, List <VCharacterBase> characters) { TileMap mapSearch = Global.mapSearch; Manager.BattleCharactersManager charactersManager = Global.charactersManager; VTile targetTile = mapSearch.GetTile(mCharacter.coordinate); foreach (VCharacter child in characters) { VTile tile = mapSearch.GetTile(child.mCharacter.coordinate); if (mapSearch.GetDistance(targetTile, tile) <= skill.radius) { int hert = skill.strength; if (child.hp - hert <= 0) { hert = child.hp - 1; } Model.Battle.MDamageParam arg = new Model.Battle.MDamageParam(-hert); child.SendMessage(CharacterEvent.OnDamage.ToString(), arg); } } while (charactersManager.HasDynamicCharacter()) { yield return(new UnityEngine.WaitForEndOfFrame()); } }
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); } } } }
public System.Collections.IEnumerator OnBoutStart() { UnityEngine.Debug.LogError("OnBoutStart"); Manager.BattleCharactersManager charactersManager = Global.charactersManager; Belong currentBelong = Global.battleManager.currentBelong; while (true) { MCharacter mCharacter = charactersManager.mCharacters.Find((c) => { return(c.belong == currentBelong && c.hp > 0 && !c.isHide && !c.boutEventComplete); }); if (mCharacter == null) { break; } Model.Master.MSkill skill = mCharacter.boutFixedDamageSkill; if (skill != null) { List <VCharacterBase> characters = charactersManager.vCharacters.FindAll((c) => { return(c.hp > 0 && !c.isHide && !charactersManager.IsSameBelong(c.belong, currentBelong)); }); yield return(OnBoutFixedDamage(mCharacter, skill, characters)); } mCharacter.boutEventComplete = true; } UnityEngine.Debug.LogError("OnBoutStart currentBelong=" + currentBelong); if (currentBelong != Belong.self) { Global.battleManager.aiManager.Execute(currentBelong); } else { Global.battleEvent.DispatchEventOperatingMenu(false); /*if (scriptWaitPaths != null) * { * WaitScript(scriptWaitPaths); * }*/ } }