public override void TakeDamage(decimal dmg, out Resource returning, out int attackPoints) { attackPoints = 0; ushort dead = 0; if (dmg >= leftOverHp) { dmg -= leftOverHp; leftOverHp = stats.MaxHp; dead++; } dead += (ushort)(dmg / stats.MaxHp); leftOverHp -= dmg % stats.MaxHp; if (dead > 0) { if (dead > count) { dead = count; } count -= dead; attackPoints = formula.GetUnitKilledAttackPoint(type, lvl, dead); // Remove dead units from troop stub TroopStub.BeginUpdate(); TroopStub[formation].Remove(type, dead); TroopStub.EndUpdate(); } returning = null; }
public override void TakeDamage(decimal dmg, out Resource returning, out int attackPoints) { attackPoints = 0; returning = null; ushort dead = 0; if (dmg >= LeftOverHp) { dmg -= LeftOverHp; LeftOverHp = stats.MaxHp; dead++; } dead += (ushort)(dmg / stats.MaxHp); LeftOverHp -= dmg % stats.MaxHp; if (dead > 0) { if (dead > count) { dead = count; } // Find out how many points the defender should get attackPoints = formula.GetUnitKilledAttackPoint(type, lvl, dead); // Remove troops that died from the count count -= dead; // Remove dead troops from the troop stub TroopStub.BeginUpdate(); TroopStub[formation].Remove(type, dead); TroopStub.EndUpdate(); // Figure out how much loot we have to return to the city int totalCarry = Stats.Carry * Count; returning = new Resource( loot.Crop > totalCarry / Config.battle_loot_resource_crop_ratio ? loot.Crop - totalCarry / Config.battle_loot_resource_crop_ratio : 0, loot.Gold > totalCarry / Config.battle_loot_resource_gold_ratio ? loot.Gold - totalCarry / Config.battle_loot_resource_gold_ratio : 0, loot.Iron > totalCarry / Config.battle_loot_resource_iron_ratio ? loot.Iron - totalCarry / Config.battle_loot_resource_iron_ratio : 0, loot.Wood > totalCarry / Config.battle_loot_resource_wood_ratio ? loot.Wood - totalCarry / Config.battle_loot_resource_wood_ratio : 0, loot.Labor > totalCarry / Config.battle_loot_resource_labor_ratio ? loot.Wood - totalCarry / Config.battle_loot_resource_labor_ratio : 0); // Remove it from our loot loot.Subtract(returning); // Since the loot is stored at the troop stub as well, we need to remove it from there too troopObject.BeginUpdate(); troopObject.Stats.Loot.Subtract(returning); troopObject.EndUpdate(); } }