From 6f170d38d3df07408f40ee22115c0e81cc29bc80 Mon Sep 17 00:00:00 2001 From: Avius Date: Tue, 25 Jul 2017 17:55:49 +0200 Subject: [PATCH] Version 0.7 - fixed "failing to reserve food" bug (that one with circling warden around food) - prisoners now stop working (while "anything" time) while starving instead of hungry. They will still get minor debuff - wardens will no longer watch over not working prisoners - prisoners will no longer work if waiting for operation - fixed bug preventing prisoners from cleaning - added "starving prisoners" alert - added settings - changed "Your prisoner stopped working" message to "Prisoners aren't working" alert --- Assemblies/PrisonLabor.dll | Bin 88064 -> 99328 bytes README.md | 19 +-- Source/Alert_LazyPrisoners.cs | 9 +- Source/Alert_StarvingPrisoners.cs | 11 +- Source/HarmonyPatches.cs | 32 +++- Source/Initialization.cs | 11 +- Source/JobGiver_Diet.cs | 3 +- Source/JobGiver_Labor.cs | 20 ++- Source/NewsDialog.cs | 112 ++++++++++++++ Source/Prefs.cs | 57 ++++++- Source/PrefsData.cs | 5 +- Source/PrisonLabor.csproj | 2 + Source/PrisonLaborMod.cs | 155 +++++++++++++++---- Source/PrisonLaborUtility.cs | 113 +++++++++----- Source/PrisonerFoodReservation.cs | 33 +++- Source/Properties/AssemblyInfo.cs | 4 +- Source/SelectWorkTypesDialog.cs | 118 ++++++++++++++ Source/ThinkNode_IfLaborEnabled.cs | 3 +- Source/Tutorials.cs | 24 +-- Source/Tweaks/FoodUtility_Tweak.cs | 3 +- Source/Tweaks/JobDriver_FoodDeliver_Tweak.cs | 3 +- Source/Tweaks/WorkGiver_GrowerSow_Tweak.cs | 2 +- changelog.txt | 3 +- 23 files changed, 603 insertions(+), 139 deletions(-) create mode 100644 Source/NewsDialog.cs create mode 100644 Source/SelectWorkTypesDialog.cs diff --git a/Assemblies/PrisonLabor.dll b/Assemblies/PrisonLabor.dll index f7ca037b276be2740230fa0eda2200be79a88742..326b727fdb2eb11061a5b250f205e5675942270a 100644 GIT binary patch literal 99328 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

H1WOxD)u*pl#dN9x{jKbYEkICku`ac6J>5c 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 Bs+9l$ literal 88064 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 YJa-%5kWzO!3it2Qi2q;dzZVDoH~kR$i~s-t diff --git a/README.md b/README.md index 03bf2202..4ecbb669 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

- v0.6 + v0.7

@@ -24,22 +24,13 @@ This is early alpha version! Some features can be changed, and there are many th ## Compatibility * Works with mods that add Jobs of type cook/mine/craft/haul/clean like Quarry, or Haulers Can Haul To Blueprints -Works with saves. -* You can enable, re-enable, disable this mod to all saves. (However disabling mod can throw errors, but they just saying they can't find tutorials, no harm) -* No collisions with other mods detected yet. Only mods that changes thinking of humanlike should be considered (Humanlike_PostDuty handle). +* Works with old saves. +* Disabling this mod to saves causes prisoners to disappear. In 0.7 I've planned tool to safely disable this mod. +* Now works with WorkTab (by Fluffy) +* There are some collisions that causes prisoners to fail to reserve target of their jobs. They will work on same thing or stealing resources from benches. If you experiencing this issue please le me know what mods are you using. I need to identify which mod causes that. ## [To-do list](https://github.com/Aviuz/PrisonLabor/projects/1) -## Currently to make prisoners work you must meet these conditions -* Prisoner is safe, and don't need medical assistance. -* Prisoner don't need to recover from injury/sickness in bed. -* Prisoner can't escape. -* Prisoner can reach work (best way to do that is leaving open doors to work area). -* Prisoner is fed, and rested. -* Prisoner interaction is set to "Force to work" (no "Chat and Recruit", or "Friendly Chat"). -* Laziness bar in "Needs" tab is below 80%. -* Work type is enabled in "Work" tab. - ## Translations Please contact me if you want help me writing translations. It will take you a few minutes to translate few sentences, and you will help making the mod even better. Thank you in advance! Also I would gladly hear about misspellings or grammar mistakes in English version. diff --git a/Source/Alert_LazyPrisoners.cs b/Source/Alert_LazyPrisoners.cs index 47871894..0aaeb055 100644 --- a/Source/Alert_LazyPrisoners.cs +++ b/Source/Alert_LazyPrisoners.cs @@ -43,7 +43,14 @@ public override string GetExplanation() public override AlertReport GetReport() { - return AlertReport.CulpritIs(LazyPrisoners.FirstOrDefault()); + if (PrisonLaborPrefs.EnableMotivationMechanics) + { + return AlertReport.CulpritIs(LazyPrisoners.FirstOrDefault()); + } + else + { + return false; + } } } diff --git a/Source/Alert_StarvingPrisoners.cs b/Source/Alert_StarvingPrisoners.cs index 12a8deaa..503ee30a 100644 --- a/Source/Alert_StarvingPrisoners.cs +++ b/Source/Alert_StarvingPrisoners.cs @@ -24,7 +24,7 @@ private IEnumerable StarvingPrisoners { foreach (Pawn pawn in maps[i].mapPawns.AllPawns) { - if (PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn) && !pawn.needs.TryGetNeed().IsLazy && pawn.timetable != null && pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Anything && pawn.needs.food.Starving) + if (PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn) && (!PrisonLaborPrefs.EnableMotivationMechanics || !pawn.needs.TryGetNeed().IsLazy) && pawn.timetable != null && pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Anything && pawn.needs.food.Starving) yield return pawn; } } @@ -43,7 +43,14 @@ public override string GetExplanation() public override AlertReport GetReport() { - return AlertReport.CulpritIs(StarvingPrisoners.FirstOrDefault()); + if (!PrisonLaborPrefs.DisableMod) + { + return AlertReport.CulpritIs(StarvingPrisoners.FirstOrDefault()); + } + else + { + return false; + } } } } diff --git a/Source/HarmonyPatches.cs b/Source/HarmonyPatches.cs index 106423b2..a192b84b 100644 --- a/Source/HarmonyPatches.cs +++ b/Source/HarmonyPatches.cs @@ -120,7 +120,7 @@ public static bool ShouldHaveNeedPrisoner(NeedDef nd, Pawn pawn) //delete later if (nd.defName == "PrisonLabor_Laziness" || nd is Need_Laziness) return false; - if (nd.defName == "PrisonLabor_Motivation" && !pawn.IsPrisoner) + if (nd.defName == "PrisonLabor_Motivation" && !(pawn.IsPrisoner && PrisonLaborPrefs.EnableMotivationMechanics)) { return false; } @@ -330,4 +330,34 @@ public static bool isPrisoner(Pawn pawn) return false; } } + + [HarmonyPatch(typeof(ForbidUtility))] + [HarmonyPatch("IsForbidden")] + [HarmonyPatch(new Type[] { typeof(Thing), typeof(Pawn) })] + class FoodReservingPatch + { + private static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase, IEnumerable instr) + { + Label jumpTo = gen.DefineLabel(); + yield return new CodeInstruction(OpCodes.Ldarg_0); + yield return new CodeInstruction(OpCodes.Call, typeof(PrisonerFoodReservation).GetMethod("isReserved")); + yield return new CodeInstruction(OpCodes.Brfalse, jumpTo); + yield return new CodeInstruction(OpCodes.Ldarg_1); + yield return new CodeInstruction(OpCodes.Call, typeof(Pawn).GetMethod("get_IsPrisoner")); + yield return new CodeInstruction(OpCodes.Brtrue, jumpTo); + yield return new CodeInstruction(OpCodes.Ldc_I4_1); + yield return new CodeInstruction(OpCodes.Ret); + + bool first = true; + foreach (CodeInstruction ci in instr) + { + if (first) + { + first = false; + ci.labels.Add(jumpTo); + } + yield return ci; + } + } + } } \ No newline at end of file diff --git a/Source/Initialization.cs b/Source/Initialization.cs index e4958e9a..8cc7f074 100644 --- a/Source/Initialization.cs +++ b/Source/Initialization.cs @@ -14,7 +14,7 @@ namespace PrisonLabor [StaticConstructorOnStartup] class Initialization { - public static int version = 6; + public static int version = PrisonLaborMod.versionNumber; static Initialization() { @@ -47,12 +47,17 @@ private static void checkVersion() if (PrisonLaborPrefs.LastVersion < 5) { Log.Message("Detected older version of PrisonLabor than 0.5"); - Tutorials.msgShowVersion0_5 = true; + NewsDialog.news_0_5 = true; } if (PrisonLaborPrefs.LastVersion < 6) { Log.Message("Detected older version of PrisonLabor than 0.6"); - Tutorials.msgShowVersion0_6 = true; + NewsDialog.news_0_6 = true; + } + if (PrisonLaborPrefs.LastVersion < 7) + { + Log.Message("Detected older version of PrisonLabor than 0.7"); + NewsDialog.news_0_7 = true; } Log.Message("Loaded PrisonLabor v" + PrisonLaborPrefs.Version); diff --git a/Source/JobGiver_Diet.cs b/Source/JobGiver_Diet.cs index 04d85417..eda7d936 100644 --- a/Source/JobGiver_Diet.cs +++ b/Source/JobGiver_Diet.cs @@ -53,7 +53,8 @@ protected override Job TryGiveJob(Pawn pawn) { return null; } - pawn.needs.TryGetNeed().Enabled = false; + if(pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = false; bool flag; if (pawn.RaceProps.Animal) { diff --git a/Source/JobGiver_Labor.cs b/Source/JobGiver_Labor.cs index 5ceb2b75..fb6afad0 100644 --- a/Source/JobGiver_Labor.cs +++ b/Source/JobGiver_Labor.cs @@ -29,22 +29,23 @@ public override float GetPriority(Pawn pawn) public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobParams) { - if(pawn.timetable == null) + if (pawn.timetable == null) { PrisonLaborUtility.InitWorkSettings(pawn); } - if(HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn)) + if (HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn)) { return ThinkResult.NoJob; } //Check medical assistance, fed, and rest if not override - if(!PrisonLaborUtility.WorkTime(pawn)) + if (!PrisonLaborUtility.WorkTime(pawn)) { - pawn.needs.TryGetNeed().Enabled = false; + if (pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = false; return ThinkResult.NoJob; } //Check laziness - if (pawn.needs.TryGetNeed().IsLazy) + if (PrisonLaborPrefs.EnableMotivationMechanics && pawn.needs.TryGetNeed().IsLazy) { return ThinkResult.NoJob; } @@ -52,7 +53,8 @@ public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobPara PrisonLaborUtility.InitWorkSettings(pawn); List workList = pawn.workSettings.WorkGiversInOrderNormal; workList.RemoveAll(workGiver => workGiver.def.defName == "GrowerSow"); - pawn.needs.TryGetNeed().Enabled = false; + if (pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = false; int num = -999; TargetInfo targetInfo = TargetInfo.Invalid; @@ -71,7 +73,8 @@ public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobPara Job job2 = workGiver.NonScanJob(pawn); if (job2 != null) { - pawn.needs.TryGetNeed().Enabled = true; + if (pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = true; return new ThinkResult(job2, this, new JobTag?(workList[j].def.tagToGive)); } WorkGiver_Scanner scanner = workGiver as WorkGiver_Scanner; @@ -168,7 +171,8 @@ public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobPara } if (job3 != null) { - pawn.needs.TryGetNeed().Enabled = true; + if (pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = true; return new ThinkResult(job3, this, new JobTag?(workList[j].def.tagToGive)); } Log.ErrorOnce(string.Concat(new object[] diff --git a/Source/NewsDialog.cs b/Source/NewsDialog.cs new file mode 100644 index 00000000..e965f910 --- /dev/null +++ b/Source/NewsDialog.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; + +namespace PrisonLabor +{ + class NewsDialog : Window + { + private static bool autoShow = true; + + public static bool showAll = false; + + public static bool news_0_5 = false; + public static bool news_0_6 = false; + public static bool news_0_7 = false; + + private Vector2 position; + private Rect cRect; + + public NewsDialog() + { + this.doCloseButton = true; + this.doCloseX = true; + } + + public static void TryShow() + { + if (autoShow && PrisonLaborPrefs.ShowNews) + { + Find.WindowStack.Add(new NewsDialog()); + PrisonLaborPrefs.LastVersion = PrisonLaborPrefs.Version; + PrisonLaborPrefs.Save(); + autoShow = false; + } + } + + public static void ForceShow() + { + Find.WindowStack.Add(new NewsDialog()); + PrisonLaborPrefs.LastVersion = PrisonLaborPrefs.Version; + PrisonLaborPrefs.Save(); + autoShow = false; + } + + public override void DoWindowContents(Rect inRect) + { + if(cRect == null) + cRect = inRect; + + Rect viewRect = new Rect(inRect.x, inRect.y, inRect.width, inRect.height - 50); + + Widgets.BeginScrollView(viewRect, ref this.position, cRect, true); + + float CurHeight = 0; + + Listing_Standard ls_title = new Listing_Standard(GameFont.Medium); + Listing_Standard ls_desc = new Listing_Standard(GameFont.Small); + if(news_0_7 || showAll) + { + ls_title.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_title.Label("Prison Labor Alpha v0.7"); + ls_title.GapLine(); + ls_title.End(); + CurHeight += ls_title.CurHeight; + ls_desc.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_desc.Label(" - Added settings! You can now change almost any aspect of this mod, including:\n * work types\n * motivation mechanics\n * prevention of planting advanced plants."); + ls_desc.Label(" - Added \"uninstaller\" (\"disable\" option in settings), which will allow to disable this mod from existing saves."); + ls_desc.Label(" - \"No more beeping!\". Changed way of informing player what's going on with prisoners. It should be less annoying and more insightful."); + ls_desc.Label(" - Fixed bugs, including bug that prevents prisoners from cleaning and bug that causes warden to stuck in loop of delivering food to prisoner."); + ls_desc.Label(" - \"No more watching while prisoner is sleeping.\"Wardens will no longer watch over not working prisoners."); + ls_desc.Label(" - Prisoners will now stay in bed while waiting for operation"); + ls_desc.Label(" - Prisoners will now stop work when starving for default (\"Anything\" time), instead of hungry. They will still get minor debuff."); + ls_desc.Gap(); + ls_desc.End(); + CurHeight += ls_desc.CurHeight; + } + if(news_0_6 || showAll) + { + ls_title.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_title.Label("Prison Labor Alpha v0.6"); + ls_title.GapLine(); + ls_title.End(); + CurHeight += ls_title.CurHeight; + ls_desc.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_desc.Label("Changes in PrisonLabor v0.6:\n\n 1. Time restrictions - now you can manage your prisoners time for sleep, work and joy. You can now even force them to work when they're hungry!\n 2. Getting food by prisoners - Now prisoners will look for food in much better way, and now (when they desperate enough) they will eat corpses!\n 3. \"Laziness\" changed to \"Motivation\" and inverted.\n\n ATTENTION: After PrisonLabor reaches beta all saves with PrisonLabor v0.5a or lower will be corrupted and unplayable. This version (0.6) is safe and converts all older saves."); + ls_desc.Gap(); + ls_desc.End(); + CurHeight += ls_desc.CurHeight; + } + if(news_0_5 || showAll) + { + ls_title.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_title.Label("Prison Labor Alpha v0.5"); + ls_title.GapLine(); + ls_title.End(); + CurHeight += ls_title.CurHeight; + ls_desc.Begin(new Rect(cRect.x, cRect.y + CurHeight, cRect.width, cRect.height - CurHeight)); + ls_desc.Label("Major changes to PrisonLabor:\n\n 1. Prisoners can now grow, but only plants that not require any skills.\n 2. You can now manage prisoners work types. Just check \"Work\" tab!\n 3. Laziness now appear on \"Needs\" tab. Above 50% wardens will watch prisoners. Above 80% prisoners won't work unless supervised.\n 4. Wardens will now bring food to prisoners that went too far from his bed.\n 5. Prisoners won't gain laziness when not working anymore.\n 6. Fixed many bugs"); + ls_desc.Gap(); + ls_desc.End(); + CurHeight += ls_desc.CurHeight; + } + + Widgets.EndScrollView(); + + cRect = new Rect(inRect.x, inRect.y, inRect.width - 50f, CurHeight + 50f); + } + } +} diff --git a/Source/Prefs.cs b/Source/Prefs.cs index 2596ae1e..f5ff0c4e 100644 --- a/Source/Prefs.cs +++ b/Source/Prefs.cs @@ -10,7 +10,9 @@ namespace PrisonLabor public static class PrisonLaborPrefs { private static PrisonLaborPrefsData data; - private static string prefsFilePath = Path.Combine(GenFilePaths.ConfigFolderPath, "PrisonData_Prefs.xml"); + //OLD DELETE WHEN BETA + private static string oldFilePath = Path.Combine(GenFilePaths.ConfigFolderPath, "PrisonData_Prefs.xml"); + private static string prefsFilePath = Path.Combine(GenFilePaths.ConfigFolderPath, "PrisonLabor_Prefs.xml"); public static int Version { @@ -51,7 +53,7 @@ public static bool ShowNews } } - public static bool AllowAllWorktypes + public static bool AllowAllWorkTypes { get { @@ -68,6 +70,8 @@ public static bool EnableMotivationMechanics { get { + if (data.disable_mod) + return false; return PrisonLaborPrefs.data.enable_motivation_mechanics; } set @@ -90,15 +94,43 @@ public static bool DisableMod } } + public static bool AdvancedGrowing + { + get + { + return data.advanced_growing; + } + set + { + data.advanced_growing = value; + Apply(); + } + } + + public static string AllowedWorkTypes + { + get + { + return PrisonLaborPrefs.data.allowed_works; + } + set + { + PrisonLaborPrefs.data.allowed_works = value; + PrisonLaborPrefs.Apply(); + } + } + public static void Init() { + //delete after beta + if (new FileInfo(oldFilePath).Exists) + { + System.IO.File.Move(oldFilePath, prefsFilePath); + } bool flag = !new FileInfo(prefsFilePath).Exists; PrisonLaborPrefs.data = new PrisonLaborPrefsData(); PrisonLaborPrefs.data = DirectXmlLoader.ItemFromXmlFile(prefsFilePath, true); - if (flag) - { - ; - } + Apply(); } public static void Save() @@ -123,7 +155,18 @@ public static void Save() public static void Apply() { - PrisonLaborPrefs.data.Apply(); + data.Apply(); + PrisonLaborUtility.AllowedWorkTypesData = AllowedWorkTypes; + } + + public static void RestoreToDefault() + { + int version = data.version; + int last_version = data.last_version; + data = new PrisonLaborPrefsData(); + data.version = version; + data.last_version = last_version; + Apply(); } } } \ No newline at end of file diff --git a/Source/PrefsData.cs b/Source/PrefsData.cs index 3abe3e78..1da7ebcb 100644 --- a/Source/PrefsData.cs +++ b/Source/PrefsData.cs @@ -12,10 +12,13 @@ public class PrisonLaborPrefsData public bool allow_all_worktypes = false; public bool enable_motivation_mechanics = true; public bool disable_mod = false; + public bool advanced_growing = false; + + public string allowed_works = ""; public PrisonLaborPrefsData() { - + } public void Apply() diff --git a/Source/PrisonLabor.csproj b/Source/PrisonLabor.csproj index 68d70dc9..f1a3e301 100644 --- a/Source/PrisonLabor.csproj +++ b/Source/PrisonLabor.csproj @@ -62,6 +62,8 @@ + + diff --git a/Source/PrisonLaborMod.cs b/Source/PrisonLaborMod.cs index c755dfec..5265e4a8 100644 --- a/Source/PrisonLaborMod.cs +++ b/Source/PrisonLaborMod.cs @@ -10,9 +10,15 @@ namespace PrisonLabor [StaticConstructorOnStartup] class PrisonLaborMod : Mod { + public const int versionNumber = 7; + public const string versionString = "0.7"; + + private static string difficulty = ""; + private static bool showNews; private static bool allowAllWorktypes; private static bool enableMotivationMechanics; + private static bool advanceGrowing; private static bool disableMod; public PrisonLaborMod(ModContentPack content) : base(content) @@ -22,46 +28,100 @@ public PrisonLaborMod(ModContentPack content) : base(content) public static void Init() { showNews = PrisonLaborPrefs.ShowNews; - allowAllWorktypes = PrisonLaborPrefs.AllowAllWorktypes; + allowAllWorktypes = PrisonLaborPrefs.AllowAllWorkTypes; enableMotivationMechanics = PrisonLaborPrefs.EnableMotivationMechanics; disableMod = PrisonLaborPrefs.DisableMod; } public override void DoSettingsWindowContents(Rect inRect) { - Listing_Standard listing_Standard = new Listing_Standard(); + Rect leftRect = new Rect(inRect.x, inRect.y, inRect.width * 0.75f, inRect.height); + Rect rightRect = new Rect(inRect.x + inRect.width * 0.75f + 30f, inRect.y, inRect.width * 0.25f - 30f, inRect.height); - listing_Standard.Begin(inRect); - listing_Standard.Label("Version: " + PrisonLaborPrefs.Version, -1f); + Listing_Standard listing_options = new Listing_Standard(); - listing_Standard.GapLine(); + listing_options.Begin(leftRect); - listing_Standard.CheckboxLabeled("Show news", ref showNews, "Show news"); + listing_options.CheckboxLabeled("Show news", ref showNews, "Showing news about changes in mod when prisoners detected."); - listing_Standard.GapLine(); + listing_options.GapLine(); - listing_Standard.Label("Allowed work types:", -1f); - listing_Standard.CheckboxLabeled(" allow all", ref allowAllWorktypes, "allow all"); - if (!allowAllWorktypes) + if (!disableMod) { - if (listing_Standard.ButtonTextLabeled(" enabled:", "select")) - ;//add dialog + listing_options.Label("Allowed work types:", -1f); + listing_options.CheckboxLabeled(" allow all", ref allowAllWorktypes, "allow all work types"); + if (!allowAllWorktypes) + { + if (listing_options.ButtonTextLabeled(" allowed work types:", "browse")) + Find.WindowStack.Add(new SelectWorkTypesDialog()); + } + else + { + listing_options.Gap(); + } + + listing_options.GapLine(); + + listing_options.CheckboxLabeled("Motivation mechanics (!)", ref enableMotivationMechanics, "When checked prisoners need to be motivated.\n\nWARINING: Needs reloading save."); + + listing_options.GapLine(); + + listing_options.CheckboxLabeled("Prisoners can grow advanced plants", ref advanceGrowing, "When disabled prisoners can only grow plants that not require any skills."); + } else { - listing_Standard.Gap(); + listing_options.Gap(); + listing_options.Gap(); + listing_options.Label("Restart then re-save your game.", -1f); + listing_options.Label("After this steps you can safely disable this mod.", -1f); + listing_options.Gap(); + listing_options.Gap(); + listing_options.Gap(); } - listing_Standard.GapLine(); + listing_options.Gap(); + listing_options.Gap(); + listing_options.Gap(); + + listing_options.CheckboxLabeled("Disable mod", ref disableMod, "When enabled, worlds that are saved are transferred to 'safe mode', and can be played without mod."); + + listing_options.End(); - listing_Standard.CheckboxLabeled("Motivation mechanics", ref enableMotivationMechanics, "When checked prisoners need to be motivated."); + Listing_Standard listing_panel = new Listing_Standard(); - listing_Standard.GapLine(); + listing_panel.Begin(rightRect); - listing_Standard.CheckboxLabeled("Disable", ref disableMod, "When enabled, worlds that are saved are transferred to 'safe mode', and can be played without mod."); + listing_panel.Label("Prison Labor Alpha", -1f); + listing_panel.Label("Version: " + versionString, -1f); + + listing_panel.GapLine(); + + listing_panel.Label("Difficulty: " + difficulty, -1f); + + listing_panel.GapLine(); + + Listing_Standard listing_buttons = new Listing_Standard(); + + listing_buttons.Begin(new Rect(rightRect.width * 0.25f, listing_panel.CurHeight, rightRect.width * 0.5f, rightRect.height - listing_panel.CurHeight)); + + if (listing_buttons.ButtonText("Defaults")) + { + PrisonLaborPrefs.RestoreToDefault(); + Init(); + } - listing_Standard.End(); - Save(); + if (listing_buttons.ButtonText("ShowNews")) + { + NewsDialog.showAll = true; + NewsDialog.ForceShow(); + } + + listing_buttons.End(); + + listing_panel.End(); + + Apply(); } public override string SettingsCategory() @@ -69,21 +129,54 @@ public override string SettingsCategory() return "Prison Labor"; } - public void Save() + public override void WriteSettings() { - if ( - PrisonLaborPrefs.ShowNews != showNews && - PrisonLaborPrefs.AllowAllWorktypes != allowAllWorktypes && - PrisonLaborPrefs.EnableMotivationMechanics != enableMotivationMechanics && - PrisonLaborPrefs.DisableMod != disableMod - ) - { - PrisonLaborPrefs.ShowNews = showNews; - PrisonLaborPrefs.AllowAllWorktypes = allowAllWorktypes; + Log.Message("saved"); + PrisonLaborPrefs.ShowNews = showNews; + PrisonLaborPrefs.AllowAllWorkTypes = allowAllWorktypes; + if(!disableMod) PrisonLaborPrefs.EnableMotivationMechanics = enableMotivationMechanics; - PrisonLaborPrefs.DisableMod = disableMod; - PrisonLaborPrefs.Save(); + PrisonLaborPrefs.AdvancedGrowing = advanceGrowing; + PrisonLaborPrefs.DisableMod = disableMod; + PrisonLaborPrefs.Save(); + } + + private static void Apply() + { + PrisonLaborPrefs.Apply(); + CalculateDifficulty(); + } + + private static void CalculateDifficulty() + { + int value = 1000; + if (!enableMotivationMechanics) + value -= 300; + if (advanceGrowing) + value -= 50; + value -= 500; + if(!allowAllWorktypes) + { + int delta = 500 + 7 * 50 + (DefDatabase.DefCount - 20) * 25; + foreach (WorkTypeDef wtd in DefDatabase.AllDefs) + { + if (!PrisonLaborUtility.WorkDisabled(wtd)) + delta -= 50; + } + if (delta > 0) + value += delta; } + + if (value >= 1000) + difficulty = (int)(value / 10) + " (Normal)"; + else if (value >= 800) + difficulty = (int)(value / 10) + " (Casual)"; + else if (value >= 500) + difficulty = (int)(value / 10) + " (Easy)"; + else if (value >= 300) + difficulty = (int)(value / 10) + " (Peaceful)"; + else + difficulty = (int)(value / 10) + " (A joke)"; } } } diff --git a/Source/PrisonLaborUtility.cs b/Source/PrisonLaborUtility.cs index 0dbc58b0..0bc88b9d 100644 --- a/Source/PrisonLaborUtility.cs +++ b/Source/PrisonLaborUtility.cs @@ -12,51 +12,84 @@ class PrisonLaborUtility private static PrisonerInteractionModeDef pimDef; - private static List enabledWorks; - private static List disabledWorks; + private static List defaultWorkTypes; + private static List allowedWorkTypes; - public static List DisabledWorks + private static List DefaultWorkTypes { get { - if(enabledWorks == null) + if(defaultWorkTypes == null) { - enabledWorks = new List(); - enabledWorks.Add(WorkTypeDefOf.Growing); - enabledWorks.Add(WorkTypeDefOf.Mining); - enabledWorks.Add(WorkTypeDefOf.Hauling); - enabledWorks.Add(DefDatabase.GetNamed("Cooking")); - enabledWorks.Add(DefDatabase.GetNamed("PlantCutting")); - enabledWorks.Add(DefDatabase.GetNamed("Crafting")); - enabledWorks.Add(DefDatabase.GetNamed("Cleaning")); - - enabledWorks.Add(DefDatabase.GetNamed("HaulingUrgent", false)); + defaultWorkTypes = new List(); + defaultWorkTypes.Add(WorkTypeDefOf.Growing); + defaultWorkTypes.Add(WorkTypeDefOf.Mining); + defaultWorkTypes.Add(WorkTypeDefOf.Hauling); + defaultWorkTypes.Add(DefDatabase.GetNamed("Cooking")); + defaultWorkTypes.Add(DefDatabase.GetNamed("PlantCutting")); + defaultWorkTypes.Add(DefDatabase.GetNamed("Crafting")); + defaultWorkTypes.Add(DefDatabase.GetNamed("Cleaning")); + + defaultWorkTypes.Add(DefDatabase.GetNamed("HaulingUrgent", false)); + } + return defaultWorkTypes; + } + } + + private static List AllowedWorkTypes + { + get + { + if (allowedWorkTypes == null) + { + return DefaultWorkTypes; + } + else + { + return allowedWorkTypes; + } + } + } + + public static string AllowedWorkTypesData + { + get + { + if (allowedWorkTypes == null) + { + return ""; } - if(disabledWorks == null) + else { - disabledWorks = new List(); - disabledWorks.Add(WorkTypeDefOf.Construction); - disabledWorks.Add(WorkTypeDefOf.Doctor); - disabledWorks.Add(WorkTypeDefOf.Firefighter); - disabledWorks.Add(WorkTypeDefOf.Handling); - disabledWorks.Add(WorkTypeDefOf.Hunting); - disabledWorks.Add(WorkTypeDefOf.Warden); - disabledWorks.Add(DefDatabase.GetNamed("Art")); - disabledWorks.Add(DefDatabase.GetNamed("PatientEmergency")); - disabledWorks.Add(DefDatabase.GetNamed("PatientBedRest")); - disabledWorks.Add(DefDatabase.GetNamed("Flicker")); - disabledWorks.Add(DefDatabase.GetNamed("Research")); - disabledWorks.Add(DefDatabase.GetNamed("Smithing")); - disabledWorks.Add(DefDatabase.GetNamed("Tailoring")); + string data = ""; + foreach(WorkTypeDef workDef in allowedWorkTypes) + { + data += workDef.defName + ";"; + } + return data; + } + } + + set + { + if(value.NullOrEmpty()) + { + allowedWorkTypes = null; + } + else + { + allowedWorkTypes = new List(); + string[] subs = value.Split(';'); + foreach (string s in subs) + allowedWorkTypes.Add(DefDatabase.GetNamed(s, false)); } - return disabledWorks; } } public static bool WorkDisabled(WorkTypeDef wt) { - if (wt != null) - return DisabledWorks.Contains(wt); + if (wt != null && !PrisonLaborPrefs.AllowAllWorkTypes) + return !AllowedWorkTypes.Contains(wt); else return false; } @@ -69,13 +102,23 @@ public static bool WorkDisabled(Pawn p, WorkTypeDef wt) return false; } + public static void SetAllowedWorkTypes(IEnumerable newList) + { + allowedWorkTypes = new List(); + foreach(WorkTypeDef workDef in newList) + { + allowedWorkTypes.Add(workDef); + } + } + public static void InitWorkSettings(Pawn pawn) { //Work Types if (!pawn.workSettings.EverWork) pawn.workSettings.EnableAndInitialize(); - foreach (WorkTypeDef def in PrisonLaborUtility.DisabledWorks) - pawn.workSettings.Disable(def); + foreach (WorkTypeDef def in DefDatabase.AllDefs) + if(WorkDisabled(def)) + pawn.workSettings.Disable(def); //Timetables if(pawn.timetable == null) @@ -89,7 +132,7 @@ public static bool LaborEnabled(Pawn pawn) { if (pimDef == null) pimDef = DefDatabase.GetNamed("PrisonLabor_workOption"); - if (pawn.IsPrisoner && pawn.guest.interactionMode == pimDef) + if (pawn.IsPrisoner && pawn.guest.interactionMode == pimDef && !PrisonLaborPrefs.DisableMod) return true; else return false; diff --git a/Source/PrisonerFoodReservation.cs b/Source/PrisonerFoodReservation.cs index 6c355d66..86fd9840 100644 --- a/Source/PrisonerFoodReservation.cs +++ b/Source/PrisonerFoodReservation.cs @@ -1,4 +1,5 @@ -using System; +using RimWorld; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,19 +9,41 @@ namespace PrisonLabor { class PrisonerFoodReservation { - private static List reservation = new List(); + private static Dictionary reservation = new Dictionary(); public static bool isReserved(Thing t) { - if (reservation.Contains(t)) + Pawn p; + reservation.TryGetValue(t, out p); + if (p != null && p.GetRoom() == t.GetRoom() && p.needs.food.CurCategory != HungerCategory.Fed) return true; else return false; } - public static void reserve(Thing t) + public static void reserve(Thing t, Pawn p) { - reservation.Add(t); + if (!reservation.ContainsKey(t)) + reservation.Add(t, p); + else + reservation[t] = p; + + if (reservation.Count > 50) + clearEatenFood(); + } + + private static void clearEatenFood() + { + List removeList = new List(); + foreach(Thing t in reservation.Keys) + { + if (t == null || t.GetRoom() == null || !isReserved(t)) + removeList.Add(t); + } + foreach(Thing t in removeList) + { + reservation.Remove(t); + } } } } diff --git a/Source/Properties/AssemblyInfo.cs b/Source/Properties/AssemblyInfo.cs index aa3447f8..b6a6810d 100644 --- a/Source/Properties/AssemblyInfo.cs +++ b/Source/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.6.0.0")] -[assembly: AssemblyFileVersion("0.6.0.0")] +[assembly: AssemblyVersion("0.7.0.0")] +[assembly: AssemblyFileVersion("0.7.0.0")] diff --git a/Source/SelectWorkTypesDialog.cs b/Source/SelectWorkTypesDialog.cs new file mode 100644 index 00000000..f143e360 --- /dev/null +++ b/Source/SelectWorkTypesDialog.cs @@ -0,0 +1,118 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace PrisonLabor +{ + class SelectWorkTypesDialog : Window + { + Dictionary workTypes; + + float maxH; + Vector2 position; + bool temp; + + public SelectWorkTypesDialog() + { + this.absorbInputAroundWindow = true; + this.closeOnEscapeKey = true; + this.doCloseX = true; + this.doCloseButton = true; + + workTypes = new Dictionary(); + + foreach (WorkTypeDef workType in DefDatabase.AllDefs) + if (!PrisonLaborUtility.WorkDisabled(workType)) + workTypes.Add(workType, true); + else + workTypes.Add(workType, false); + } + + public override void DoWindowContents(Rect inRect) + { + + Rect listRect = new Rect(inRect.x, inRect.y + 10f, inRect.width, inRect.height - 50f); + Rect contentRect = new Rect(0f, 0f, inRect.width - 20f, 24f * workTypes.Count()); + Widgets.BeginScrollView(listRect, ref this.position, contentRect, true); + Listing_Standard listing_Standard = new Listing_Standard(); + listing_Standard.Begin(contentRect); + + WorkTypeDef workTypeClicked = null; + foreach (WorkTypeDef workDef in workTypes.Keys) + { + String label = workDef.labelShort, tooltip = workDef.description; + float lineHeight = Text.LineHeight; + bool checkOn = workTypes[workDef]; + //workTypes.TryGetValue(workDef, out checkOn); + Rect rect = listing_Standard.GetRect(lineHeight); + if (!tooltip.NullOrEmpty()) + { + if (Mouse.IsOver(rect)) + { + Widgets.DrawHighlight(rect); + } + TooltipHandler.TipRegion(rect, tooltip); + } + TextAnchor anchor = Text.Anchor; + Text.Anchor = TextAnchor.MiddleLeft; + Widgets.Label(rect, label); + if (Widgets.ButtonInvisible(rect, false)) + { + workTypeClicked = workDef; + if (checkOn) + { + SoundDefOf.CheckboxTurnedOn.PlayOneShotOnCamera(null); + } + else + { + SoundDefOf.CheckboxTurnedOff.PlayOneShotOnCamera(null); + } + } + Color color = GUI.color; + Texture2D image; + if (checkOn) + { + image = Widgets.CheckboxOnTex; + } + else + { + image = Widgets.CheckboxOffTex; + } + Rect position = new Rect(rect.x + rect.width - 24f, rect.y, 24f, 24f); + GUI.DrawTexture(position, image); + Text.Anchor = anchor; + listing_Standard.Gap(listing_Standard.verticalSpacing); + } + + if (workTypeClicked != null) + { + workTypes[workTypeClicked] = !workTypes[workTypeClicked]; + Apply(workTypes); + } + + maxH = listing_Standard.CurHeight; + + listing_Standard.End(); + Widgets.EndScrollView(); + } + + private static void Apply(Dictionary workTypes) + { + List list = new List(); + foreach (WorkTypeDef workDef in workTypes.Keys) + { + if(workTypes[workDef] == true) + { + list.Add(workDef); + } + } + PrisonLaborUtility.SetAllowedWorkTypes(list); + PrisonLaborPrefs.AllowedWorkTypes = PrisonLaborUtility.AllowedWorkTypesData; + } + } +} diff --git a/Source/ThinkNode_IfLaborEnabled.cs b/Source/ThinkNode_IfLaborEnabled.cs index e56d8005..741c3cf7 100644 --- a/Source/ThinkNode_IfLaborEnabled.cs +++ b/Source/ThinkNode_IfLaborEnabled.cs @@ -23,7 +23,8 @@ protected override bool Satisfied(Pawn pawn) { return true; } - pawn.needs.TryGetNeed().Enabled = false; + if(pawn.needs.TryGetNeed() != null) + pawn.needs.TryGetNeed().Enabled = false; } } return false; diff --git a/Source/Tutorials.cs b/Source/Tutorials.cs index 5dd9f903..d4c4d5ce 100644 --- a/Source/Tutorials.cs +++ b/Source/Tutorials.cs @@ -15,16 +15,12 @@ class Tutorials private static ConceptDef managementDef = DefDatabase.GetNamed("PrisonLabor_Management", true); private static ConceptDef timetableDef = DefDatabase.GetNamed("PrisonLabor_Timetable", true); - public static bool showNews = true; - public static bool msgShowVersion0_5 = false; - public static bool msgShowVersion0_6 = false; - public static void Introduction() { if (!PlayerKnowledgeDatabase.IsComplete(introductionDef)) Verse.Find.Tutor.learningReadout.TryActivateConcept(introductionDef); //Move it to point after map genration - News(); + NewsDialog.TryShow(); } public static void Motivation() @@ -51,23 +47,5 @@ public static void Growing() Verse.Find.Tutor.learningReadout.TryActivateConcept(growingDef); } - public static void News() - { - if (showNews) - { - if (msgShowVersion0_6) - { - Find.WindowStack.Add(new Dialog_MessageBox("Changes in PrisonLabor v0.6:\n\n 1. Time restrictions - now you can manage your prisoners time for sleep, work and joy. You can now even force them to work when they're hungry!\n 2. Getting food by prisoners - Now prisoners will look for food in much better way, and now (when they desperate enough) they will eat corpses!\n 3. \"Laziness\" changed to \"Motivation\" and inverted.\n\n ATTENTION: After PrisonLabor reaches beta all saves with PrisonLabor v0.5a or lower will be corrupted and unplayable. This version (0.6) is safe and converts all older saves.", "Ok", null, null, null, "PrisonLabor - Patch 0.6", false)); - } - if (msgShowVersion0_5) - { - Find.WindowStack.Add(new Dialog_MessageBox("Major changes to PrisonLabor:\n\n 1. Prisoners can now grow, but only plants that not require any skills.\n 2. You can now manage prisoners work types. Just check \"Work\" tab!\n 3. Laziness now appear on \"Needs\" tab. Above 50% wardens will watch prisoners. Above 80% prisoners won't work unless supervised.\n 4. Wardens will now bring food to prisoners that went too far from his bed.\n 5. Prisoners won't gain laziness when not working anymore.\n 6. Fixed many bugs", "Ok", null, null, null, "PrisonLabor - Update", false)); - } - PrisonLaborPrefs.LastVersion = PrisonLaborPrefs.Version; - PrisonLaborPrefs.Save(); - showNews = false; - } - } - } } diff --git a/Source/Tweaks/FoodUtility_Tweak.cs b/Source/Tweaks/FoodUtility_Tweak.cs index 88c9af2a..cafa7816 100644 --- a/Source/Tweaks/FoodUtility_Tweak.cs +++ b/Source/Tweaks/FoodUtility_Tweak.cs @@ -160,6 +160,7 @@ public static Thing BestFoodInInventory(Pawn holder, Pawn eater = null, FoodPref return thing; } } + } return null; } @@ -195,7 +196,7 @@ public static Thing BestFoodSourceOnMap(Pawn getter, Pawn eater, bool desperate, } Predicate foodValidator = delegate (Thing t) { - if (PrisonerFoodReservation.isReserved(t) && !eater.IsPrisoner && !desperate) + if (PrisonerFoodReservation.isReserved(t) && (eater != getter || !eater.IsPrisoner) && !desperate) { return false; } diff --git a/Source/Tweaks/JobDriver_FoodDeliver_Tweak.cs b/Source/Tweaks/JobDriver_FoodDeliver_Tweak.cs index 3c97d486..e08589a3 100644 --- a/Source/Tweaks/JobDriver_FoodDeliver_Tweak.cs +++ b/Source/Tweaks/JobDriver_FoodDeliver_Tweak.cs @@ -51,6 +51,7 @@ public override void Notify_Starting() [DebuggerHidden] protected override IEnumerable MakeNewToils() { + this.FailOn(() => PrisonerFoodReservation.isReserved(TargetA.Thing)); yield return Toils_Reserve.Reserve(TargetIndex.B, 1, -1, null); if (this.eatingFromInventory) { @@ -88,7 +89,7 @@ protected override IEnumerable MakeNewToils() { Thing thing; pawn.carryTracker.TryDropCarriedThing(toil.actor.jobs.curJob.targetC.Cell, ThingPlaceMode.Direct, out thing, null); - PrisonerFoodReservation.reserve(thing); + PrisonerFoodReservation.reserve(thing, (Pawn)toil.actor.jobs.curJob.targetB.Thing); }, defaultCompleteMode = ToilCompleteMode.Instant }; diff --git a/Source/Tweaks/WorkGiver_GrowerSow_Tweak.cs b/Source/Tweaks/WorkGiver_GrowerSow_Tweak.cs index 42e38033..527a4d88 100644 --- a/Source/Tweaks/WorkGiver_GrowerSow_Tweak.cs +++ b/Source/Tweaks/WorkGiver_GrowerSow_Tweak.cs @@ -100,7 +100,7 @@ public override Job JobOnCell(Pawn pawn, IntVec3 c) } return null; } - if (WorkGiver_Grower.wantedPlantDef.plant.sowMinSkill > 0) + if (WorkGiver_Grower.wantedPlantDef.plant.sowMinSkill > 0 && !PrisonLaborPrefs.AdvancedGrowing) { return null; } diff --git a/changelog.txt b/changelog.txt index a7862156..d9daa9e2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,12 +1,13 @@ Changelog: 0.7 +- fixed "failing to reserve food" bug (that one with circling warden around food) - prisoners now stop working (while "anything" time) while starving instead of hungry. They will still get minor debuff - wardens will no longer watch over not working prisoners - prisoners will no longer work if waiting for operation - fixed bug preventing prisoners from cleaning - added "starving prisoners" alert - added settings -- changed "Your prisoner stopped working" message to "Your prisoners are not working" alert +- changed "Your prisoner stopped working" message to "Prisoners aren't working" alert 0.6a - fixed some bugs 0.6