public bool HasPerk(SkillPerk perk) { foreach (KeyValuePair <string, bool> item in MasteryBySkillID) { if (item.Value && Db.Get().Skills.Get(item.Key).GivesPerk(perk)) { return(true); } } return(false); }
private static void InitDb() { var db = Db.Get(); // тюнингуем и актифируем комнату // подхватывать максимальный размер комнаты из тюнинга int maxRoomSize = TuningData <RoomProber.Tuning> .Get().maxRoomSize; RoomConstraints.Constraint MAXIMUM_SIZE_MAX = new RoomConstraints.Constraint( building_criteria: null, room_criteria: (Room room) => room.cavity.numCells <= maxRoomSize, times_required: 1, name: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.NAME, maxRoomSize), description: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.DESCRIPTION, maxRoomSize), stomp_in_conflict: null); var additional_constraints = db.RoomTypes.MachineShop.additional_constraints; for (int i = 0; i < additional_constraints.Length; i++) { if (additional_constraints[i] == RoomConstraints.MAXIMUM_SIZE_96) { additional_constraints[i] = MAXIMUM_SIZE_MAX; break; } } db.RoomTypes.Add(db.RoomTypes.MachineShop); // добавляем перк для работы на станции CanMachineTinker = db.SkillPerks.Add(new SimpleSkillPerk(REQUIRED_ROLE_PERK, STRINGS.PERK_CAN_MACHINE_TINKER.DESCRIPTION)); db.Skills.Technicals1.perks.Add(CanMachineTinker); // добавляем модификаторы и эффекты string text = DUPLICANTS.MODIFIERS.MACHINETINKER.NAME; string description = STRINGS.DUPLICANTS.MODIFIERS.MACHINETINKER.TOOLTIP; CraftingSpeed = db.Attributes.Add(new Attribute(CRAFTING_SPEED_MODIFIER_NAME, false, Attribute.Display.General, false, BASE_SPEED_VALUE)); CraftingSpeed.SetFormatter(new PercentAttributeFormatter()); MachinerySpeedModifier = new AttributeModifier(MACHINERY_SPEED_MODIFIER_NAME, MACHINERY_SPEED_MODIFIER, text); CraftingSpeedModifier = new AttributeModifier(CRAFTING_SPEED_MODIFIER_NAME, CRAFTING_SPEED_MODIFIER, text); MachineTinkerEffect = db.effects.Add(new Effect(MACHINE_TINKER_EFFECT_NAME, text, description, MACHINE_TINKER_EFFECT_DURATION * Constants.SECONDS_PER_CYCLE, true, true, false)); MachineTinkerEffect.Add(MachinerySpeedModifier); MachineTinkerEffect.Add(CraftingSpeedModifier); }
internal static void Init() { var db = Db.Get(); // тюнингуем и актифируем комнату // подхватывать максимальный размер комнаты из тюнинга int maxRoomSize = TuningData <RoomProber.Tuning> .Get().maxRoomSize; var MAXIMUM_SIZE_MAX = new RoomConstraints.Constraint( building_criteria: null, room_criteria: (Room room) => room.cavity.numCells <= maxRoomSize, times_required: 1, name: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.NAME, maxRoomSize), description: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.DESCRIPTION, maxRoomSize), stomp_in_conflict: null); var additional_constraints = db.RoomTypes.MachineShop.additional_constraints; for (int i = 0; i < additional_constraints.Length; i++) { if (additional_constraints[i] == RoomConstraints.MAXIMUM_SIZE_96) { additional_constraints[i] = MAXIMUM_SIZE_MAX; break; } } db.RoomTypes.Add(db.RoomTypes.MachineShop); // детектим "Rooms Expanded". модифицируем "мастерскую" чтобы она могла быть обгрейднутна до "кухни" var RoomsExpanded = PPatchTools.GetTypeSafe("RoomsExpanded.RoomTypes_AllModded", "RoomsExpandedMerged"); if (RoomsExpanded != null) { PUtil.LogDebug("RoomsExpanded found. Attempt to add compatibility."); try { KitchenRoom = (RoomType)RoomsExpanded.GetPropertySafe <RoomType>("KitchenRoom", true)?.GetValue(null, null); if (KitchenRoom != null) { var upgrade_paths = db.RoomTypes.MachineShop.upgrade_paths.AddToArray(KitchenRoom); Traverse.Create(db.RoomTypes.MachineShop).Property(nameof(RoomType.upgrade_paths)).SetValue(upgrade_paths); Traverse.Create(db.RoomTypes.MachineShop).Property(nameof(RoomType.priority)).SetValue(KitchenRoom.priority); KitchenBuildingTag = "KitchenBuildingTag".ToTag(); RoomsExpandedFound = true; } } catch (System.Exception e) { PUtil.LogExcWarn(e); } } // добавляем перк для работы на станции CanMachineTinker = db.SkillPerks.Add(new SimpleSkillPerk( id: REQUIRED_ROLE_PERK, description: STRINGS.PERK_CAN_MACHINE_TINKER.DESCRIPTION)); db.Skills.Technicals1.perks.Add(CanMachineTinker); // добавляем модификаторы и эффекты string text = DUPLICANTS.MODIFIERS.MACHINETINKER.NAME; string description = STRINGS.DUPLICANTS.MODIFIERS.MACHINETINKER.TOOLTIP; CraftingSpeed = db.Attributes.Add(new Attribute( id: CRAFTING_SPEED_MODIFIER_NAME, is_trainable: false, show_in_ui: Attribute.Display.General, is_profession: false, base_value: BASE_SPEED_VALUE)); CraftingSpeed.SetFormatter(new PercentAttributeFormatter()); MachinerySpeedModifier = new AttributeModifier( attribute_id: MACHINERY_SPEED_MODIFIER_NAME, value: MACHINERY_SPEED_MODIFIER, description: text, is_readonly: false); CraftingSpeedModifier = new AttributeModifier( attribute_id: CRAFTING_SPEED_MODIFIER_NAME, value: CRAFTING_SPEED_MODIFIER, description: text, is_readonly: false); MachineTinkerEffect = db.effects.Add(new Effect( id: MACHINE_TINKER_EFFECT_NAME, name: text, description: description, duration: MACHINE_TINKER_EFFECT_DURATION * Constants.SECONDS_PER_CYCLE, show_in_ui: true, trigger_floating_text: true, is_bad: false)); MachineTinkerEffect.Add(MachinerySpeedModifier); MachineTinkerEffect.Add(CraftingSpeedModifier); MachineTinkerEffectDuration = db.AttributeConverters.Create( id: "MachineTinkerEffectDuration", name: "Engie's Jerry Rig Effect Duration", description: STRINGS.DUPLICANTS.ATTRIBUTES.MACHINERY.MACHINE_TINKER_EFFECT_MODIFIER, attribute: db.Attributes.Machinery, multiplier: MACHINE_TINKER_EFFECT_DURATION_PER_SKILL, base_value: 0, formatter: new ToPercentAttributeFormatter(1f, GameUtil.TimeSlice.None), available_dlcs: DlcManager.AVAILABLE_ALL_VERSIONS); }