Пример #1
0
        public static void WriteSkillReport(SkillType st)
        {
            string s = st.ToString(lng) + " :";

            if (lng == Lang.En)
            {
                if (st.DescriptionEn != "")
                {
                    s += " " + st.DescriptionEn;
                }

                if (st.BasedOn != null)
                {
                    s += " This skill requires " + st.BasedOn.FullNameEn +
                         " [" + st.BasedOn.Name + "] to study.";
                }

                if (st.Special)
                {
                    s += " This is a special skill,";
                    if (st.BasedOn == null)
                    {
                        s += " it can't be learned by other persons.";
                    }
                    else
                    {
                        s += " a person can learn it only from team leader.";
                    }
                }

                // Production
                ItemTypeList products = new ItemTypeList();
                foreach (ItemType it in ItemType.List)
                {
                    if (it.ProduceSkill != null && it.ProduceSkill.Type == st)
                    {
                        products.Add(it);
                    }
                }
                if (products.Count > 0)
                {
                    s += " A person with this skill may PRODUCE " +
                         products.ToString(lng);
                }

                // Installation
                ItemTypeList installs = new ItemTypeList();
                foreach (ItemType it in ItemType.List)
                {
                    if (it.InstallSkill != null && it.InstallSkill.Type == st)
                    {
                        installs.Add(it);
                    }
                }
                if (installs.Count > 0)
                {
                    s += " A person with this skill can INSTALL and UNINSTALL " +
                         installs.ToString(lng);
                }

                // Building
                BuildingTypeList buildings = new BuildingTypeList();
                foreach (ItemType it in installs)
                {
                    foreach (BuildingType bt in BuildingType.List)
                    {
                        if (!bt.NoBuild && bt.Materials.Count > 0 && bt.Materials[0].Type == it)
                        {
                            buildings.Add(bt);
                        }
                    }
                }
                if (buildings.Count > 0)
                {
                    s += " It allows to BUILD: " + buildings.ToString(lng);
                }

                // Driving
                buildings.Clear();
                foreach (BuildingType bt in BuildingType.List)
                {
                    if (bt.DriveSkill != null && bt.DriveSkill.Type == st)
                    {
                        buildings.Add(bt);
                    }
                }
                if (buildings.Count > 0)
                {
                    s += " A person with this skill can DRIVE " + buildings.ToString(Lang.En);
                }
            }
            else
            {
                if (st.DescriptionRu != "")
                {
                    s += " " + st.DescriptionRu;
                }

                if (st.BasedOn != null)
                {
                    s += " Для изучения необходим навык " +
                         st.BasedOn.ToString(lng) + ".";
                }

                if (st.Special)
                {
                    s += " Это специальный навык,";
                    if (st.BasedOn == null)
                    {
                        s += " другие персонажи не могут получить его.";
                    }
                    else
                    {
                        s += " который можно получить только под руководством бригадира.";
                    }
                }

                // Production
                ItemTypeList products = new ItemTypeList();
                foreach (ItemType it in ItemType.List)
                {
                    if (it.ProduceSkill != null && it.ProduceSkill.Type == st)
                    {
                        products.Add(it);
                    }
                }
                if (products.Count > 0)
                {
                    s += " Навык позволяет производить предметы: " +
                         products.ToString(lng);
                }

                // Installation
                ItemTypeList installs = new ItemTypeList();
                foreach (ItemType it in ItemType.List)
                {
                    if (it.InstallSkill != null && it.InstallSkill.Type == st)
                    {
                        installs.Add(it);
                    }
                }
                if (installs.Count > 0)
                {
                    s += " Навык позволяет монтировать и демонтировать предметы: " +
                         installs.ToString(lng);
                }

                // Building
                BuildingTypeList buildings = new BuildingTypeList();
                foreach (ItemType it in installs)
                {
                    foreach (BuildingType bt in BuildingType.List)
                    {
                        if (!bt.NoBuild && bt.Materials.Count > 0 && bt.Materials[0].Type == it)
                        {
                            buildings.Add(bt);
                        }
                    }
                }
                if (buildings.Count > 0)
                {
                    s += " С его помощью могут быть построены: " + buildings.ToString(lng);
                }

                // Driving
                buildings.Clear();
                foreach (BuildingType bt in BuildingType.List)
                {
                    if (bt.DriveSkill != null && bt.DriveSkill.Type == st)
                    {
                        buildings.Add(bt);
                    }
                }
                if (buildings.Count > 0)
                {
                    s += " Навык позволяет водить машины: " +
                         buildings.ToString(lng);
                }
            }

            Write(s);
            Write("");
        }
Пример #2
0
        public static void WriteItemReport(ItemType it)
        {
            string s = it.ToString(1, lng) + " : ";

            if (lng == Lang.En)
            {
                s += "weight " + it.Weight.ToString() + " kg";
                if (it.Capacity[(int)Movement.Walk] > it.Weight)
                {
                    s += ", walking capacity " +
                         (it.Capacity[(int)Movement.Walk] - it.Weight).ToString() + " kg";
                }

                s += ".";

                if (it.Rations > 0)
                {
                    s += " This item counts as " + RationString(it.Rations, lng) + ".";
                }

                if (it.ProduceSkill != null)
                {
                    s += String.Format(" Persons with {0} can PRODUCE this item",
                                       it.ProduceSkill.ToString(Lang.En));
                    if (it.ProduceFrom1 != null)
                    {
                        s += " from " + it.ProduceFrom1.ToString(Lang.En);
                        if (it.ProduceFrom2 != null)
                        {
                            s += " and " + it.ProduceFrom2.ToString(Lang.En);
                        }
                    }
                    if (it.ProduceBuilding != null)
                    {
                        s += " inside a " + it.ProduceBuilding.Name;
                    }
                    s += String.Format(" at a rate of {0} per turn.",
                                       it.ProductionRate);
                }

                if (it.ProduceAs != null)
                {
                    s += " This item produced as " + it.ProduceAs.ToString(1, Lang.En) + ".";
                }

                if (it.InstallSkill != null)
                {
                    s += String.Format(" Persons with {0} can INSTALL this item",
                                       it.InstallSkill.ToString(Lang.En));

                    BuildingTypeList buildings = new BuildingTypeList();
                    foreach (BuildingType bt in BuildingType.List)
                    {
                        if (!bt.NoBuild && bt.Materials.Count > 0 && bt.Materials[0].Type == it)
                        {
                            buildings.Add(bt);
                        }
                    }
                    if (buildings.Count > 0)
                    {
                        s += ", or use it to BUILD " + buildings.ToString(lng);
                    }
                    else
                    {
                        s += ".";
                    }
                }

                if (it.OwnerRadiation != 0)
                {
                    s += String.Format(" This item {0} radiation by {1} for its owner.",
                                       it.OwnerRadiation > 0 ? "raises":"lowers", Math.Abs(it.OwnerRadiation));
                }

                if (it.RegionRadiation != 0)
                {
                    s += String.Format(" This item {0} radiation in region by {1}.",
                                       it.RegionRadiation > 0 ? "raises":"lowers", Math.Abs(it.RegionRadiation));
                }

                if (it.OwnerTemperature != 0)
                {
                    s += String.Format(" This item protects its owner from {0}° cold.",
                                       it.OwnerTemperature);
                }

                if (it.IsMan)
                {
                    if (it.RadiationFrom > 0 || (it.RadiationTo > 0 && it.RadiationTo != 1000))
                    {
                        s += String.Format(" Acceptable radiation is between " +
                                           "{0} and {1}.", it.RadiationFrom, it.RadiationTo);
                    }

                    if (it.Food.Count > 0)
                    {
                        s += String.Format(" A person of this type can eat " +
                                           it.Food.ToString(Lang.En));
                    }

                    if (it.NoLearn)
                    {
                        s += String.Format(" Persons of this type can't learn.");
                    }
                }

                if (it.Burn)
                {
                    s += " This item may be burned.";
                }

                if (it.IsWeapon)
                {
                    s += " This is a";
                    if (it.Ranged)
                    {
                        s += " ranged";
                    }
                    else
                    {
                        s += " melee";
                    }
                    if (it.Heavy)
                    {
                        s += " heavy";
                    }
                    if (it.AntiTank)
                    {
                        s += " anti-tank";
                    }
                    if (it.Explosive)
                    {
                        s += " explosive";
                    }
                    if (it.Ammo == it)
                    {
                        s += " thrown";
                    }
                    s += " weapon.";
                    if (it.Attacks > 1)
                    {
                        s += " It has " + it.Attacks.ToString() + " attacks.";
                    }
                    if (it.Targets > 1)
                    {
                        s += " It hits " + it.Targets.ToString() + " targets with single attack.";
                    }
                    if (it.HitModifier != 0)
                    {
                        s += " Hit modifier: " + (it.HitModifier > 0?"+":"") + it.HitModifier.ToString() + "%.";
                    }
                    if (it.ArmorModifier != 0)
                    {
                        s += " Armor modifier: " + (it.ArmorModifier > 0?"+":"") + it.ArmorModifier.ToString() + "%.";
                    }
                    s += " Wound chance: " + it.ToWound.ToString() + "%.";
                    if (it.HP > 0)
                    {
                        s += " " + it.HP.ToString() + " object's HP inflicted by each hit.";
                    }
                    if (!it.AntiTank)
                    {
                        s += " Target has " + it.Lethality.ToString() + "% chance to die from direct hit.";
                    }
                    if (it.Ammo != null && it.Ammo != it)
                    {
                        s += " Ammo required: " + it.Ammo.ToString(1, Lang.En) + ".";
                    }
                    if (it.WeaponSkill != null)
                    {
                        s += " Skill required: " + it.WeaponSkill.ToString(Lang.En) + ".";
                    }
                }

                if (it.IsArmor)
                {
                    s += String.Format(" This armor provides {0}% armor save in combat.",
                                       it.ArmorSave);
                }
            }
            else
            {
                s += "вес " + it.Weight.ToString() + " кг";
                if (it.Capacity[(int)Movement.Walk] > it.Weight)
                {
                    s += ", может нести " +
                         (it.Capacity[(int)Movement.Walk] - it.Weight).ToString() + " кг";
                }

                s += ".";

                if (it.Rations > 0)
                {
                    s += " Питательная ценность " + RationString(it.Rations, lng) + ".";
                }

                if (it.ProduceSkill != null)
                {
                    s += String.Format(" Персонаж с навыком {0} может производить " +
                                       "этот предмет",
                                       it.ProduceSkill.ToString(Lang.Ru));
                    s += String.Format(" в количестве {0} за ход.",
                                       it.ProductionRate);
                    if (it.ProduceFrom1 != null)
                    {
                        s += " Необходимые материалы: " + it.ProduceFrom1.ToString(Lang.Ru);
                        if (it.ProduceFrom2 != null)
                        {
                            s += " и " + it.ProduceFrom2.ToString(Lang.Ru);
                        }
                        s += ".";
                    }
                    if (it.ProduceBuilding != null)
                    {
                        s += " Производство возможно внутри объекта: " + it.ProduceBuilding.Name;
                    }
                }

                if (it.ProduceAs != null)
                {
                    s += " Предмет производится как " + it.ProduceAs.ToString(1, Lang.Ru) + ".";
                }

                if (it.InstallSkill != null)
                {
                    s += String.Format(" Персонаж с навыком {0} может монтировать и демонтировать " +
                                       "этот предмет",
                                       it.InstallSkill.ToString(Lang.Ru));

                    BuildingTypeList buildings = new BuildingTypeList();
                    foreach (BuildingType bt in BuildingType.List)
                    {
                        if (!bt.NoBuild && bt.Materials.Count > 0 && bt.Materials[0].Type == it)
                        {
                            buildings.Add(bt);
                        }
                    }
                    if (buildings.Count > 0)
                    {
                        s += ", или использовать его для постройки объектов: " + buildings.ToString(lng);
                    }
                    else
                    {
                        s += ".";
                    }
                }

                if (it.OwnerRadiation != 0)
                {
                    s += String.Format(" Этот предмет {0} радиацию на {1} единиц для своего владельца.",
                                       it.OwnerRadiation > 0 ? "повышает":"понижает", Math.Abs(it.OwnerRadiation));
                }

                if (it.RegionRadiation != 0)
                {
                    s += String.Format(" Этот предмет {0} радиацию региона на {1} единиц.",
                                       it.RegionRadiation > 0 ? "повышает":"понижает", Math.Abs(it.RegionRadiation));
                }

                if (it.OwnerTemperature != 0)
                {
                    s += String.Format(" Предмет защищает владельца от {0}° холода.",
                                       it.OwnerTemperature);
                }

                if (it.IsMan)
                {
                    if (it.RadiationFrom > 0 || (it.RadiationTo > 0 && it.RadiationTo != 1000))
                    {
                        s += String.Format(" Приемлемое значение радиации - в промежутке от " +
                                           "{0} до {1} единиц.", it.RadiationFrom, it.RadiationTo);
                    }

                    if (it.Food.Count > 0)
                    {
                        s += String.Format(" Персонажи этого типа могут есть следующие предметы: " +
                                           it.Food.ToString(lng));
                    }

                    if (it.NoLearn)
                    {
                        s += String.Format(" Персонажи этого типа не могут учиться.");
                    }
                }

                if (it.Burn)
                {
                    s += " Этот предмет можно сжечь.";
                }

                if (it.IsWeapon)
                {
                    s += " Это";
                    if (it.Ranged)
                    {
                        s += " стрелковое";
                    }
                    if (it.Heavy)
                    {
                        s += " тяжёлое";
                    }
                    if (it.AntiTank)
                    {
                        s += " противотанковое";
                    }
                    if (it.Ammo == it)
                    {
                        s += " метательное";
                    }
                    s += " оружие";
                    if (!it.Ranged)
                    {
                        s += " ближнего боя";
                    }
                    if (it.Explosive)
                    {
                        s += " взрывного действия";
                    }
                    s += ".";
                    if (it.Attacks > 1)
                    {
                        s += " Количество атак: " + it.Attacks.ToString() + ".";
                    }
                    if (it.Targets > 1)
                    {
                        s += " Оно наносит повреждения " + it.Targets.ToString() + " целям за одну атаку.";
                    }
                    if (it.HitModifier != 0)
                    {
                        s += " Модификатор попадания: " + (it.HitModifier > 0?"+":"") + it.HitModifier.ToString() + "%.";
                    }
                    if (it.ArmorModifier != 0)
                    {
                        s += " Модификатор брони: " + (it.ArmorModifier > 0?"+":"") + it.ArmorModifier.ToString() + "%.";
                    }
                    s += " Вероятность нанести ранение: " + it.ToWound.ToString() + "%.";
                    if (it.HP > 0)
                    {
                        s += " " + it.HP.ToString() + " HP выбивается из объекта каждым попаданием.";
                    }
                    if (!it.AntiTank)
                    {
                        s += " Жертва имеет " + it.Lethality.ToString() + "% шанс умереть после прямого попадания.";
                    }
                    if (it.Ammo != null && it.Ammo != it)
                    {
                        s += " Тип зарядов: " + it.Ammo.ToString(1, Lang.Ru) + ".";
                    }
                    if (it.WeaponSkill != null)
                    {
                        s += " Требуемый навык: " + it.WeaponSkill.ToString(Lang.Ru) + ".";
                    }
                }

                if (it.IsArmor)
                {
                    s += String.Format(" Это броня, которая предоставляет {0}% защиту в бою.",
                                       it.ArmorSave);
                }
            }

            Write(s);
            Write("");
        }