Beispiel #1
0
        public void CalcTurnResources()
        {
            // Get resources from region list
            ItemArrayList res = new ItemArrayList();

            foreach (Item itm in Resources)
            {
                res.Add(new Item(itm.Type, itm.Amount));
            }

            // Apply temperature factor
            int tempr = this.Temperature;

            for (int i = res.Count - 1; i >= 0; i--)
            {
                Item itm    = res[i];
                int  danger = (itm.Type.TemperatureFrom - tempr) * itm.Type.TemperatureEffect;
                if (danger > 0)
                {
                    int died = itm.Amount * Math.Min(100, danger) / 100;
                    res.RemoveItems(itm.Type, died);
                }
            }

            // Add resources added by production buildings
            foreach (Building b in Buildings)
            {
                if (b.Type.Resource != null && b.IsComplete)
                {
                    res.AddItems(b.Type.Resource.Type, b.Type.Resource.Amount);
                }
            }

            // Apply radiation factor
            int radiation = this.Radiation;

            for (int i = res.Count - 1; i >= 0; i--)
            {
                Item itm    = res[i];
                int  danger = (radiation - itm.Type.RadiationTo) * itm.Type.RadiationEffect;
                if (danger > 0)
                {
                    // Mutate some resource
                    int amt = itm.Amount * Math.Min(100, danger) / 100;
                    res.RemoveItems(itm.Type, amt);
                    int amt_mutated = amt * itm.Type.MutatePercent / 100;
                    if (itm.Type.MutateTo != null && amt_mutated > 0)
                    {
                        res.AddItems(itm.Type.MutateTo, amt_mutated);
                    }
                }
            }

            TurnResources = res;
        }
Beispiel #2
0
 public void AddItems(ItemType it, int amount)
 {
     Items.AddItems(it, amount);
     if (Faction != null)
     {
         Faction.ShowItem(it);
     }
 }
Beispiel #3
0
        public void CalcTurnJunk()
        {
            // Add new junk
            // Get dying resources from region list
            ItemArrayList res = new ItemArrayList();

            foreach (Item itm in Resources)
            {
                if (itm.Type.Dead != null)
                {
                    res.Add(new Item(itm.Type, itm.Amount));
                }
            }

            // Apply temperature factor
            int tempr = this.Temperature;

            for (int i = res.Count - 1; i >= 0; i--)
            {
                Item itm    = res[i];
                int  danger = (itm.Type.TemperatureFrom - tempr) * itm.Type.TemperatureEffect;
                if (danger > 0)
                {
                    int died = itm.Amount * Math.Min(100, danger) / 100;
                    res.RemoveItems(itm.Type, died);
                    Junk.AddItems(itm.Type.Dead, died);
                }
            }

            // Add resources added by production buildings
            foreach (Building b in Buildings)
            {
                if (b.Type.Resource != null && b.Type.Resource.Type.Dead != null &&
                    b.IsComplete)
                {
                    res.AddItems(b.Type.Resource.Type, b.Type.Resource.Amount);
                }
            }

            // Apply radiation factor
            int radiation = this.Radiation;

            for (int i = res.Count - 1; i >= 0; i--)
            {
                Item itm    = res[i];
                int  danger = Math.Max(radiation - itm.Type.RadiationTo,
                                       itm.Type.RadiationFrom - radiation) * itm.Type.RadiationEffect;
                if (danger > 0)
                {
                    int amt         = itm.Amount * Math.Min(100, danger) / 100;
                    int amt_mutated = amt * itm.Type.MutatePercent / 100;
                    int amt_dead    = amt - amt_mutated;
                    if (amt_dead > 0)
                    {
                        Junk.AddItems(itm.Type.Dead, amt_dead);
                    }
                }
            }

            // Decompose junk
            for (int i = Junk.Count - 1; i >= 0; i--)
            {
                Item itm = Junk[i];
                if (itm.Type.DecomposeChance > 0)
                {
                    int decomposed = itm.Amount * itm.Type.DecomposeChance / 100;
                    if (decomposed == 0 && Constants.Random(100) < itm.Type.DecomposeChance * itm.Amount)
                    {
                        decomposed = 1;
                    }
                    Junk.RemoveItems(itm.Type, decomposed);
                }
            }
        }
Beispiel #4
0
        private void MoveSoldier(Soldier s, int round)
        {
            if (s.Weapon == null || s.SkillLevel == 0 || s.Person.Avoiding)
            {
                s.Flee = true;
            }

            if (s.Flee)
            {
                OOASoldier(s);
                s.FleedAway = true;
                BattleReport.Add(String.Format("{0} ran away from combat.|{1} убегает из боя.",
                                               s.Person.ToString(Lang.En), s.Person.ToString(Lang.Ru)));
                return;
            }

            // First turn is for ranged weapon only if shooters on field
            if (round == 1 && ShootersPresent() && !s.Weapon.Ranged)
            {
                return;
            }

            for (int i = 0; i < s.Weapon.Attacks; i++)
            {
                if (OutOfAmmo(s))
                {
                    break;
                }

                for (int j = 0; j < s.Weapon.Targets; j++)
                {
                    MakeHit(s);
                    if (BattleEnded())
                    {
                        break;
                    }
                }

                if (s.Ammo > 0)
                {
                    s.Ammo--;
                }
                if (s.Weapon.Ammo != null)
                {
                    if (s.Weapon.Ammo.Case != null)
                    {
                        Spoils.AddItems(s.Weapon.Ammo.Case, 1);
                    }
                    s.Person.Items.RemoveItems(s.Weapon.Ammo, 1);
                }
                if (OutOfAmmo(s))
                {
                    break;
                }

                if (BattleEnded())
                {
                    break;
                }
            }
        }