public static void ResloveCombatAction(CRController source, CRCombatAction action, CRController target) { CRCombatResult result = action.execute(source, target); if (result.threat == Mathf.NegativeInfinity) { target.wipeThreat(); } Messenger<CRCombatResult>.Broadcast("CombatResult", result); NPCThreat threat = result.defender.GetComponent<NPCThreat>(); if (threat) { threat.addThreat(result.attacker, result.threat); } if (result.combatEvent == CRCombatEvent.HIT) { if (result.amount > 0) { result.defender.BroadcastMessage("takeDamage", result); if (result.defender.creature.isDead()) { result.attacker.SendMessage("gainExperience", result.defender.creature.level * result.defender.creature.level * 500); } } } else if (result.combatEvent == CRCombatEvent.HEAL) { target.passThreat(source, result.threat); } }