From 1e1245fc1a9bf938bcd66784892620126fed48c4 Mon Sep 17 00:00:00 2001 From: NathanHarbour <nathanharbour@gmail.com> Date: Fri, 19 Feb 2021 20:51:04 -0600 Subject: [PATCH] Settings for overriding rescue chance and search radius --- About/Manifest.xml | 4 +--- Assemblies/CM_No_Pawn_Left_Behind.dll | Bin 9728 -> 11264 bytes Changelog.txt | 9 +++++++ .../English/Keyed/CM_No_Pawn_Left_Behind.xml | 8 +++++++ .../CM_No_Pawn_Left_Behind/JobGiver_Rescue.cs | 21 +++++++++++++---- .../RescueModSettings.cs | 22 ++++++++++++++++++ 6 files changed, 56 insertions(+), 8 deletions(-) diff --git a/About/Manifest.xml b/About/Manifest.xml index 70b49d4..02f0e7a 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,14 +1,12 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Manifest> <identifier>CaptainMuscles.NoPawnLeftBehind</identifier> - <version>1.0.0</version> + <version>1.0.1</version> <dependencies> <li>Ludeon.RimWorld</li> - <li>brrainz.harmony</li> </dependencies> <loadAfter> <li>Ludeon.RimWorld</li> - <li>brrainz.harmony</li> </loadAfter> <showCrossPromotions>true</showCrossPromotions> <downloadUri>https://github.com/CaptainMuscles/CM_No_Pawn_Left_Behind/releases</downloadUri> diff --git a/Assemblies/CM_No_Pawn_Left_Behind.dll b/Assemblies/CM_No_Pawn_Left_Behind.dll index dd5a0d947308dfc8b32050fb8ad72c6153fb3273..187418e2fa1781d164523d735504d30dfd0bac6f 100644 GIT binary patch delta 4170 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 V%`+?eAN|GO8FMCo$VM8?e*<MAzJmY& delta 3086 zcmZuz3vg7`8UFus?>+bK&1TtGHc!ZIUM$&7fN@YH0m7p^0+B~bn*<{Q!%zn5LLw-v zVM!fI=~zp=HU(;(5uI^la7Kt?aHddNYO$@=TE{{iEu9()eZusGVrjo~HZU#i-Q4f| zuk)Y({QrMW?yinqi}!t{HTLwy>oodYpsIKQPa+xzfy@g(*Nicaw*@azP}73Q)a)%Y zqFn>;GzLsqFHxEnqD#g=BI3WF$PfNf6H$ei5NWTI$Gi7dKorM2&ig7?`&vLLe{t_P zSNiS;g$1a_`;e<jrmFSvEWj(sqBC{S6cKr+t0Ughnp$tE*pz!mD=9?D5RvO9!@#tE zrvtZHA0WlCLSMSNhlw^D^06u+7FjT+CX*4E$C6PX$-MlAh?pTWZABwiYP*rddTv9x zk%?hU76TdsMwnyC5|FVQoJ(<WM22MEzEv1u5ltG%O~ek_=_$0cRLv^`M4XW0B+Ehd zAq8&8v6EvJgM@=A?yJ-z7S$_L$f_rbOe&!L2o?@Qy#aW2rP1dicxm+&s6qJpAT~*6 zUGIIPyh7<RHSm<J1wg8Jq)m}t*sRKx!kfsdA{K}&>TDt*MA)+xveK1yUY4JijVnJB z02zehc6Aj<+wST^NzMP4Wu1kwJ&Ta%{Cqo~;S}cH%&_!+YWm}a@E~u<AokPS0IlD= zEznQQaxU~@*2H?1#L}MUZ}~KrCjY~qxiosih?pq~nf2ag>lF8R&9dCCk4!S@9`cUK z$+JRCo0I4xH#r?39#Jh3&CCEzGBZ;R_4u11Vtq;@k}X<PC6co=fo5xV%5o}=jk9HD zHiVfufb<lZnXASIsXIgDGp(BBj<P%>b*+nwqOs&>AV#mCRSN918S|%_L{^nA9mtO| zGY=LGiBT`QUb<?@`H*iEtyz`y8>*N6DRQtsNqs1!jkX|TD|(n+kyU9mGB_-1Ex(g4 zKxucKDxA6kmWrH-iU+((U&%DJo$Nvw%1o<T0NS&&JAe!3tW=E<vbrJ`dO@{T7QJUe z&{crG33yw4(YB(SDjZx>W>9g}9HZtIWbmYWN>wj)(^x6~cY}+)-}({`jz&7ulVvaH zmUi71-DAi%AF3_QFQj|wQ0-`r^R1mv)nbI9x7m@mNwz^S+IV(hihT9teaWqxz6o7l zy_4u1#%s7Hs@osz+3>*nUKR7(V^olkt!Srrai5??se1m3g(x+B1ir-^amN=SAlybo zNRPHaz|`g?3Q{>t#q)uQjN_3s)A)vzbVOsXSS!cSD_B+1w?v~Qsmf4jX!JC$()h5( zW7=kq*ai>lG+xw_H^q9>r5gD)^zM09c!CtRS<`aDrA;(VNa~>PK(yLa^g6m`N@^7< zl%uwy7enGwmZ!n~4cG+eh}{TU+Deks@=lGPNaZ0Y)T}+Gnl%V}m)>&})>(_$r6U@@ z3wxZCkf}s>YNJz@GFqeYtVRiUE|qDUW!h$&mcOXo-J_Qu){?6lH);7nO|RDU%X-Iu z(0(4*9+qpmU(w6y1I>&$Dk0Og`iFYj`-oA}D(qVo=0OF-`WK`h8Taw5TijN@kH3hM zWkG`Sdx^pbwiUn~yO00ICJovOO-JGHH2rgp!@v+7=4%|ICi_#Y_Ld~%u0k5XDBC~_ z9waT0V?fWfi^bBoisN<ioCH=I*4!C7M&&}#{)E!?({`sSCk$$?R_vEcx=}<)PiSt? z`8H36s{^-mGvIz$bFb4=&Yi-hw??@>yPa*iILak#Ne*2f<p$x=p^_TC0x3&}dPcc0 zEOS2EnrHR$KHB|X+&;}cN-=bvkEYftH;>X}YC)-kL8iYND%Z<#Vi?&F_*ee86AT*2 ziIU935o9`ytL!E|q$LkIKI)c?3$8ndJ(q%UX#y|^*9z~}I7{O~jmtE4YFrI0q79nf zqH(*%(?Cgk^C{<F8h4S8-{dAL<!9}gl;Gd+e44=jGTZ1VRaxycneURhPP&`hoK>`t zcUT*#lMmBoTFqt7!!$sBv`f>wLGK1VK=aXk2k3j|A=<!a<ny$hi>xEGg>CaFoc375 zw3lCVPJ(W+zE1~ut~^Tv{CoZd>|Zu7&<kAWjOc(a<NK*w{v$_GHPBHWuq;*+0(_b) zxt#m;Zq5T|@OheO&jqUbohMb{tE4LXGd^c_^2gfpG95NYaBCbiAK>#m#%kwZbBpNZ z%h=2g*qoz&$XB3?u4?-?H0BOa#@@$Q`8p5s0lGwk{4sxO9OMeR*M5n8;xBZZ{p1rb zLA%cWF^5Fje4CHbN5%-GpSRv)mEI3oeZ>8V!&F39xRDBIk!Yj{eHK_wy})XE1el`z zz&kWHDO^r-v|<rG4Mn?Ftkk%cjzhAME&zM!kK$R%Qj<|e<7po);SIc(PqKl=B6^1B z;ZRxllDb0wq!+v?q3Wg)en#~w^nyyq#nxzs`qkBb+f%GBb_;gvsg*OdZs?n#6Fjsd z@}lq>Vh!Hf*b;9z_MEq-I5qTSakt4EyerAH7aSY)UaOekovz%2&(g2=OsW0BufEWF z;<=Mg{r#1RuX-Kv@y;0A=MOClw|RTxs|!Q66OQ_e!rda=>G!V1f8w1@#64LxrNnRh z!fk$`enOZs-0!pE?1bBfR#t6e@7?NPI6eBYtRkPM==eY)CZ;wI1!^v^7pQCEmZ8?V WR}CM&@zqy(NApmq{?9xx$^JKYzvd1A diff --git a/Changelog.txt b/Changelog.txt index 3279a1e..1c02515 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,12 @@ +## [1.0.1] - 2021-02-19 + +### Added +- Settings for overriding rescue chance and search radius + +### Changed +- Clamped market value factor for priority calculation between 200 and 3000 + + ## [1.0.0] - 2021-02-19 ### Added diff --git a/Languages/English/Keyed/CM_No_Pawn_Left_Behind.xml b/Languages/English/Keyed/CM_No_Pawn_Left_Behind.xml index f83c297..8c8f287 100644 --- a/Languages/English/Keyed/CM_No_Pawn_Left_Behind.xml +++ b/Languages/English/Keyed/CM_No_Pawn_Left_Behind.xml @@ -2,5 +2,13 @@ <LanguageData> <CM_No_Pawn_Left_Behind_Settings_Log_Priorities_Label>Log priority calculations in dev mode</CM_No_Pawn_Left_Behind_Settings_Log_Priorities_Label> + + <CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Label>Override rescue chance</CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Label> + <CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Description>When enabled, will override rescue chance for all situations</CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Description> + <CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Label>Rescue chance</CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Label> + + <CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Label>Override rescue search radius</CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Label> + <CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Description>When enabled, will override search radius for all situations</CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Description> + <CM_No_Pawn_Left_Behind_Settings_Search_Radius_Label>Rescue search radius</CM_No_Pawn_Left_Behind_Settings_Search_Radius_Label> </LanguageData> \ No newline at end of file diff --git a/Source/CM_No_Pawn_Left_Behind/JobGiver_Rescue.cs b/Source/CM_No_Pawn_Left_Behind/JobGiver_Rescue.cs index e4c4485..d2d96ff 100644 --- a/Source/CM_No_Pawn_Left_Behind/JobGiver_Rescue.cs +++ b/Source/CM_No_Pawn_Left_Behind/JobGiver_Rescue.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; +using UnityEngine; using RimWorld; using Verse; using Verse.AI; @@ -34,10 +35,14 @@ protected override Job TryGiveJob(Pawn pawn) { float random = Rand.Value; + float finalRescueChance = rescueChance; + if (RescueMod.settings.rescueChanceOverride) + finalRescueChance = RescueMod.settings.rescueChance; + if (Prefs.DevMode && RescueMod.settings.logPriorities) - Log.Message(String.Format("{0} - checking rescue chance {1}/{2}", pawn, random, rescueChance)); + Log.Message(String.Format("{0} - checking rescue chance {1}/{2}", pawn, random, finalRescueChance)); - if (random > rescueChance) + if (random > finalRescueChance) return null; if (pawn.AnimalOrWildMan() || pawn.Faction == Faction.OfPlayer || !RCellFinder.TryFindBestExitSpot(pawn, out var exitSpot)) @@ -62,9 +67,10 @@ private bool TryFindRescuableAlly(Pawn rescuer, out Pawn ally, List<Thing> disal return false; } - - // Multiply search radius by health + // Multiply search radius by health to make wounded people a little less bold in the face of danger float maxDist = searchRadius; + if (RescueMod.settings.searchRadiusOverride) + maxDist = RescueMod.settings.searchRadius; if (healthSearchDistanceWeight > 0.0f) maxDist *= (healthSearchDistanceWeight * rescuer.health.summaryHealth.SummaryHealthPercent); @@ -97,8 +103,13 @@ private bool TryFindRescuableAlly(Pawn rescuer, out Pawn ally, List<Thing> disal priority *= (opinionPriorityWeight * opinionValue); } + if (marketValuePriorityWeight > 0.0f) - priority *= (marketValuePriorityWeight * pawn.MarketValue); + { + float marketValue = Mathf.Clamp(pawn.MarketValue, 200.0f, 3000.0f); + priority *= (marketValuePriorityWeight * marketValue); + } + if (distancePriorityWeight > 0.0f) priority /= (distancePriorityWeight * (rescuer.Position.DistanceTo(pawn.Position) + 1.0f)); diff --git a/Source/CM_No_Pawn_Left_Behind/RescueModSettings.cs b/Source/CM_No_Pawn_Left_Behind/RescueModSettings.cs index a39271c..df8f652 100644 --- a/Source/CM_No_Pawn_Left_Behind/RescueModSettings.cs +++ b/Source/CM_No_Pawn_Left_Behind/RescueModSettings.cs @@ -8,11 +8,23 @@ public class RescueModSettings : ModSettings { public bool logPriorities = false; + public bool rescueChanceOverride = false; + public float rescueChance = 1.0f; + + public bool searchRadiusOverride = false; + public float searchRadius = 1.0f; + public override void ExposeData() { base.ExposeData(); Scribe_Values.Look(ref logPriorities, "logPriorities", false); + + Scribe_Values.Look(ref rescueChanceOverride, "rescueChanceOverride", false); + Scribe_Values.Look(ref rescueChance, "rescueChance", 0.5f); + + Scribe_Values.Look(ref searchRadiusOverride, "searchRadiusOverride", false); + Scribe_Values.Look(ref searchRadius, "searchRadius", 10.0f); } public void DoSettingsWindowContents(Rect inRect) @@ -24,6 +36,16 @@ public void DoSettingsWindowContents(Rect inRect) listing_Standard.CheckboxLabeled("CM_No_Pawn_Left_Behind_Settings_Log_Priorities_Label".Translate(), ref logPriorities); + listing_Standard.CheckboxLabeled("CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Label".Translate(), ref rescueChanceOverride, "CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Override_Description".Translate()); + listing_Standard.Label("CM_No_Pawn_Left_Behind_Settings_Rescue_Chance_Label".Translate()); + listing_Standard.Label(rescueChance.ToString("P0")); + rescueChance = listing_Standard.Slider(rescueChance, 0.0f, 2.0f); + + listing_Standard.CheckboxLabeled("CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Label".Translate(), ref searchRadiusOverride, "CM_No_Pawn_Left_Behind_Settings_Search_Radius_Override_Description".Translate()); + listing_Standard.Label("CM_No_Pawn_Left_Behind_Settings_Search_Radius_Label".Translate()); + listing_Standard.Label(searchRadius.ToString("F0")); + searchRadius = listing_Standard.Slider(searchRadius, 1.0f, 100.0f); + listing_Standard.End(); }