protected override void DisabledCheck() { base.DisabledCheck(); if (ability.CooldownTicksRemaining > 0) { disabledReason = "AbilityPrayerServiceCooldown".Translate() + ": " + ability.CooldownTicksRemaining.ToStringTicksToPeriod(); disabled = true; } LordJob_PrayerService lordJob_PrayerService = ability.pawn.GetLord()?.LordJob as LordJob_PrayerService; if (lordJob_PrayerService != null) { disabledReason = "AbilityPrayerServiceDisabledAlreadyGivingPrayerService".Translate(); disabled = true; } if (ability.pawn.Drafted) { disabledReason = "AbilityPrayerServiceDisabledDrafted".Translate(); disabled = true; } var pulpits = ability.pawn.Map.listerBuildings.AllBuildingsColonistOfDef(RatkinBuildingDefOf.RK_Pulpit).Where(x => IsPrayerServiceAvailableSpot(ability.pawn, x)); if (pulpits.Count() == 0) { disabledReason = "AbilityPrayerServiceDisabledNoPulpit".Translate(); disabled = true; } }
public override void ProcessInput(Event ev) { var organizer = ability.pawn; if (organizer.Drafted) { return; } LordJob_PrayerService lordJob_PrayerService = ability.pawn.GetLord()?.LordJob as LordJob_PrayerService; if (lordJob_PrayerService != null) { return; } if (ability.CooldownTicksRemaining > 0) { return; } if (!TryFindGatherSpot(organizer, out var pulpit, out var spot)) { return; } int cooldownTicks = ability.def.cooldownTicksRange.RandomInRange; ability.StartCooldown(cooldownTicks); // gives global cooldown foreach (var pawn in PawnsFinder.AllMaps_FreeColonistsAndPrisoners) { pawn.abilities?.GetAbility(RatkinAbilityDefOf.RK_PrayerService)?.StartCooldown(cooldownTicks); } LordJob lordJob = new LordJob_PrayerService(pulpit, spot, organizer); LordMaker.MakeNewLord(organizer.Faction, lordJob, organizer.Map, (!lordJob.OrganizerIsStartingPawn) ? null : new Pawn[] { organizer }); }