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."; } // Production ItemTypeArrayList products = new ItemTypeArrayList(); 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 ItemTypeArrayList installs = new ItemTypeArrayList(); 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 BuildingTypeArrayList buildings = new BuildingTypeArrayList(); 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) + "."; } // Production ItemTypeArrayList products = new ItemTypeArrayList(); 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 ItemTypeArrayList installs = new ItemTypeArrayList(); 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 BuildingTypeArrayList buildings = new BuildingTypeArrayList(); 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(""); }
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)); BuildingTypeArrayList buildings = new BuildingTypeArrayList(); foreach (BuildingType bt in BuildingType.List) { if (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"; } 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) { 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)); BuildingTypeArrayList buildings = new BuildingTypeArrayList(); 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 += " противотанковое"; } 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) { 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(""); }