Пример #1
0
    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);
        }
    }