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); } }