private void OnSkillEvent(object sender, SkillEventArgs e) { // return if did 0 damage if (e.SkillResult.IsHeal == false && e.SkillResult.Damage <= 0) { return; } _combatControl.CombatCheck(); var doesPlayerExistInCurrentCombat = false; foreach (var combatBreakdown in _combatControl.CurrentCombat) { if (combatBreakdown.Source == e.SkillResult.SourcePlayer.Name) { combatBreakdown.ActUponSkillEvent(e.SkillResult, true); doesPlayerExistInCurrentCombat = true; } else if (combatBreakdown.Source == e.SkillResult?.TargetPlayer?.Name) { combatBreakdown.ActUponSkillEvent(e.SkillResult, false); } } if (doesPlayerExistInCurrentCombat == false) { var breakdown = new DelegateBreakdown(); breakdown.ActUponSkillEvent(e.SkillResult, true); _combatControl.CurrentCombat.Add(breakdown); } var damage = _combatControl.CurrentCombat.Sum(breakdown => breakdown.Damage); foreach (var breakdown in _combatControl.CurrentCombat) { breakdown.DamagePercent = Math.Truncate(10 * (double)damage / breakdown.Damage) / 10; } _combatControl.UpdateCombat(); }
private void OnMessageReceived(Message obj) { var message = _messageFactory.Create(obj); _entityTracker.Update(message); var skillResultMessage = message as EachSkillResultServerMessage; if (skillResultMessage?.IsUseless == false) { var skillResult = new SkillResult(skillResultMessage, _entityTracker, _playerTracker, _teraData.SkillDatabase); if (skillResult.Skill != null) { var args = new SkillEventArgs { SkillResult = skillResult }; SkillEvent?.Invoke(this, args); Console.WriteLine($@"Skill: {skillResult.Skill.Name} did {skillResult.Damage} to {skillResult.Target} from {skillResult.Source}"); } } }
public void OnSkillAdded(object source, SkillEventArgs e) { // healthSlotsController.OrganizeInEmptySlot(e.SkillHero); energySlotsController.OrganizeInEmptySlot(e.SkillHero); }