Пример #1
0
    public static void Attack(CRController attacker, CRWeaponItem weapon, float multiplier, CRController defender)
    {
        // can't attack if we have no offence
        if (!attacker.creature.offence)
            return;

        int n = 1;

        float trip = attacker.creature.offence.tripleChance(attacker.creature.level) * 0.01f;
        float dbl = attacker.creature.offence.doubleChance(attacker.creature.level)  * 0.01f;

        float v = Random.Range(0, 1.0f);

        if ( v < trip)
        {
            n = 3;
        }
        else if ( v < trip + dbl)
        {
            n = 2;
        }

        for (int i=0; i<n; i++)
        {
            CRCombatResult result = CRCombatManager.ResolveMelee(attacker.creature.offence, weapon, multiplier, 0, defender.creature.defence);

            result.attacker = attacker;
            result.defender = defender;

            Messenger<CRCombatResult>.Broadcast("CombatResult", result);

            if (result.amount > 0)
            {
                defender.BroadcastMessage("takeDamage", result);

                if (defender.creature.isDead())
                {
                    attacker.SendMessage("gainExperience", defender.creature.level * defender.creature.level * 500);

                    break;
                }
            }

            NPCThreat threat = result.defender.GetComponent<NPCThreat>();

            if (threat)
                threat.addThreat(result.attacker, result.threat);
        }
    }