Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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();
            }
        }