From 3197afc360c712e4d815df7311cc3394d90e169c Mon Sep 17 00:00:00 2001 From: Hazzer Date: Sun, 19 Feb 2023 16:36:52 +0100 Subject: [PATCH] version 1.4.6 --- 1.4/Assemblies/PrisonLabor.dll | Bin 280064 -> 281088 bytes .../PL_Biotech_PrisonersInteractionMode.xml | 12 +- .../PrisonLaborCashRegistryCompatibility.dll | Bin 8192 -> 8192 bytes .../PrisonLaborCleaningAreaCompatibility.dll | Bin 8704 -> 8704 bytes .../PrisonLaborColonyGroupsCompatibility.dll | Bin 0 -> 11264 bytes .../PrisonLaborHospitalityCompatibility.dll | Bin 8192 -> 8192 bytes .../PrisonLaborKijinCompatibility.dll | Bin 7680 -> 7680 bytes .../PrisonLaborQuarryCompatibility.dll | Bin 5632 -> 5632 bytes .../PrisonLaborTherapyCompatibility.dll | Bin 11264 -> 11264 bytes About/About.xml | 2 +- .../PrisonerInteractionModeDef.xml | 8 - LoadFolders.xml | 1 + README.md | 2 +- .../ColonyGroupsCompatibility.csproj | 76 ++++ .../ColonyGroupsCompatibility/HarmonyInit.cs | 29 ++ .../MarkGroupAssigment_Patch.cs | 89 ++++ .../Properties/AssemblyInfo.cs | 36 ++ .../ColonyGroupsCompatibility/packages.config | 4 + .../BillAssignation/BillAssignationUtility.cs | 62 ++- Source/Core/BillAssignation/BillGroupData.cs | 6 +- Source/Core/GameSaves/SaveCleaner.cs | 430 +++++++++--------- Source/Core/Meta/Version.cs | 3 +- Source/Core/Meta/VersionUtility.cs | 4 +- Source/Core/Other/CustomForbidenUtil.cs | 130 +++--- .../Bill_StartAnew_Patch.cs | 96 ++-- .../Patch_BillPrevention.cs | 124 ++--- .../GUI_Bill/Patch_Bill_Assigment.cs | 50 +- .../GUI_Bill/Patch_RestrictBillToPrisoner.cs | 424 +++++++++-------- Source/Organizer/NewsFeed.xml | 1 + Source/PrisonLabor.sln | 6 + changelog.txt | 5 + 31 files changed, 963 insertions(+), 637 deletions(-) rename PL_Biotech_PrisonersInteractionMode.xml => 1.4/Biotech/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PL_Biotech_PrisonersInteractionMode.xml (99%) create mode 100644 1.4/ColonyGroups/Assemblies/PrisonLaborColonyGroupsCompatibility.dll create mode 100644 Source/CompatibilityProjects/ColonyGroupsCompatibility/ColonyGroupsCompatibility.csproj create mode 100644 Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyInit.cs create mode 100644 Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyPatches/MarkGroupAssigment_Patch.cs create mode 100644 Source/CompatibilityProjects/ColonyGroupsCompatibility/Properties/AssemblyInfo.cs create mode 100644 Source/CompatibilityProjects/ColonyGroupsCompatibility/packages.config diff --git a/1.4/Assemblies/PrisonLabor.dll b/1.4/Assemblies/PrisonLabor.dll index 8b11ebc0929c5a6902219afd95c6f817e00b7c09..78c4b92e341c939f6104353fd2b822491b884c40 100644 GIT binary patch delta 112668 zcmbrn2Y4Gr`aizAl2@`^Wyz9lxwmXAIdMp{6G-ATQV1cG;Dj1l2mv;%>B>r`w}b=+ z@X-mq_uk9VTj)J-9OdZYI5?{LecpF=CD}>t%m4ZNdAvJ2^UgbOo0)gsnO*g*3ih27 zTzl%A`?vmnU&Z|Zd+J4P&0hXvMmJJ_a*)77SYKq-W1y0}}d%Lk|e%*rgW zL2Yckks78a{A)^{;!ml{sbe)oOq1n04bi;V@xsHQlm@X+*QvShq0>B6l|iFM>DQ$TKs zq6B*%0YE_4>`^EJjY+zP2RsG7#8l_WI2BE$ItT;NFcOIY{b5w=J&kFg5+hGh;^rB6 zE|e&WKKKao2#Z~dMpbRaRV!L`eL#Pd>aC%AA)mdKxV&hLI!e4%G#pp8c-P2tCBAr39B(`TZ{%on0~xjI_>S-h<3H3_@DgxvwRwh@Zv@fv%G<4ao94smVC z-R&Pqpxq_Vo&>a`qM4U~02880Kq&xq@M+#0U_~(!ns_5X@B!vs9D^kBfYZ46u4IfqCph>E^Xph_z*{ z`yS&~JsODtUGro}pb|;Kv4dee1S3hH5=laGFpQUABne3|wroZu4;dh#kH9?k@pSXr zCo&1Ax>Zj>Vn8p=l0YSrgwqDY1hXVii6r6l!7yc65>6MDp{eTqV)sxiw#tP%1Bn5> zoS<%GS*^O`?9kJiI_8eWkwz_crVF>4;VKADc7!uUf5q?W1>&5_lXk8|HrNsb?6J?K zo7e8gt?fu?xlxv0CQC1urB_mEqhb_8DN5U7fW;-)O%m)DaY$9VZH&x&Oy)g7bwQJ~Tz7t7AR}OFk>sRfp1{4ow*b zBG3ziik92}xa5bp1oT9qqE#CqVoQk!6s^KZx3wu+Or|MWl}%PU$xw%`?1NFFo^V#K zZc!AqC6f9GSi`-y<9c~ZG<65=>xV1iztvUhKSWv0$m)-gWBe1BM9dfTMi-gKBAq-K zm()MR9yKG?PsHk)di7IrGp?VAmusTxXX5jkW81#~h#YrH&?)K3{1TVKc)n(s7?=v< zioZ=!h|@Y%oLO6!UV+>KUr~Oce}-T3uEcO3h5v2wFYw=o|3mP<82_E?aIxkUC@ZqU z40${6quk`sT=XQxx@BnYYRY}W$=zG(Bjk-AYrQc9GQQNREF9cWd}nLy(5!B2#?Y)0 z##i7v5!TJG#l*T{X)vrRg=n{lRcn+%lYzLRvyJW`?eR^R2n_vg+}Z%|RZakWGr@b! zlYtFZP^VbCp((G~k7sRFi>jy|;~S(6ObIXzjGE(+z^ETlteXJoA)yD1G#5t;6uxQsDs=d=FPV z$?s5s<&Y?l58eS4oe;bR6py(PrG@c4MN%8;@F?9N3Y{s~Ycf$D+pD2@P1~XOd%!Nx zwH*%cP?VSvM31ubP^KsOI-sv0`VM#xQ1%bF@NjdOq%Z(DP*_MeuZ>}bRpnDc=wSvE z%p`)SO2z6fQdVfJDvyzstl~K$g-!^r3Uu>7!fuHAe?%*ln(>pksG&AZ57F|l*Z40I zkpY!Q8DFHR6E*-b{ES=^BUK<#FCUV>QqFIbQ|!?qQR812j4o&Iax==AsGH16W1DC{fTneg5jv4*jvhqD2h+;I#t9uP4()1;;yFgV~EZu=#-4P^FjeS4VyM` zcRF!535m0%v|2=cb4BPQ)G*SxBt~g+Sj`i4!)h_09@IQe+5@qFZF9XE7tc127=4kf z-7aN4(v>wvQLvXFGrs^3pRgT2be_6tFZ_xy

(*5>BhftP#I1G0fxl9M@f^V-`nL*l!Z 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 z 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 B%h&(_ diff --git a/PL_Biotech_PrisonersInteractionMode.xml b/1.4/Biotech/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PL_Biotech_PrisonersInteractionMode.xml similarity index 99% rename from PL_Biotech_PrisonersInteractionMode.xml rename to 1.4/Biotech/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PL_Biotech_PrisonersInteractionMode.xml index b586484c..1e1e57c4 100644 --- a/PL_Biotech_PrisonersInteractionMode.xml +++ b/1.4/Biotech/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PL_Biotech_PrisonersInteractionMode.xml @@ -1,7 +1,7 @@ - - - 工作與供血 強迫囚犯工作,血原需求者可無視囚犯心情直接對其進食。 - - 工作和血包 強迫囚犯工作,以不造成死亡為原則,抽取血液。 - + + + 工作與供血 強迫囚犯工作,血原需求者可無視囚犯心情直接對其進食。 + + 工作和血包 強迫囚犯工作,以不造成死亡為原則,抽取血液。 + \ No newline at end of file diff --git a/1.4/CashRegistry/Assemblies/PrisonLaborCashRegistryCompatibility.dll b/1.4/CashRegistry/Assemblies/PrisonLaborCashRegistryCompatibility.dll index dbc712825b8e559053e6bfc28626ed280f7cd8ea..8a9dbc6c2d720a4ed3476e43a26c8331b69d093d 100644 GIT binary patch delta 83 zcmZp0XmFU&!J-iPdG^Mhb6hO{6x4k-$8jIx5ZHaSGunq)&1L$%1NQRs#l<%ph@50( kG~4`3bP5wE8v_diBLf2i+ve#Ki6GIRlFvcZLuq*y01P4<>;M1& delta 83 zcmZp0XmFU&!D1qFXXVD8b6hN|6-?DP$8jIx5YRNa;Ln-##&7<)F5d1#F6EmIL{2g? knr{9jI)#aom4StUk%57Mb@OzIM3CrD$>$*Ip|m^;0QGJg>i_@% diff --git a/1.4/CleaningArea/Assemblies/PrisonLaborCleaningAreaCompatibility.dll b/1.4/CleaningArea/Assemblies/PrisonLaborCleaningAreaCompatibility.dll index 80a7df467eb5274244c7e8e2a817c40cffcee066..48b71f92e6fbc4679b48dd6d085b0651c4cad3c4 100644 GIT binary patch delta 92 zcmZp0X>gg)!BX@rdCJC~Gh8hH6x4kt$8f8#Fe*NswYh~mhD%`W=OP)2yPy4crOeH| v7Solz`GY7k6QkMYFXFS9IN2Cj7#JBC7}z#Xmr7&=ivE;-4x%2)%Ci6fgFztX delta 92 zcmZp0X>gg)!QvOOee%YhGh8gI6-?D9$8f6v8HZ+XZsCsM67Wd)5p?9h3zzBn(@l!j t{b1kxL6n(^(RA|{@mWlqtPCs+j0_A6tedAxB{Bjlu*uT3$#rdnxrWSoInew$!R&KrNzlH z{oOaStCeiI<&XZ8GV9}zu=Cto`xyf7%EyJ7iv z8t7YfudR4a^u4xXWXyD8Mcc~SdOnuc3kA!KrHq(eD#Xk}tb1TMmbWrS;-ZVR)xPM# z9-=-Gpx=wW`MJt$Z_>(Gy=Wy`2};DHuH1oV4EHE*qPY@RJiVEqGT`eG+@SLnpwT;+ zmH$mW{U(!e{q;3O1B{Fk#n}lnuQJgb(0;p}Xv@sL3$B5m#~eT1xD7D%D7q9THH0)4x*hkO^GTX z^2NF-6rvMrh;Cm@Bqa6YgQcws!BsrIk!--Cvy4d7NR2PY(~1F*-35Al1*7!yrh2lE zqaBW~1R=i4qq6Qo#%&HQy^NaXp}A6t!*WfUHLo>5Da->i8z~Tn)|&kaq*#{%voP;E zO^wHaFFPyh!!1`*{BktZsA55|c2Ql+DzaY(e`I1E+VK_!>lq{f<^>yr^Fr%XQUIwj zw03G{o;Qkl1Jb?^Az}Xf_!StVts`~qvE^r-ix8tV$|T|xToaf?`UckoCt+xC?L7E~ za|mhHNXi5fTszsub8Y}=S*}d9^K+s1v^Jt)-z8wuCSdDClbqpvGOk4b1!VmETp0nW zM+ka2^-xz+l}WfPNa|S?38XrkA+bI%0cEu{6I%hp@oj)Ef+HrmJ>`+AYrYSYSje*Y zRbU`HrclwNSREiNyBqe3_|-t;NDxHvCO@1?U=mRbDse1DZ4%B2u2tcyARPo5ZfsO0 zxL;Fy!d}4TX2t6Oy34h_0M8}3*Ik0Yu`Sm?jV);gcQAO8!A}61)+!6+RD>tS1{GzZ z4i9GsPYlC@O4B657u@m^xCy_y`TQtMAiqfp&!b3GqSbPD-8nz{~ zu(4aF$y+*u@#MA8>2Hw?O8h!tb`Cbi`+(Ib+dO>?c%{29QtB37FXQO7JsaZ4p>=12 zytKEiIQ!8@O>37a6CBUAOPsxsdrPHB#A}St1o+&~z2#@y7bz2*nlee->yap&lZv)3 z+$2{#me2%JGB}Av6$H-fev*R*oEQHjCz^^mXs0F+fHFTXB?N@#vd#TG zmd91-L~jL|#?*4)8)21xE#XP!mhi>&BZyJytIDa6O6dT@ZV7)R;Uf}0FX7K5&mSnK zAfYJXWs?4Za(PgrUFr%&rH3MWLJd^Zo`%eyh4w(&FT|culpa(y&>syxO%1diy&5eH zE)^O*99k-xD52UBjc$#wgntvP!wU-Q*+YL0{yz?}G(G%!#3CJ5X!NTPbACq3-!C~W z%%akd)nr7aVT^(;g7M=Lzc_FUq#e;tg)}-8Q*QkT?Gv_>Vkv@x-`OCy&qz2yTt3@e-#>P^gXHDW`(WJtK+Il zb#<)UZzbmo(z*#~yM!`ANAKUj3XaX!7$A0D=KU)2fY#%;=F&~UUxv9Az&)2f?YBY{ zz%k5`<-U5^!pVe|f}BxlTj&`f=vw7jz>Br#0M8KPBcVSPDh&W)tnwo8--s81w`wl~ zUk51Ya>;p;UIYGzzz1UxO!qBv!ha9SH)QLxi}LWQpyy=kG<`4l59qse1#^0R0cw@4 z`{+vX7AncTvUQs7RsRXCoZokU@C@dC+HalE&WJGmyU#fuA|*mwR!+&(sB>EDTG_e{ zky4Qv6V*O})@j*#OQ?u=J$=z{ZPH?B{bn`Ge5>yMx&{TlTO(WI3B<7;C#%=@c3m4< z^ZmYGs`J2U`K^uNUFhS8{TDVAg+7H<&AyfEPT?w~6$@6-HznPJ+hni6e#3ELeN}oC zH~-y_`%6?u`LI9aI1u!681{CPr^eI>VON#l=x8z$0fWKP^D)8 zm(cT7e6FOZ^q!=z5X^JASPZS&1bb)>1+*66FTo>iBA~Tl4;l`4P^TD%<@+T6eHc5J z4v8DIVY-k0E_jG^aibU|Q=E<%z<;2Q(w%a~qoP$gMn}cPViK?+csq@Y=hS=XKCw{! zA~jQe@SF6g_`3KuJt_V&@*R3c>`-2$=YhXMFNzNFWBQOr#JluUu~K`NejsksehtcM z@t=@C7(9a+H$={&cL8`7L$`Xdn%)U5LDqdXv|PL={z|MCB=BQ8b$F~*n02O^{eNvwG10mg}5R`0}WoIZmM%FH?5mMkHRRdEks zuYZuf%(RZ}>149obc#8Byep?W&c#d~^eKm`rS^z6{mBN4 zPg@RqiiS!B*UTFu<3(c+#DjtfxV6i+@;-(2->c^hN|$Uofoys#vr=rpPTeu!fc9iEFHzrvHQFUSMGZP&*x*IPk4dBp-g6D= zHgZOm5t#}(#yYmQC6kWJC{&TzA)^37rqe~Wm@1)bcgd`2bsMQtHp||a;=teorejW{ zRSX?5-CEXO7lA>V4fCx1dU_1@PYJ3Hvh|FS*X^69y1e-9!j~cAxK-QXDP-7t%uL28 zObw{W+J&TNk6>Ax+u3Cmj+ogJR61{Wx8bC1vpBuebCn!1WaRV{5_8U#J!oSAq}_8n zx~$^3ZDz;L+m$csh4HB|e#Y^fm~SR40XVG-CNkpOvMIltLMfG7TAS$u9KiDI=F0)ZO$L^&=)Sso`BS%R7VL zF+66Kav6`wU+`W-PrD^OCsSMsqCv}XkC-Q*H}5k(jfHpSa@3^*4BDn+@wAqW4FX$- zoY9%)gG6RJW1@Ca!%4`=4JV0rngnj?7UKO-YJx1x`|k19RMsfePK%AnHWKVgX=g!( zm}+-ef?Y_Ns*k1!^kdI$-f4OZj%yDY$~r2&~&wAXTnOU0sPW6|}T zNE;s2@*acw@q)hr^cId-K=UcXmS`ov*LMw%>2^`t#dABuSm?ZwNUsq~@G$91Y~o&v z7oeF&rg)lJ_CNt7+btCqu4c&2uO^qVV~=u0e1}KsiOsxA&$u*12S z7ftZ>I=d{Jh7Fe=H8G|h+Xkg_B4Kl=XmFn6AyHw&X45fsvLIm7yu2O9iR&M6vk0sa zG=sUf&))^1Ng~a|6KVPI_gt*BYynwprk#qWl{MB|!2V_xhYkCfnKsVp_O=eguJ(He zk>j~Ji>1k@k%OF>E$yeLdF5=aW;-8fG6|?NjrpAs%gV91f~%Var@Hl9He!(1U1W*3 z_IpmaMuE4;s>(IK$993#P3t*t9nwKFlQmq2jKcbo6rR>y@&wXA>Lw&##Vs{Ls)2() z6UY$5#i5(*%@=cK+N=)nPeCY>=*ffZo7;;spOQ)2a7sCskl(!XP*35QXDT;qCs8v^fAzje&m%fA^^63E+y<*rfLNw}ElIbozrE)uayZ1qQwx5e|}#gXed ziftW-QSC~eHErdlShJPxcjZBbTDEf!zL(gPCyNR+PDvU>%f$NwxBJkS0%n8Wg=fy^ z+6{_DB`SiC+Hb^|KKc~JX61>2Qzw_wG)4wxh=!-e4A%5Gka0xLcOh9vFv5f`ENL4? zOi(LL64j+76<^*~jnHnqQFTg-SpIQf1CTtWHhpvrEjRKRUR9##q5;!QmS+yR9h>&?i{9e`7KcE;hx;RC=-m=vR4NntrIUX8fr z;+1IwwV7aCJ4r3Dd1&Ljk^8;;x zR;tk{20H&$UAcUh99wa644N9yhTCoI^vk*sQXLv*A(vqc5)G+K*7pL3hywUsX7PSl zobjohHM1fOZ|KX8eC2CheP8}+_Zj!Zbq`Q5CPX9_RvR_l8M%1jUVv(4l%%i#U zgrc&H#`5b8b)+M!!ylyrti}~8{g8=@BdIc>>?Clw;zB;w|F9KKNM}sX;yJ3E{ z%m1jrhiR0@#Hu|p@CI4EMnQ9MPE6JAbWqUHtVYeO%V&FmSa;4B3MxM+sC<7-p*T}k zwd$#<@x8)-mJ+ljRwJz?R`Eky0>*9JxHZwf^~z1{EwL^X8714eTGlrhQ%a#mxy~3L zv2HdBR~JfniKtvpICp)4aRoPj-r0yBAvdmI%GAZbt<+va!`;Kr{B!dgAI$y9&WG;S z#-F-z!)f+x_qM}a#ok~QjKej09v-$zcG^H+%_|_@FSyQfK%J#hJZzzMKT?p&?+sC|UNR-3z!2 zIA1RW|Mjf*EtOXgU*5Bl$k^uP+LT>B=$2duPzczN<5hB8J5_6OIq`D(!=f0RYv%9_5S zoPQkF;#U(CHI?hIlu((k8$Aw+87}Uo3OeSUtz!0OX6bB|S8AES$1$cA2b!qbasaYz zNT0I34JBM_^(ORQ4t}phWZnX#=4v!Pe>MN{HA|pyH{Ycz7A)rvpZ9Nbi^zLM kMzhT&Vp2?;Yz!<6j0_A6Y@4S`B!WbLO5O)iH>K5C0A%De&^lBB}LHw>!_4Q8Br{En?~B7LoUi ljHa7Q#H5%wSs7Ru7#SECST|3XNCb)gl)Mk3Zc3}O002}D9Wej^ diff --git a/1.4/Kijin/Assemblies/PrisonLaborKijinCompatibility.dll b/1.4/Kijin/Assemblies/PrisonLaborKijinCompatibility.dll index 96a9f169e2a5a5ac5c579f1f8c1db1a0d623ee65..5e8a32c61d923f06b2d77acd8da2fd903dc4fc41 100644 GIT binary patch delta 92 zcmZp$X|S2l!IBY>*0r(c7AMO;1$CdvSzIbCjEYZZZJxwc#3>M1bwXKb+eVkk+uj5{ t^)7YTEFyB9kOPatu&J;xDn6aH`3u_wR)MzaWf@XMLGCj@_sqDJ tY0k5G3XdHlquJ)myt|n=*%(+D7#SEC*fviW2nC706+8^0HVXSQ0RSMe9|`~f delta 91 zcmZqBY0#O_$?UZ3^2Qz;HkQ>2rs|W=u&DqUhh}g7!Zv|bKx0dGYpc^w$7RM}_Ab8P sq`!Fzj~yeU>E_G4yO}sy8CVz?85kH?H%}J`1&O{DJPe{X3i~qw06n!I^Z)<= diff --git a/1.4/Therapy/Assemblies/PrisonLaborTherapyCompatibility.dll b/1.4/Therapy/Assemblies/PrisonLaborTherapyCompatibility.dll index e9f4b4feb1389bab8b5beff5ffdb410ca968ab3c..3075d0f44ec53a41d0f61f689ea03b4b92d999f4 100644 GIT binary patch delta 92 zcmZpOXo#55!4iDA?d`@MBLS9w3hF+S4+*HSFe*NswfU96E>yhWaynbBc7<}Mrl7j>8( uP(QzUi##_oqv_@YO6Qn4Ss7Ru7#SECST|2si(~|fepEjWqIPP!GXVf-y&#$Z diff --git a/About/About.xml b/About/About.xml index 14b4e177..0284a2e0 100644 --- a/About/About.xml +++ b/About/About.xml @@ -35,7 +35,7 @@ - Version 1.4.5 + Version 1.4.6 This mod force prisoners to work. To enable this feature prisoners must have "Force to work" option checked ("Prisoner" tab). Prison labor needs management that consist: - Motivation - prisoners need to be motivated by presence of colonists. Wardens have new job - supervising prisoners. Low motivation can lead to revolts. diff --git a/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PrisonerInteractionModeDef.xml b/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PrisonerInteractionModeDef.xml index c2eb755f..2d6b02ac 100644 --- a/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PrisonerInteractionModeDef.xml +++ b/Languages/ChineseTraditional/DefInjected/PrisonerInteractionModeDef/PrisonerInteractionModeDef.xml @@ -3,12 +3,4 @@ 強迫工作 工作與招募 - - 工作與供血 - 強迫囚犯工作,血原需求者可無視囚犯心情直接對其進食。 - - 工作和血包 - 強迫囚犯工作,以不造成死亡為原則,抽取血液。 - - diff --git a/LoadFolders.xml b/LoadFolders.xml index 0391afd9..d52b0e89 100644 --- a/LoadFolders.xml +++ b/LoadFolders.xml @@ -29,5 +29,6 @@

  • 1.4/Kijin2
  • 1.4/Kijin
  • 1.4/Quarry
  • +
  • 1.4/ColonyGroups
  • \ No newline at end of file diff --git a/README.md b/README.md index aceed2d8..c2111af1 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

    - v1.4.5 + v1.4.6

    diff --git a/Source/CompatibilityProjects/ColonyGroupsCompatibility/ColonyGroupsCompatibility.csproj b/Source/CompatibilityProjects/ColonyGroupsCompatibility/ColonyGroupsCompatibility.csproj new file mode 100644 index 00000000..5154ce62 --- /dev/null +++ b/Source/CompatibilityProjects/ColonyGroupsCompatibility/ColonyGroupsCompatibility.csproj @@ -0,0 +1,76 @@ + + + + + Debug + AnyCPU + {A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD} + Library + Properties + ColonyGroupsCompatibility + PrisonLaborColonyGroupsCompatibility + v4.8 + 512 + true + + + + true + full + false + ..\..\..\1.4\ColonyGroups\Assemblies\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\Lib.Harmony.2.2.2\lib\net472\0Harmony.dll + False + + + ..\..\..\..\..\Gry\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\..\..\Gry\Steam\steamapps\workshop\content\294100\2345493945\1.4\Assemblies\CompatUtils.dll + False + + + + + + + + + + + ..\..\..\..\..\Gry\Steam\steamapps\workshop\content\294100\2345493945\1.4\Assemblies\TacticalGroups.dll + False + + + + + + + + + + {97750974-4cb6-4d31-84a1-a3aa77b1e2ee} + PrisonLabor + False + + + + + + + \ No newline at end of file diff --git a/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyInit.cs b/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyInit.cs new file mode 100644 index 00000000..59624694 --- /dev/null +++ b/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyInit.cs @@ -0,0 +1,29 @@ +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace ColonyGroupsCompatibility +{ + [StaticConstructorOnStartup] + public class HarmonyInit + { + static HarmonyInit() + { + var harmony = new Harmony("Harmony_PrisonLabor_ColonyGroups"); + try + { + harmony.PatchAll(Assembly.GetExecutingAssembly()); + Log.Message("[PL] ColonyGroups patched"); + } + catch (Exception e) + { + Log.Error($"[PL] Patches for ColonyGroups failed: {e}"); + } + } + } +} diff --git a/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyPatches/MarkGroupAssigment_Patch.cs b/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyPatches/MarkGroupAssigment_Patch.cs new file mode 100644 index 00000000..b8185c91 --- /dev/null +++ b/Source/CompatibilityProjects/ColonyGroupsCompatibility/HarmonyPatches/MarkGroupAssigment_Patch.cs @@ -0,0 +1,89 @@ +using HarmonyLib; +using RimWorld; +using PrisonLabor.Core.BillAssignation; +using PrisonLabor.HarmonyPatches.Patches_GUI.GUI_Bill; +using TacticalGroups; +using System.Collections.Generic; +using Verse; +using PrisonLabor.Core.Other; +using System.Reflection; +using System.Reflection.Emit; +using System.Linq; +using static Verse.Widgets; +using System; + +namespace ColonyGroupsCompatibility.HarmonyPatches +{ + [HarmonyPatch(typeof(Patch_RestrictBillToPrisoner))] + public class ReturnLabel_Patch + { + [HarmonyPostfix] + [HarmonyPatch("GetDropLabel")] + public static string PostfixGetDropLabel(string __result, Dialog_BillConfig dialog) + { + Bill_Production bill = Traverse.Create(dialog).Field("bill").GetValue(); + if (BillAssignationUtility.IsFor(bill) == GroupMode.ColonyGroups) + { + if (HarmonyPatches_GroupBills.BillsSelectedGroup.TryGetValue(bill, out PawnGroup group)) + { + string label = "TG.AnyPawnOfGroup".Translate(group.curGroupName); + return label; + } + } + return __result; + } + + } + [HarmonyPatch] + public class MarkGroupAssigment_Patch + { + static MethodBase TargetMethod() + { + return AccessTools.Method("TacticalGroups.HarmonyPatches_GroupBills:GeneratePawnRestrictionOptions"); + } + public static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase, IEnumerable inst) + { + int bill = -1; + var codes = new List(inst); + for (int i = 0; i < codes.Count(); i++) + { + yield return codes[i]; + if (ShouldCopy(codes[i])) + { + bill = i; + } + if (ShouldPatch(codes[i]) && bill > -1) + { + DebugLogger.debug($"Changing delegate: {mBase.ReflectedType.Assembly.GetName().Name}.{mBase.ReflectedType.Name}.{mBase.Name}"); + yield return new CodeInstruction(OpCodes.Ldloc_3, null); + //ldfld | TacticalGroups.HarmonyPatches_GroupBills+<>c__DisplayClass6_0 CS$<>8__locals1 | no labels + yield return codes[bill - 1]; + //ldfld | RimWorld.Bill_Production ___bill | no labels + yield return codes[bill]; + //ldloc.s | Verse.Widgets+DropdownMenuElement`1[Verse.Pawn] (8) | no labels + yield return codes[i - 1]; + yield return new CodeInstruction(OpCodes.Call, typeof(MarkGroupAssigment_Patch).GetMethod(nameof(MarkGroupAssigment_Patch.UpdateAction))); + } + } + } + + private static bool ShouldPatch(CodeInstruction actual) + { + return actual.opcode == OpCodes.Callvirt && actual.operand != null && actual.operand.ToString().Contains("Void Insert(Int32, DropdownMenuElement`1)"); + } + + private static bool ShouldCopy(CodeInstruction actual) + { + return actual.opcode == OpCodes.Ldfld && actual.operand != null && actual.operand.ToString().Contains("RimWorld.Bill_Production ___bill"); + } + public static void UpdateAction(Bill_Production bill, DropdownMenuElement element) + { + Action notify = delegate + { + BillAssignationUtility.SetFor(bill, GroupMode.ColonyGroups); + DebugLogger.debug($"For {bill.Label} set {GroupMode.ColonyGroups}"); + }; + element.option.action += notify; + } + } +} diff --git a/Source/CompatibilityProjects/ColonyGroupsCompatibility/Properties/AssemblyInfo.cs b/Source/CompatibilityProjects/ColonyGroupsCompatibility/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..40ae7d88 --- /dev/null +++ b/Source/CompatibilityProjects/ColonyGroupsCompatibility/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ColonyGroupsCompatibility")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ColonyGroupsCompatibility")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a77ae1eb-ba5d-4b3a-9d9b-a9580850faad")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/CompatibilityProjects/ColonyGroupsCompatibility/packages.config b/Source/CompatibilityProjects/ColonyGroupsCompatibility/packages.config new file mode 100644 index 00000000..6bf55ad6 --- /dev/null +++ b/Source/CompatibilityProjects/ColonyGroupsCompatibility/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Source/Core/BillAssignation/BillAssignationUtility.cs b/Source/Core/BillAssignation/BillAssignationUtility.cs index 84d72b74..bc9ae2c5 100644 --- a/Source/Core/BillAssignation/BillAssignationUtility.cs +++ b/Source/Core/BillAssignation/BillAssignationUtility.cs @@ -3,34 +3,48 @@ namespace PrisonLabor.Core.BillAssignation { - public class BillAssignationUtility + public class BillAssignationUtility + { + private static readonly Dictionary Map = new Dictionary(); + + public static GroupMode IsFor(Bill key) { - private static readonly Dictionary Map = new Dictionary(); + if (!Map.ContainsKey(key)) + { + Map[key] = new BillGroupData(); + SetMechanitorIfNeeded(key); + } + return Map[key].Mode; + } - public static GroupMode IsFor(Bill key) - { - if (!Map.ContainsKey(key)) - Map[key] = new BillGroupData(); - return Map[key].Mode; - } + public static void SetFor(Bill key, GroupMode value) + { + if (!Map.ContainsKey(key)) + Map[key] = new BillGroupData(); + Map[key].Mode = value; + } - public static void SetFor(Bill key, GroupMode value) - { - if (!Map.ContainsKey(key)) - Map[key] = new BillGroupData(); - Map[key].Mode = value; - } + public static BillGroupData GetData(Bill key) + { + if (!Map.ContainsKey(key)) + { + Map[key] = new BillGroupData(); + SetMechanitorIfNeeded(key); + } + return Map[key]; + } - public static BillGroupData GetData(Bill key) - { - if (!Map.ContainsKey(key)) - Map[key] = new BillGroupData(); - return Map[key]; - } + private static void SetMechanitorIfNeeded(Bill key) + { + if (key.recipe.mechanitorOnlyRecipe) + { + Map[key].Mode = GroupMode.MechanitorOnly; + } + } - public static void Remove(Bill bill) - { - Map.Remove(bill); - } + public static void Remove(Bill bill) + { + Map.Remove(bill); } + } } \ No newline at end of file diff --git a/Source/Core/BillAssignation/BillGroupData.cs b/Source/Core/BillAssignation/BillGroupData.cs index d9d35ae3..c37ee452 100644 --- a/Source/Core/BillAssignation/BillGroupData.cs +++ b/Source/Core/BillAssignation/BillGroupData.cs @@ -8,7 +8,11 @@ public enum GroupMode PrisonersOnly, ColonistsOnly, SlavesOnly, - CaptiveOnly + HumansOnly, + MechsOnly, + MechanitorOnly, + CaptiveOnly, + ColonyGroups } public class BillGroupData : IExposable diff --git a/Source/Core/GameSaves/SaveCleaner.cs b/Source/Core/GameSaves/SaveCleaner.cs index 9936063c..0fd3d304 100644 --- a/Source/Core/GameSaves/SaveCleaner.cs +++ b/Source/Core/GameSaves/SaveCleaner.cs @@ -11,263 +11,259 @@ namespace PrisonLabor.Core.GameSaves { - public static class SaveCleaner + public static class SaveCleaner + { + public static void BackupSavegame(string fileName) { - public static void BackupSavegame(string fileName) - { - string savegamePath = GenFilePaths.FilePathForSavedGame(fileName); - string backupPath = GetFilePathForBackup(savegamePath); - - File.Copy(savegamePath, backupPath, false); - Log.Message($"Save copied to \"{backupPath}\""); - } + string savegamePath = GenFilePaths.FilePathForSavedGame(fileName); + string backupPath = GetFilePathForBackup(fileName); - public static void RemoveFromSave(string fileName) - { - LongEventHandler.QueueLongEvent( - () => UpdateFile(fileName), - "Removing", - false, - (e) => OnError(e) - ); - } + File.Copy(savegamePath, backupPath, false); + Log.Message($"Save copied to \"{backupPath}\""); + } - private static void UpdateFile(string fileName) - { - string filePath = GenFilePaths.FilePathForSavedGame(fileName); + public static void RemoveFromSave(string fileName) + { + LongEventHandler.QueueLongEvent( + () => UpdateFile(fileName), + "Removing", + false, + (e) => OnError(e) + ); + } - XmlElement xmlNode; - using (StreamReader streamReader = new StreamReader(filePath)) - { - using (XmlTextReader xmlTextReader = new XmlTextReader(streamReader)) - { - var XmlDocument = new XmlDocument(); - XmlDocument.Load(xmlTextReader); - xmlNode = XmlDocument.DocumentElement; - } - } + private static void UpdateFile(string fileName) + { + string filePath = GenFilePaths.FilePathForSavedGame(fileName); - UpdateData(xmlNode); + XmlElement xmlNode; + using (StreamReader streamReader = new StreamReader(filePath)) + { + using (XmlTextReader xmlTextReader = new XmlTextReader(streamReader)) + { + var XmlDocument = new XmlDocument(); + XmlDocument.Load(xmlTextReader); + xmlNode = XmlDocument.DocumentElement; + } + } - using (FileStream saveStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) - { - var xmlWriterSettings = new XmlWriterSettings(); - xmlWriterSettings.Indent = true; - xmlWriterSettings.IndentChars = "\t"; - using (XmlWriter writer = XmlWriter.Create(saveStream, xmlWriterSettings)) - { - writer.WriteStartDocument(); - writer.WriteNode(xmlNode.CreateNavigator(), false); - } - } + UpdateData(xmlNode); - Log.Message($"Save'{fileName}' converted successfuly"); + using (FileStream saveStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) + { + var xmlWriterSettings = new XmlWriterSettings(); + xmlWriterSettings.Indent = true; + xmlWriterSettings.IndentChars = "\t"; + using (XmlWriter writer = XmlWriter.Create(saveStream, xmlWriterSettings)) + { + writer.WriteStartDocument(); + writer.WriteNode(xmlNode.CreateNavigator(), false); } + } - private static void UpdateData(XmlElement xmlNode) - { - List removalBuffer = new List(); - XmlNode curNode = xmlNode; + Log.Message($"Save'{fileName}' converted successfuly"); + } - #region Meta - var metaNode = xmlNode["meta"]; + private static void UpdateData(XmlElement xmlNode) + { + List removalBuffer = new List(); + XmlNode curNode = xmlNode; - // Meta.ModIds & Meta.ModNames - XmlNode modIdsNode = metaNode["modIds"], modNamesNode = metaNode["modNames"]; - for (int i = 0; i < modIdsNode.ChildNodes.Count; i++) - { - var modNode = modIdsNode.ChildNodes[i]; - - if (modNode.InnerText == "972057888" || modNode.InnerText == "PrisonLabor") - { - modIdsNode.RemoveChild(modIdsNode.ChildNodes[i]); - modNamesNode.RemoveChild(modNamesNode.ChildNodes[i]); - break; - } - } + #region Meta + var metaNode = xmlNode["meta"]; - // Remove version of PL - var plVersionInfo = metaNode["PrisonLaborVersion"]; - if (plVersionInfo != null) - metaNode.RemoveChild(plVersionInfo); - #endregion + // Meta.ModIds & Meta.ModNames + XmlNode modIdsNode = metaNode["modIds"], modNamesNode = metaNode["modNames"]; + for (int i = 0; i < modIdsNode.ChildNodes.Count; i++) + { + var modNode = modIdsNode.ChildNodes[i]; - #region Game - var gameNode = xmlNode["game"]; + if (modNode.InnerText == "972057888" || modNode.InnerText == "PrisonLabor") + { + modIdsNode.RemoveChild(modIdsNode.ChildNodes[i]); + modNamesNode.RemoveChild(modNamesNode.ChildNodes[i]); + break; + } + } + + // Remove version of PL + var plVersionInfo = metaNode["PrisonLaborVersion"]; + if (plVersionInfo != null) + metaNode.RemoveChild(plVersionInfo); + #endregion + + #region Game + var gameNode = xmlNode["game"]; + + // Game.Tutor + string[] conceptDefs = { "PrisonLabor_Indroduction", "PrisonLabor_Motivation", "PrisonLabor_Growing", "PrisonLabor_Management", "PrisonLabor_Timetable" }; + + var tutorNode = gameNode["tutor"]; + //var activeLessonsNode = tutorNode["activeLesson"]; + var learningReadoutNode = tutorNode["learningReadout"]; + if (learningReadoutNode["activeConcepts"].HasChildNodes) + { + removalBuffer.Clear(); + foreach (XmlNode concept in learningReadoutNode["activeConcepts"].ChildNodes) + { + foreach (string conceptDef in conceptDefs) + { + if (concept.InnerText == conceptDef) + removalBuffer.Add(concept); + } + } + foreach (var concept in removalBuffer) + learningReadoutNode["activeConcepts"].RemoveChild(concept); + } + if (learningReadoutNode["selectedConcept"] != null) + { + removalBuffer.Clear(); + foreach (string conceptDef in conceptDefs) + { + if (learningReadoutNode["selectedConcept"].InnerText == conceptDef) + learningReadoutNode.RemoveChild(learningReadoutNode["selectedConcept"]); + } + } + //var tutorialStateNode = tutorNode["tutorialState"]; - // Game.Tutor - string[] conceptDefs = { "PrisonLabor_Indroduction", "PrisonLabor_Motivation", "PrisonLabor_Growing", "PrisonLabor_Management", "PrisonLabor_Timetable" }; + // Game.Maps + foreach (XmlNode mapNode in gameNode["maps"].ChildNodes) + { + // Game.Maps.AreaManager + var areaManagerNode = mapNode["areaManager"]; - var tutorNode = gameNode["tutor"]; - //var activeLessonsNode = tutorNode["activeLesson"]; - var learningReadoutNode = tutorNode["learningReadout"]; - if (learningReadoutNode["activeConcepts"].HasChildNodes) - { - removalBuffer.Clear(); - foreach (XmlNode concept in learningReadoutNode["activeConcepts"].ChildNodes) - { - foreach (string conceptDef in conceptDefs) - { - if (concept.InnerText == conceptDef) - removalBuffer.Add(concept); - } - } - foreach (var concept in removalBuffer) - learningReadoutNode["activeConcepts"].RemoveChild(concept); - } - if (learningReadoutNode["selectedConcept"] != null) + if (areaManagerNode["areas"] != null && areaManagerNode["areas"].HasChildNodes) + { + removalBuffer.Clear(); + foreach (XmlNode areaNode in areaManagerNode["areas"].ChildNodes) + { + if (areaNode.Attributes["Class"].Value == typeof(Area_Labor).FullName) { - removalBuffer.Clear(); - foreach (string conceptDef in conceptDefs) - { - if (learningReadoutNode["selectedConcept"].InnerText == conceptDef) - learningReadoutNode.RemoveChild(learningReadoutNode["selectedConcept"]); - } + removalBuffer.Add(areaNode); } - //var tutorialStateNode = tutorNode["tutorialState"]; + } + foreach (var node in removalBuffer) + areaManagerNode["areas"].RemoveChild(node); + } - // Game.Maps - foreach (XmlNode mapNode in gameNode["maps"].ChildNodes) - { - // Game.Maps.AreaManager - var areaManagerNode = mapNode["areaManager"]; - - if (areaManagerNode["areas"] != null && areaManagerNode["areas"].HasChildNodes) - { - removalBuffer.Clear(); - foreach (XmlNode areaNode in areaManagerNode["areas"].ChildNodes) - { - if (areaNode.Attributes["Class"].Value == typeof(Area_Labor).FullName) - { - removalBuffer.Add(areaNode); - } - } - foreach (var node in removalBuffer) - areaManagerNode["areas"].RemoveChild(node); - } - - //Game.Maps.Components - var components = mapNode["components"]; - removalBuffer.Clear(); - foreach (XmlNode component in components) - { - if (component.Attributes["Class"].Value == "PrisonLabor.Core.GUI_Components.PawnIcons") - { - removalBuffer.Add(component); - } - - if (component.Attributes["Class"].Value == "PrisonLabor.Core.Trackers.CuffsTracker") - { - removalBuffer.Add(component); - } - } - foreach (var item in removalBuffer) - components.RemoveChild(item); - } + //Game.Maps.Components + var components = mapNode["components"]; + removalBuffer.Clear(); + foreach (XmlNode component in components) + { + if (component.Attributes["Class"].Value == "PrisonLabor.Core.GUI_Components.PawnIcons") + { + removalBuffer.Add(component); + } + + if (component.Attributes["Class"].Value == "PrisonLabor.Core.Trackers.CuffsTracker") + { + removalBuffer.Add(component); + } + } + foreach (var item in removalBuffer) + components.RemoveChild(item); + } - // TODO bills + // TODO bills - // Interaction Mode - string[] interactions = { PL_DefOf.PrisonLabor_workOption.defName, PL_DefOf.PrisonLabor_workAndRecruitOption.defName, PL_DefOf.PrisonLabor_workAndConvertOption.defName, PL_DefOf.PrisonLabor_workAndEnslaveOption.defName }; + // Interaction Mode + string[] interactions = { PL_DefOf.PrisonLabor_workOption.defName, PL_DefOf.PrisonLabor_workAndRecruitOption.defName, PL_DefOf.PrisonLabor_workAndConvertOption.defName, PL_DefOf.PrisonLabor_workAndEnslaveOption.defName }; - foreach (var guestTracker in gameNode.GetEveryNode("guest")) - { - var interactionMode = guestTracker["interactionMode"]; - if (interactionMode != null) - { - foreach (string interaction in interactions) - { - if (interactionMode.InnerText == interaction) - interactionMode.InnerText = PrisonerInteractionModeDefOf.NoInteraction.defName; - } - } - } + foreach (var guestTracker in gameNode.GetEveryNode("guest")) + { + var interactionMode = guestTracker["interactionMode"]; + if (interactionMode != null) + { + foreach (string interaction in interactions) + { + if (interactionMode.InnerText == interaction) + interactionMode.InnerText = PrisonerInteractionModeDefOf.NoInteraction.defName; + } + } + } - // Remove Heddifs - foreach (var needTracker in gameNode.GetEveryNode("needs")) - { - var needs = needTracker["needs"]; - if (needs != null) - { - - if (needs != null && needs.HasChildNodes) - { - removalBuffer.Clear(); - foreach (XmlNode need in needs.ChildNodes) - { - if (need.Attributes["Class"].Value == typeof(Need_Motivation).FullName) - removalBuffer.Add(need); - else if (need.Attributes["Class"].Value == typeof(Need_Treatment).FullName) - removalBuffer.Add(need); - } - foreach (var node in removalBuffer) - needs.RemoveChild(node); - } - } - } + // Remove Heddifs + foreach (var needTracker in gameNode.GetEveryNode("needs")) + { + var needs = needTracker["needs"]; + if (needs != null) + { - // Remove Heddifs - foreach (var hediffSet in gameNode.GetEveryNode("hediffSet")) + if (needs != null && needs.HasChildNodes) + { + removalBuffer.Clear(); + foreach (XmlNode need in needs.ChildNodes) { - var hediffs = hediffSet["hediffs"]; - - if (hediffs != null && hediffs.HasChildNodes) - { - removalBuffer.Clear(); - foreach (XmlNode hediff in hediffs.ChildNodes) - { - if (hediff["def"].InnerText == "PrisonLabor_PrisonerChains") - { - removalBuffer.Add(hediff); - } - } - foreach (var node in removalBuffer) - hediffs.RemoveChild(node); - } + if (need.Attributes["Class"].Value == typeof(Need_Motivation).FullName) + removalBuffer.Add(need); + else if (need.Attributes["Class"].Value == typeof(Need_Treatment).FullName) + removalBuffer.Add(need); } - #endregion + foreach (var node in removalBuffer) + needs.RemoveChild(node); + } } + } + + // Remove Heddifs + foreach (var hediffSet in gameNode.GetEveryNode("hediffSet")) + { + var hediffs = hediffSet["hediffs"]; - private static IEnumerable GetEveryNode(this XmlNode rootElement, string nodeName) + if (hediffs != null && hediffs.HasChildNodes) { - foreach (XmlNode node in rootElement.ChildNodes) + removalBuffer.Clear(); + foreach (XmlNode hediff in hediffs.ChildNodes) + { + if (hediff["def"].InnerText == "PrisonLabor_PrisonerChains") { - if (node.Name.Equals(nodeName)) - yield return node; - if (node.HasChildNodes) - { - foreach (XmlNode childNode in node.GetEveryNode(nodeName)) - yield return childNode; - } + removalBuffer.Add(hediff); } + } + foreach (var node in removalBuffer) + hediffs.RemoveChild(node); } + } + #endregion + } - private static void OnError(Exception e) + private static IEnumerable GetEveryNode(this XmlNode rootElement, string nodeName) + { + foreach (XmlNode node in rootElement.ChildNodes) + { + if (node.Name.Equals(nodeName)) + yield return node; + if (node.HasChildNodes) { - Log.Error(e.ToString()); + foreach (XmlNode childNode in node.GetEveryNode(nodeName)) + yield return childNode; } + } + } - private static string GetFilePathForBackup(string filePath) - { - string originFilePathWithoutExtension = Path.GetDirectoryName(filePath) + @"\" + Path.GetFileNameWithoutExtension(filePath); - - string backupFileCoreString = originFilePathWithoutExtension + "_Backup"; + private static void OnError(Exception e) + { + Log.Error(e.ToString()); + } - string backupFilePathFinal = backupFileCoreString + ".rws"; + private static string GetFilePathForBackup(string fileName) + { + string backupFile = GenFilePaths.FilePathForSavedGame(fileName + "_Backup"); - if (!File.Exists(backupFilePathFinal)) - return backupFilePathFinal; + if (!File.Exists(backupFile)) + return backupFile; - for (int i = 1; i < int.MaxValue; i++) - { - backupFilePathFinal = backupFileCoreString + i.ToString() + ".rws"; + for (int i = 1; i < int.MaxValue; i++) + { + backupFile = GenFilePaths.FilePathForSavedGame(fileName + "_Backup" + i); - if (!File.Exists(backupFilePathFinal)) - return backupFilePathFinal; - } + if (!File.Exists(backupFile)) + return backupFile; + } - throw new IndexOutOfRangeException(); - } + throw new IndexOutOfRangeException(); } + } } diff --git a/Source/Core/Meta/Version.cs b/Source/Core/Meta/Version.cs index 6a5f75f4..ac4e8b1b 100644 --- a/Source/Core/Meta/Version.cs +++ b/Source/Core/Meta/Version.cs @@ -85,6 +85,7 @@ public enum Version v1_4_2, v1_4_3, v1_4_4, - v1_4_5 + v1_4_5, + v1_4_6 } } diff --git a/Source/Core/Meta/VersionUtility.cs b/Source/Core/Meta/VersionUtility.cs index 69f02478..b5cda287 100644 --- a/Source/Core/Meta/VersionUtility.cs +++ b/Source/Core/Meta/VersionUtility.cs @@ -5,8 +5,8 @@ namespace PrisonLabor.Core.Meta { public class VersionUtility { - public const Version versionNumber = Version.v1_4_5; - public const string versionString = "1.4.5"; + public const Version versionNumber = Version.v1_4_6; + public const string versionString = "1.4.6"; public static Version VersionOfSaveFile { get; set; } diff --git a/Source/Core/Other/CustomForbidenUtil.cs b/Source/Core/Other/CustomForbidenUtil.cs index dc170536..a0e55e5a 100644 --- a/Source/Core/Other/CustomForbidenUtil.cs +++ b/Source/Core/Other/CustomForbidenUtil.cs @@ -10,74 +10,80 @@ namespace PrisonLabor.Core.Other { - public static class CustomForbidenUtil + public static class CustomForbidenUtil + { + public static bool PrisonerCaresAboutForbidden(Pawn pawn, bool cellTarget) { - public static bool PrisonerCaresAboutForbidden(Pawn pawn, bool cellTarget) - { - if (!pawn.Spawned || !pawn.IsPrisonerOfColony && pawn.timetable.CurrentAssignment != TimeAssignmentDefOf.Work) - { - return false; - } - if (pawn.InMentalState) - { - return false; - } - if (cellTarget && ThinkNode_ConditionalShouldFollowMaster.ShouldFollowMaster(pawn)) - { - return false; - } - return true; - } + if (!pawn.Spawned || !pawn.IsPrisonerOfColony && pawn.timetable.CurrentAssignment != TimeAssignmentDefOf.Work) + { + return false; + } + if (pawn.InMentalState) + { + return false; + } + if (cellTarget && ThinkNode_ConditionalShouldFollowMaster.ShouldFollowMaster(pawn)) + { + return false; + } + return true; + } - public static bool IsFoodForbiden(this Thing t, Pawn pawn) - { - if (pawn.IsPrisonerOfColony) - { - DebugLogger.debug($"[PL] Pawn {pawn.LabelShort} checking null object"); - } - return t != null && PrisonerFoodReservation.IsReserved(t) && !pawn.IsPrisoner; - } + public static bool IsFoodForbiden(this Thing t, Pawn pawn) + { + if (pawn.IsPrisonerOfColony) + { + DebugLogger.debug($"[PL] Pawn {pawn.LabelShort} checking null object"); + } + return t != null && PrisonerFoodReservation.IsReserved(t) && !pawn.IsPrisoner; + } - public static bool IsForbiddenForPrisoner(this Thing t, Pawn pawn) - { + public static bool IsForbiddenForPrisoner(this Thing t, Pawn pawn) + { + if ((t is Frame || t is Blueprint) && ForbidUtility.IsForbidden(t, Faction.OfPlayer)) + { + //Should prevent delivering resources for frames by prisoners when forbidden. + //Simpified solution, not worth to overthing about that. + return true; + } - if (pawn.IsWatched() && ForbidUtility.IsForbidden(t, Faction.OfPlayer)) - { - return true; - } - if (!PrisonerCaresAboutForbidden(pawn, cellTarget: false)) - { - return false; - } - if (t != null && t.Spawned && t.Position.IsForbiddenForPrisoner(pawn)) - { - return true; - } - Lord lord = pawn.GetLord(); - if (lord != null && lord.extraForbiddenThings.Contains(t)) - { - return true; - } - return false; - } + if (pawn.IsWatched() && ForbidUtility.IsForbidden(t, Faction.OfPlayer)) + { + return true; + } + if (!PrisonerCaresAboutForbidden(pawn, cellTarget: false)) + { + return false; + } + if (t != null && t.Spawned && t.Position.IsForbiddenForPrisoner(pawn)) + { + return true; + } + Lord lord = pawn.GetLord(); + if (lord != null && lord.extraForbiddenThings.Contains(t)) + { + return true; + } + return false; + } - public static bool IsForbiddenForPrisoner(this IntVec3 c, Pawn pawn) - { - if (!PrisonerCaresAboutForbidden(pawn, cellTarget: true)) - { - return false; - } - if (!c.InAllowedArea(pawn)) - { - return true; - } - if (pawn.mindState.maxDistToSquadFlag > 0f && !c.InHorDistOf(pawn.DutyLocation(), pawn.mindState.maxDistToSquadFlag)) - { - return true; - } - return false; - } + public static bool IsForbiddenForPrisoner(this IntVec3 c, Pawn pawn) + { + if (!PrisonerCaresAboutForbidden(pawn, cellTarget: true)) + { + return false; + } + if (!c.InAllowedArea(pawn)) + { + return true; + } + if (pawn.mindState.maxDistToSquadFlag > 0f && !c.InHorDistOf(pawn.DutyLocation(), pawn.mindState.maxDistToSquadFlag)) + { + return true; + } + return false; } + } } diff --git a/Source/HarmonyPatches/Patches_BillAssignation/Bill_StartAnew_Patch.cs b/Source/HarmonyPatches/Patches_BillAssignation/Bill_StartAnew_Patch.cs index ea315098..0b5b2154 100644 --- a/Source/HarmonyPatches/Patches_BillAssignation/Bill_StartAnew_Patch.cs +++ b/Source/HarmonyPatches/Patches_BillAssignation/Bill_StartAnew_Patch.cs @@ -1,5 +1,6 @@ using HarmonyLib; using PrisonLabor.Core.BillAssignation; +using PrisonLabor.Core.Other; using RimWorld; using System; using System.Collections.Generic; @@ -11,56 +12,61 @@ namespace PrisonLabor.HarmonyPatches.Patches_BillAssignation { - [HarmonyPatch(typeof(Bill))] - [HarmonyPatch("PawnAllowedToStartAnew")] - public class Bill_StartAnew_Patch + [HarmonyPatch(typeof(Bill))] + [HarmonyPatch("PawnAllowedToStartAnew")] + public class Bill_StartAnew_Patch + { + static bool Postfix(bool __result, Bill __instance, Pawn p) { - static bool Postfix(bool __result, Bill __instance, Pawn p) - { - if (__result == false && __instance.PawnRestriction == null) - { - GroupMode group = BillAssignationUtility.IsFor(__instance); + if (__result == false && __instance.PawnRestriction == null) + { + GroupMode group = BillAssignationUtility.IsFor(__instance); - if (group == GroupMode.ColonyOnly && __instance.SlavesOnly && p.IsSlave) - { - return true; - } - if (group == GroupMode.SlavesOnly && __instance.SlavesOnly && p.IsSlave) - { - return true; - } + if (group == GroupMode.ColonyGroups) + { + DebugLogger.debug($"Skiping checking for {__instance.Label}. Pawn: {p.NameShortColored}"); + return __result; + } - if (group == GroupMode.CaptiveOnly && __instance.SlavesOnly && p.IsSlave) - { - return true; - } - if (__instance.recipe.workSkill != null && (p.skills != null || p.IsColonyMech)) - { - int level = (p.skills != null) ? p.skills.GetSkill(__instance.recipe.workSkill).Level : p.RaceProps.mechFixedSkillLevel; - if (level < __instance.allowedSkillRange.min) - { - JobFailReason.Is("UnderAllowedSkill".Translate(__instance.allowedSkillRange.min), __instance.Label); - return false; - } - if (level > __instance.allowedSkillRange.max) - { - JobFailReason.Is("AboveAllowedSkill".Translate(__instance.allowedSkillRange.max), __instance.Label); - return false; - } + if (group == GroupMode.ColonyOnly && __instance.SlavesOnly && p.IsSlave) + { + return true; + } + if (group == GroupMode.SlavesOnly && __instance.SlavesOnly && p.IsSlave) + { + return true; + } - } - if (ModsConfig.BiotechActive && __instance.recipe.mechanitorOnlyRecipe && !MechanitorUtility.IsMechanitor(p)) - { - JobFailReason.Is("NotAMechanitor".Translate()); - return false; - } - if (group == GroupMode.ColonyOnly || (group == GroupMode.CaptiveOnly && p.IsPrisoner)) - { - return true; - } + if (group == GroupMode.CaptiveOnly && __instance.SlavesOnly && p.IsSlave) + { + return true; + } + if (__instance.recipe.workSkill != null && (p.skills != null || p.IsColonyMech)) + { + int level = (p.skills != null) ? p.skills.GetSkill(__instance.recipe.workSkill).Level : p.RaceProps.mechFixedSkillLevel; + if (level < __instance.allowedSkillRange.min) + { + JobFailReason.Is("UnderAllowedSkill".Translate(__instance.allowedSkillRange.min), __instance.Label); + return false; + } + if (level > __instance.allowedSkillRange.max) + { + JobFailReason.Is("AboveAllowedSkill".Translate(__instance.allowedSkillRange.max), __instance.Label); + return false; + } - } - return __result; } + if (group == GroupMode.MechanitorOnly) + { + return MechanitorUtility.IsMechanitor(p); + } + if (group == GroupMode.ColonyOnly || (group == GroupMode.CaptiveOnly && p.IsPrisoner)) + { + return true; + } + + } + return __result; } + } } diff --git a/Source/HarmonyPatches/Patches_BillAssignation/Patch_BillPrevention.cs b/Source/HarmonyPatches/Patches_BillAssignation/Patch_BillPrevention.cs index bff73f4f..42372a04 100644 --- a/Source/HarmonyPatches/Patches_BillAssignation/Patch_BillPrevention.cs +++ b/Source/HarmonyPatches/Patches_BillAssignation/Patch_BillPrevention.cs @@ -7,33 +7,34 @@ using System; using System.IO; using PrisonLabor.Core.BillAssignation; +using Verse.AI; namespace PrisonLabor.HarmonyPatches.Patches_BillAssignation { - [HarmonyPatch(typeof(WorkGiver_DoBill))] - [HarmonyPatch("StartOrResumeBillJob")] - [HarmonyPatch(new[] { typeof(Pawn), typeof(IBillGiver) })] - internal class Patch_BillPrevention + [HarmonyPatch(typeof(WorkGiver_DoBill))] + [HarmonyPatch("StartOrResumeBillJob")] + [HarmonyPatch(new[] { typeof(Pawn), typeof(IBillGiver) })] + internal class Patch_BillPrevention + { + private static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase, + IEnumerable instr) { - private static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase, - IEnumerable instr) - { - OpCode[] opCodes = - { + OpCode[] opCodes = + { OpCodes.Ldfld, OpCodes.Ldfld, OpCodes.Bne_Un }; - String[] operands = - { + String[] operands = + { "RimWorld.WorkGiverDef def", "Verse.WorkTypeDef workType", "System.Reflection.Emit.Label" }; - var label = (Label)HPatcher.FindOperandAfter(opCodes, operands, instr); + var label = (Label)HPatcher.FindOperandAfter(opCodes, operands, instr); - OpCode[] opCodes2 = - { + OpCode[] opCodes2 = + { OpCodes.Ldc_I4_0, OpCodes.Stloc_1, OpCodes.Br, @@ -43,8 +44,8 @@ private static IEnumerable Transpiler(ILGenerator gen, MethodBa OpCodes.Callvirt, OpCodes.Stloc_2, }; - String[] operands2 = - { + String[] operands2 = + { "", "", "System.Reflection.Emit.Label", @@ -54,45 +55,62 @@ private static IEnumerable Transpiler(ILGenerator gen, MethodBa "RimWorld.Bill get_Item(Int32)", "", }; - var step = 0; - foreach (var ci in instr) - { - yield return ci; - if (HPatcher.IsFragment(opCodes2, operands2, ci, ref step, "Patch_BillPrevention")) - { - yield return new CodeInstruction(OpCodes.Ldarg_1); - yield return new CodeInstruction(OpCodes.Ldloc_2); - yield return new CodeInstruction(OpCodes.Call, typeof(Patch_BillPrevention).GetMethod(nameof(IsForCertainGroup))); - yield return new CodeInstruction(OpCodes.Brfalse, label); - } - } + var step = 0; + foreach (var ci in instr) + { + yield return ci; + if (HPatcher.IsFragment(opCodes2, operands2, ci, ref step, "Patch_BillPrevention")) + { + yield return new CodeInstruction(OpCodes.Ldarg_1); + yield return new CodeInstruction(OpCodes.Ldloc_2); + yield return new CodeInstruction(OpCodes.Call, typeof(Patch_BillPrevention).GetMethod(nameof(IsForCertainGroup))); + yield return new CodeInstruction(OpCodes.Brfalse, label); } + } + } - public static bool IsForCertainGroup(Pawn pawn, Bill bill) - { - var group = BillAssignationUtility.IsFor(bill); - if (group == GroupMode.ColonyOnly) - { - return true; - } - if (group == GroupMode.ColonistsOnly && !pawn.IsPrisoner && !pawn.IsSlave) - { - return true; - } - if (group == GroupMode.PrisonersOnly && pawn.IsPrisoner) - { - return true; - } - if(group == GroupMode.SlavesOnly && bill.SlavesOnly && pawn.IsSlave) - { - return true; - } + public static bool IsForCertainGroup(Pawn pawn, Bill bill) + { + var group = BillAssignationUtility.IsFor(bill); - if(group == GroupMode.CaptiveOnly && (pawn.IsPrisoner || (bill.SlavesOnly && pawn.IsSlave))) - { - return true; - } - return false; - } + if (group == GroupMode.ColonyOnly) + { + return true; + } + if (group == GroupMode.ColonistsOnly && !pawn.IsPrisoner && !pawn.IsSlave) + { + return true; + } + if (group == GroupMode.PrisonersOnly && pawn.IsPrisoner) + { + return true; + } + if (group == GroupMode.SlavesOnly && bill.SlavesOnly && pawn.IsSlave) + { + return true; + } + + if (group == GroupMode.CaptiveOnly && (pawn.IsPrisoner || (bill.SlavesOnly && pawn.IsSlave))) + { + return true; + } + if (group == GroupMode.ColonyGroups) + { + return true; + } + if (group == GroupMode.MechanitorOnly && MechanitorUtility.IsMechanitor(pawn)) + { + return true; + } + if (group == GroupMode.MechsOnly && pawn.IsColonyMechPlayerControlled) + { + return true; + } + if (group == GroupMode.HumansOnly && !pawn.IsColonyMech) + { + return true; + } + return false; } + } } \ No newline at end of file diff --git a/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_Bill_Assigment.cs b/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_Bill_Assigment.cs index 2e9c03fc..6067cf85 100644 --- a/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_Bill_Assigment.cs +++ b/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_Bill_Assigment.cs @@ -9,21 +9,43 @@ namespace PrisonLabor.HarmonyPatches.Patches_GUI.GUI_Bill { - [HarmonyPatch(typeof(Bill))] - public class Patch_Bill_Assigment + [HarmonyPatch(typeof(Bill))] + public class Patch_Bill_Assigment + { + [HarmonyPostfix] + [HarmonyPatch("SetAnyPawnRestriction")] + static void ColonistPostFix(Bill __instance) { - [HarmonyPostfix] - [HarmonyPatch("SetAnyPawnRestriction")] - static void ColonistPostFix(Bill __instance) - { - BillAssignationUtility.SetFor(__instance, GroupMode.ColonistsOnly); - } + if (__instance.recipe.mechanitorOnlyRecipe) + { + BillAssignationUtility.SetFor(__instance, GroupMode.MechanitorOnly); + } + else + { + BillAssignationUtility.SetFor(__instance, GroupMode.ColonistsOnly); + } + } + + [HarmonyPostfix] + [HarmonyPatch("SetAnyMechRestriction")] + static void MechPostFix(Bill __instance) + { + BillAssignationUtility.SetFor(__instance, GroupMode.MechsOnly); + } + - [HarmonyPostfix] - [HarmonyPatch("SetAnySlaveRestriction")] - static void SlavePostFix(Bill __instance) - { - BillAssignationUtility.SetFor(__instance, GroupMode.SlavesOnly); - } + [HarmonyPostfix] + [HarmonyPatch("SetAnyNonMechRestriction")] + static void OnlyHumanPostFix(Bill __instance) + { + BillAssignationUtility.SetFor(__instance, GroupMode.HumansOnly); + } + + [HarmonyPostfix] + [HarmonyPatch("SetAnySlaveRestriction")] + static void SlavePostFix(Bill __instance) + { + BillAssignationUtility.SetFor(__instance, GroupMode.SlavesOnly); } + } } diff --git a/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_RestrictBillToPrisoner.cs b/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_RestrictBillToPrisoner.cs index 414951c7..eb99dd75 100644 --- a/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_RestrictBillToPrisoner.cs +++ b/Source/HarmonyPatches/Patches_GUI/GUI_Bill/Patch_RestrictBillToPrisoner.cs @@ -13,232 +13,252 @@ namespace PrisonLabor.HarmonyPatches.Patches_GUI.GUI_Bill { - [HarmonyPatch(typeof(Dialog_BillConfig))] - class Patch_RestrictBillToPrisoner - { + [HarmonyPatch(typeof(Dialog_BillConfig))] + public class Patch_RestrictBillToPrisoner + { - /// - /// Replace button label to allow select more element - /// Oryginal: - /// Widgets.Dropdown(buttonLabel: (bill.PawnRestriction != null) ? bill.PawnRestriction.LabelShortCap : ((!ModsConfig.IdeologyActive || !bill.SlavesOnly) ? ((string)"AnyWorker".Translate()) : ((string)"AnySlave".Translate())) - /// - /// - /// - [HarmonyTranspiler] - [HarmonyPatch("DoWindowContents")] - [HarmonyPatch(new[] { typeof(Rect) })] - static IEnumerable Transpiler_DoWindowContent(IEnumerable instructions) - { - /* - call | Boolean get_IdeologyActive() | Label 39 - brfalse.s | Label 41 | no labels - ldarg.0 | | no labels - ldfld | RimWorld.Bill_Production bill | no labels - callvirt | Boolean get_SlavesOnly() | no labels - brfalse.s | Label 42 | no labels - ldstr | AnySlave | no labels - call | Verse.TaggedString Translate(System.String) | no labels - call | System.String op_Implicit(Verse.TaggedString) | no labels - stloc.s | System.String (25) | no labels - br.s | Label 43 | no labels - ldstr | AnyWorker | Label 41Label 42 - call | Verse.TaggedString Translate(System.String) | no labels - call | System.String op_Implicit(Verse.TaggedString) | no labels - stloc.s | System.String (25) | no labels - */ - CodeInstruction[] replacement = - { + /// + /// Replace button label to allow select more element + /// Oryginal: + /// Widgets.Dropdown(buttonLabel: (bill.PawnRestriction != null) ? bill.PawnRestriction.LabelShortCap : ((!ModsConfig.IdeologyActive || !bill.SlavesOnly) ? ((string)"AnyWorker".Translate()) : ((string)"AnySlave".Translate())) + /// + /// + /// + [HarmonyTranspiler] + [HarmonyPatch("DoWindowContents")] + [HarmonyPatch(new[] { typeof(Rect) })] + static IEnumerable Transpiler_DoWindowContent(IEnumerable instructions) + { + /* + call | Boolean get_IdeologyActive() | Label 39 + brfalse.s | Label 41 | no labels + ldarg.0 | | no labels + ldfld | RimWorld.Bill_Production bill | no labels + callvirt | Boolean get_SlavesOnly() | no labels + brfalse.s | Label 42 | no labels + ldstr | AnySlave | no labels + call | Verse.TaggedString Translate(System.String) | no labels + call | System.String op_Implicit(Verse.TaggedString) | no labels + stloc.s | System.String (25) | no labels + br.s | Label 43 | no labels + ldstr | AnyWorker | Label 41Label 42 + call | Verse.TaggedString Translate(System.String) | no labels + call | System.String op_Implicit(Verse.TaggedString) | no labels + stloc.s | System.String (25) | no labels + */ + CodeInstruction[] replacement = + { new CodeInstruction(OpCodes.Ldarg_0), new CodeInstruction(OpCodes.Call, typeof(Patch_RestrictBillToPrisoner).GetMethod(nameof(GetLabel))), new CodeInstruction(OpCodes.Stloc_S, 25) }; - // return HPatcher.ReplaceFragment(opCodes, operands, instructions, replacement, "Patch_RestrictBillToPrisoner patch for DoWindowContents", false); + // return HPatcher.ReplaceFragment(opCodes, operands, instructions, replacement, "Patch_RestrictBillToPrisoner patch for DoWindowContents", false); - List instr = instructions.ToList(); - int start = 0; - int end = 0; - for (int i = 0; i < instr.Count(); i++) - { - if (instr[i].IsLdarg(0) && instr[i - 1].opcode == OpCodes.Stloc_S) - { - if (instr[i - 1].operand is LocalBuilder lb1 && lb1.LocalIndex == 24) - { - start = i; - - } - } + List instr = instructions.ToList(); + int start = 0; + int end = 0; + for (int i = 0; i < instr.Count(); i++) + { + if (instr[i].IsLdarg(0) && instr[i - 1].opcode == OpCodes.Stloc_S) + { + if (instr[i - 1].operand is LocalBuilder lb1 && lb1.LocalIndex == 24) + { + start = i; - if (instr[i].IsStloc() && instr[i].operand is LocalBuilder lb && lb.LocalIndex == 25 && instr[i + 1].opcode == OpCodes.Ldloc_S) - { - end = i; - } - } - instr.RemoveRange(start, end - start + 1); - instr.InsertRange(start, replacement); - - return instr.AsEnumerable(); + } } - public static string GetLabel(Dialog_BillConfig dialog) + + if (instr[i].IsStloc() && instr[i].operand is LocalBuilder lb && lb.LocalIndex == 25 && instr[i + 1].opcode == OpCodes.Ldloc_S) { + end = i; + } + } + instr.RemoveRange(start, end - start + 1); + instr.InsertRange(start, replacement); - Bill_Production bill = Traverse.Create(dialog).Field("bill").GetValue(); - if(bill.PawnRestriction != null) - { - return bill.PawnRestriction.LabelShortCap; - } - return GetDropLabel(dialog); + return instr.AsEnumerable(); + } + public static string GetLabel(Dialog_BillConfig dialog) + { + + Bill_Production bill = Traverse.Create(dialog).Field("bill").GetValue(); + if (bill.PawnRestriction != null) + { + return bill.PawnRestriction.LabelShortCap; + } + return GetDropLabel(dialog); + + } + public static string GetDropLabel(Dialog_BillConfig dialog) + { + Bill_Production bill = Traverse.Create(dialog).Field("bill").GetValue(); + GroupMode groupMode = ExtractGroupMode(bill); + switch (groupMode) + { + case GroupMode.ColonyOnly: + return "PrisonLabor_ColonyOnly".Translate(); + case GroupMode.PrisonersOnly: + return "PrisonLabor_PrisonersOnly".Translate(); + case GroupMode.ColonistsOnly: + return "AnyWorker".Translate(); + case GroupMode.SlavesOnly: + return "AnySlave".Translate(); + case GroupMode.CaptiveOnly: + return "PrisonLabor_PrisonersAndSlaveOnly".Translate(); + case GroupMode.MechanitorOnly: + return "AnyMechanitor".Translate(); + case GroupMode.MechsOnly: + return "AnyMech".Translate(); + case GroupMode.HumansOnly: + return "AnyNonMech".Translate(); + default: + return (!ModsConfig.IdeologyActive || !bill.SlavesOnly) ? ("AnyWorker".Translate()) : ("AnySlave".Translate()); + } + } + public static GroupMode ExtractGroupMode(Bill_Production bill) + { + return BillAssignationUtility.IsFor(bill); + } + + [HarmonyPostfix] + [HarmonyPatch("GeneratePawnRestrictionOptions")] + static IEnumerable> Postfix_GenerateFields(IEnumerable> values, Dialog_BillConfig __instance) + { + int check = ModsConfig.IdeologyActive ? 1 : 0; + int i = 0; + Bill_Production bill = Traverse.Create(__instance).Field("bill").GetValue(); + + if (bill.recipe.mechanitorOnlyRecipe) + { + foreach (Widgets.DropdownMenuElement value in values) + { + yield return value; } - public static string GetDropLabel(Dialog_BillConfig dialog) + yield break; + } + Widgets.DropdownMenuElement anyone = new Widgets.DropdownMenuElement + { + option = new FloatMenuOption("PrisonLabor_ColonyOnly".Translate(), delegate + { + Traverse.Create(bill).Field("slavesOnly").SetValue(true); + Traverse.Create(bill).Field("pawnRestriction").SetValue(null); + BillAssignationUtility.SetFor(bill, GroupMode.ColonyOnly); + }), + payload = null + }; + yield return anyone; + foreach (Widgets.DropdownMenuElement value in values) + { + yield return value; + if (check == i) { - Bill_Production bill = Traverse.Create(dialog).Field("bill").GetValue(); - GroupMode groupMode = BillAssignationUtility.IsFor(bill); - switch (groupMode) + Widgets.DropdownMenuElement prisonerMenu = new Widgets.DropdownMenuElement + { + option = new FloatMenuOption("PrisonLabor_PrisonersOnly".Translate(), delegate + { + bill.SetAnyPawnRestriction(); + BillAssignationUtility.SetFor(bill, GroupMode.PrisonersOnly); + }), + payload = null + }; + yield return prisonerMenu; + + Widgets.DropdownMenuElement anyCaptive = new Widgets.DropdownMenuElement + { + option = new FloatMenuOption("PrisonLabor_PrisonersAndSlaveOnly".Translate(), delegate { - case GroupMode.ColonyOnly: - return "PrisonLabor_ColonyOnly".Translate(); - case GroupMode.PrisonersOnly: - return "PrisonLabor_PrisonersOnly".Translate(); - case GroupMode.ColonistsOnly: - return "AnyWorker".Translate(); - case GroupMode.SlavesOnly: - return "AnySlave".Translate(); - case GroupMode.CaptiveOnly: - return "PrisonLabor_PrisonersAndSlaveOnly".Translate(); - default: - return (!ModsConfig.IdeologyActive || !bill.SlavesOnly) ? ("AnyWorker".Translate()) : ("AnySlave".Translate()); - } + bill.SetAnySlaveRestriction(); + BillAssignationUtility.SetFor(bill, GroupMode.CaptiveOnly); + }), + payload = null + }; + yield return anyCaptive; } + i++; + } + WorkGiverDef workGiver = bill.billStack.billGiver.GetWorkgiver(); + SkillDef workSkill = bill.recipe.workSkill; + IEnumerable allPrisonersOfColony = PawnsFinder.AllMaps_PrisonersOfColony; - [HarmonyPostfix] - [HarmonyPatch("GeneratePawnRestrictionOptions")] - static IEnumerable> Postfix_GenerateFields(IEnumerable> values, Dialog_BillConfig __instance) + allPrisonersOfColony = allPrisonersOfColony.OrderBy((Pawn pawn) => pawn.LabelShortCap); + if (workSkill != null) + { + allPrisonersOfColony = allPrisonersOfColony.OrderByDescending((Pawn pawn) => pawn.skills.GetSkill(bill.recipe.workSkill).Level); + } + if (workGiver == null) + { + Log.ErrorOnce("Generating pawn restrictions for a BillGiver without a Workgiver", 96455148); + yield break; + } + allPrisonersOfColony = allPrisonersOfColony.OrderByDescending((Pawn pawn) => pawn.workSettings.WorkIsActive(workGiver.workType)); + allPrisonersOfColony = allPrisonersOfColony.OrderBy((Pawn pawn) => pawn.WorkTypeIsDisabled(workGiver.workType)); + + Widgets.DropdownMenuElement dropdownMenuElement; + foreach (Pawn pawn in allPrisonersOfColony) + { + if (PrisonLaborUtility.LaborEnabled(pawn)) { - int check = ModsConfig.IdeologyActive ? 1 : 0; - int i = 0; - Bill_Production bill = Traverse.Create(__instance).Field("bill").GetValue(); - Widgets.DropdownMenuElement anyone = new Widgets.DropdownMenuElement + if (pawn.WorkTypeIsDisabled(workGiver.workType)) + { + dropdownMenuElement = new Widgets.DropdownMenuElement { - option = new FloatMenuOption("PrisonLabor_ColonyOnly".Translate(), delegate - { - Traverse.Create(bill).Field("slavesOnly").SetValue(true); - Traverse.Create(bill).Field("pawnRestriction").SetValue(null); - BillAssignationUtility.SetFor(bill, GroupMode.ColonyOnly); - }), - payload = null + option = new FloatMenuOption(string.Format("P: {0} ({1})", pawn.LabelShortCap, "WillNever".Translate(workGiver.verb)), null), + payload = pawn }; - yield return anyone; - foreach (Widgets.DropdownMenuElement value in values) + yield return dropdownMenuElement; + } + else if (bill.recipe.workSkill != null && !pawn.workSettings.WorkIsActive(workGiver.workType)) + { + dropdownMenuElement = new Widgets.DropdownMenuElement { - yield return value; - if (check == i) - { - Widgets.DropdownMenuElement prisonerMenu = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption("PrisonLabor_PrisonersOnly".Translate(), delegate - { - bill.SetAnyPawnRestriction(); - BillAssignationUtility.SetFor(bill, GroupMode.PrisonersOnly); - }), - payload = null - }; - yield return prisonerMenu; - - Widgets.DropdownMenuElement anyCaptive = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption("PrisonLabor_PrisonersAndSlaveOnly".Translate(), delegate - { - bill.SetAnySlaveRestriction(); - BillAssignationUtility.SetFor(bill, GroupMode.CaptiveOnly); - }), - payload = null - }; - yield return anyCaptive; - } - i++; - } - WorkGiverDef workGiver = bill.billStack.billGiver.GetWorkgiver(); - SkillDef workSkill = bill.recipe.workSkill; - IEnumerable allPrisonersOfColony = PawnsFinder.AllMaps_PrisonersOfColony; - - allPrisonersOfColony = allPrisonersOfColony.OrderBy((Pawn pawn) => pawn.LabelShortCap); - if (workSkill != null) + option = new FloatMenuOption(string.Format("P: {0} ({1} {2}, {3})", pawn.LabelShortCap, pawn.skills.GetSkill(bill.recipe.workSkill).Level, bill.recipe.workSkill.label, "NotAssigned".Translate()), delegate + { + bill.SetPawnRestriction(pawn); + }), + payload = pawn + }; + yield return dropdownMenuElement; + } + else if (!pawn.workSettings.WorkIsActive(workGiver.workType)) + { + dropdownMenuElement = new Widgets.DropdownMenuElement { - allPrisonersOfColony = allPrisonersOfColony.OrderByDescending((Pawn pawn) => pawn.skills.GetSkill(bill.recipe.workSkill).Level); - } - if (workGiver == null) + option = new FloatMenuOption(string.Format("P: {0} ({1})", pawn.LabelShortCap, "NotAssigned".Translate()), delegate + { + bill.SetPawnRestriction(pawn); + }), + payload = pawn + }; + yield return dropdownMenuElement; + } + else if (bill.recipe.workSkill != null) + { + dropdownMenuElement = new Widgets.DropdownMenuElement { - Log.ErrorOnce("Generating pawn restrictions for a BillGiver without a Workgiver", 96455148); - yield break; - } - allPrisonersOfColony = allPrisonersOfColony.OrderByDescending((Pawn pawn) => pawn.workSettings.WorkIsActive(workGiver.workType)); - allPrisonersOfColony = allPrisonersOfColony.OrderBy((Pawn pawn) => pawn.WorkTypeIsDisabled(workGiver.workType)); - - Widgets.DropdownMenuElement dropdownMenuElement; - foreach (Pawn pawn in allPrisonersOfColony) + option = new FloatMenuOption($"P: {pawn.LabelShortCap} ({pawn.skills.GetSkill(bill.recipe.workSkill).Level} {bill.recipe.workSkill.label})", delegate + { + bill.SetPawnRestriction(pawn); + }), + payload = pawn + }; + yield return dropdownMenuElement; + } + else + { + dropdownMenuElement = new Widgets.DropdownMenuElement { - if (PrisonLaborUtility.LaborEnabled(pawn)) - { - if (pawn.WorkTypeIsDisabled(workGiver.workType)) - { - dropdownMenuElement = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption(string.Format("P: {0} ({1})", pawn.LabelShortCap, "WillNever".Translate(workGiver.verb)), null), - payload = pawn - }; - yield return dropdownMenuElement; - } - else if (bill.recipe.workSkill != null && !pawn.workSettings.WorkIsActive(workGiver.workType)) - { - dropdownMenuElement = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption(string.Format("P: {0} ({1} {2}, {3})", pawn.LabelShortCap, pawn.skills.GetSkill(bill.recipe.workSkill).Level, bill.recipe.workSkill.label, "NotAssigned".Translate()), delegate - { - bill.SetPawnRestriction(pawn); - }), - payload = pawn - }; - yield return dropdownMenuElement; - } - else if (!pawn.workSettings.WorkIsActive(workGiver.workType)) - { - dropdownMenuElement = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption(string.Format("P: {0} ({1})", pawn.LabelShortCap, "NotAssigned".Translate()), delegate - { - bill.SetPawnRestriction(pawn); - }), - payload = pawn - }; - yield return dropdownMenuElement; - } - else if (bill.recipe.workSkill != null) - { - dropdownMenuElement = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption($"P: {pawn.LabelShortCap} ({pawn.skills.GetSkill(bill.recipe.workSkill).Level} {bill.recipe.workSkill.label})", delegate - { - bill.SetPawnRestriction(pawn); - }), - payload = pawn - }; - yield return dropdownMenuElement; - } - else - { - dropdownMenuElement = new Widgets.DropdownMenuElement - { - option = new FloatMenuOption($"P: {pawn.LabelShortCap}", delegate - { - bill.SetPawnRestriction(pawn); - }), - payload = pawn - }; - yield return dropdownMenuElement; - } - } - } + option = new FloatMenuOption($"P: {pawn.LabelShortCap}", delegate + { + bill.SetPawnRestriction(pawn); + }), + payload = pawn + }; + yield return dropdownMenuElement; + } } + } } + } } diff --git a/Source/Organizer/NewsFeed.xml b/Source/Organizer/NewsFeed.xml index 6a5af864..efcc06ff 100644 --- a/Source/Organizer/NewsFeed.xml +++ b/Source/Organizer/NewsFeed.xml @@ -4,6 +4,7 @@ + diff --git a/Source/PrisonLabor.sln b/Source/PrisonLabor.sln index 6eea4597..51609848 100644 --- a/Source/PrisonLabor.sln +++ b/Source/PrisonLabor.sln @@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KijinCompatibility", "Compa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CleaningAreaCompatibility", "CompatibilityProjects\CleaningAreaCompatibility\CleaningAreaCompatibility.csproj", "{B904E495-7C04-412A-AF45-B02EE0150087}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColonyGroupsCompatibility", "CompatibilityProjects\ColonyGroupsCompatibility\ColonyGroupsCompatibility.csproj", "{A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,6 +59,10 @@ Global {B904E495-7C04-412A-AF45-B02EE0150087}.Debug|Any CPU.Build.0 = Debug|Any CPU {B904E495-7C04-412A-AF45-B02EE0150087}.Release|Any CPU.ActiveCfg = Release|Any CPU {B904E495-7C04-412A-AF45-B02EE0150087}.Release|Any CPU.Build.0 = Release|Any CPU + {A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A77AE1EB-BA5D-4B3A-9D9B-A9580850FAAD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/changelog.txt b/changelog.txt index 613411ac..7bdb02b9 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ Changelog: +1.4.6 +- Chinese translation update (https://github.com/shiuanyue) +- Mechanitor and Mechs should be assignable from bills menu +- Prisoners should not deliver resources to forbidden frames and blueprints +- Compatibility patches for [LTO] Colony Groups 1.4.5 - Fix: need assigments for prisoners only 1.4.4