From f74c2b844b20831ec037df2b10d56117c06d1860 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Tue, 2 Sep 2025 18:39:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 43008 -> 46592 bytes .../Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml | 9 ++ 1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml | 66 ++++++++------ Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 4 +- .../ArachnaeSwarm/CompAnimalWorkSettings.cs | 82 ++++++++++++++---- Source/ArachnaeSwarm/CompInstantTrain.cs | 60 ++++++------- .../CompProperties_AnimalWorkSettings.cs | 25 ------ Source/ArachnaeSwarm/JobGiver_PlantCutting.cs | 56 ++++++++++++ Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs | 63 ++++++++++++++ Source/ArachnaeSwarm/JobGiver_PlantSow.cs | 41 +++++++++ 10 files changed, 308 insertions(+), 98 deletions(-) delete mode 100644 Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantCutting.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs create mode 100644 Source/ArachnaeSwarm/JobGiver_PlantSow.cs diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 9aac5afea005fe0dc0243553ed4ef5b5e6bce2a9..5c8cda1fd0c72ecd0278c38089e04dcf8d228166 100644 GIT binary patch delta 19070 zcmb_@34B!5_5XS6teND^B$Eu8B$Ev$WHBKu3H!cPHrYgF2@o}sFl0f*F-`{DP^scW z!4+t+ibVy%twjqiR4P@mZdeykOTnduR&A*o|KD@pWUKb~@8|RT4ZQR2S?<~Hx%a;N zX43YW-1fPA>kX5Se0SL_5SgzFLWMk(KM3@ui-%X~u0agam= z{j}HoK*|fuLP!2g#3hqPB^MFB6Csk!8QTV#)8$#oH^PTPx%E8gC{$W!n0w@+k<#?uS6_xkyS@X=<|~Mtg>B3BlqF>< zp@%?m>T+v6_@qbq=J%(jMxe&2x9h*$Q3&gax@2hTe1*PU!u%%mF`7wc|-=uO8D>Kk>awIXjSVt=4cp%m6?dx zsh29L#kwB-7bvOilG|P)7hg(pcs^W=R>HB!H{c`{5B4hIZ_)CpWT+)xtAn9Nz5~r4 zYnO^8zfUu?5-+;3E<;UCkF=u!d+7Q-TBXl?knC03{ctif;$YT$@Rg(#9)V`rq>AgtTo0C{S(=1NJgC>h5 z<6e>?hfybbl8+yqkRu}^- zL63M@%x2i2)Mq#BC1Emb;Bhn&A9$>QWAZr+M+q>SzcrP~_`paSnx!TNR&Do(x&}58 zT&LHZK+9{N({Pr=mUnv1oQR)&a1{^py29z)bd%wZR)JIEMx(l`bCQu%;!h|~Z~~DG z%N=wMus6SgH?DSnZZ~iGN?bP7N{xRJMHT~6Ax(}-Ju40&`7lPuaqlgrPINf?;F6=m zgbS$hbj+d=gkffm-1H|Wt?-9?!E7swbP8e~Wl+;ua6_N{#ZBQ%b}==n>ISIB{EM-0 zVX4|XwO9)W!CQI0n2bCID(2S!(v?US=srzX{E=+5O5Gskpn-zn$;M;pVzCftNyU{^ zTtZEcxoCwVX0#G{4ux4*s`qZ1@1_+^&r7r-d=p6FJ^(R-GsWb<^g+ZbFBBBwh%wP} zp|4{SB`dP(kK_rfimRAxDD+e-Qoogfa6Xu1>FJTVk%*8pHv)Iza%bkii6M2Dz^z2; zSf*3bO5Iv;L#KWubu9b8&Rpz=sT-d3-=*$x}jWj%#oYUz|}ND{ZkKR9p#4>BkF=SM?th z+AbLRZwjp=TU<86SHFlM))72UH`D`RLo(>x4>klGE8x-6YSXksO*Qj zl$%*kq)%dMbU21t0$t-^E%u{P{=8e1EG0w}QC`^LSjU!90^j;RCx@fFDPY4?ug02c zJ$5vp(XQipOK%Rtg~B%GgpsFWc)-rg=EtdGc+~QW8e?olSq_Rs|$2k#IjW1s<-ny5AzYccufr z?PcHkvs^mDb=#xo!YQB4YYPtqu{22z55hefs{$-$ay|@!Ds+s8Y-y$(z7k3jg4K|V z3J#UM8Z0~^|wpBM^`_OM0C)( zFp!BSdSrsPU@I3%-lU$nNTec3q{8Ro@JAwv!(q_p_WL}==R-56#Bdv)$i?uWvk@Hu zA;ZP~I3pvuL$cvAlA|L`t$1*(`?x&W(;HPb)aXy(sP6~vjDi}BjO9*vHTuE47_`yg z@NVffyd~LkH)5hW27G(Ct)mAPyy)0O7oXuP$?xdG#6*{I+!PgS^%IjtB|JP4hQ=VJ zc|0VXx>}m5MetbZ)FKdZ`kNLMW%%!ZPDD>oC60Dt5SbULjHA2)>VWm;5RVxs#IBHpI-Y#fNtX0gh)~cq= z6k1^|SdnLtUzb-3V^MQ96$|=R=+i+8{{i&Gq>5R~stDa(Ji#lA$dgEKszg64_{a=| zbu)sL)K7 zT?pEbuY=4EV|VNbK#%eo#;XEv;i+((^~vFxX7M@U*epm>-$!t6VJW$JHt<$nF68hW zX5pxX9isbD>w=v2=BJP>9E>p&`CyEqQL(@&gq@l~Vpx>$T<$GLc_qO*4)b`JM7gB5 zG6jtDaVt$3CW}prk59#rLCs@_2#{=%{gDeGCF-k{<*9ETj~wz!?@xcfNlwQqa+h@U+7s ziLOYdv-C+g0u#)#2@BEl%&LmuRCXbX)36$uk4UUkVESVYHP!HN2_J<(7~|oztY##v zevm4si6;4-AK2yaP3F%k`ik%@(@4>An{PxMczq!}6YogSo&jzvCsOaLX3OCX=CppfvHn~V zO*;@qdUzr9VDKRkoy`DGe9rJ^4E_qxoh3)-va%$AM29)tVG$JQ{^lCo{E@|gz58C4 zIDX4YD=H9`D~bV&uF9*0oKLxk$}gf~{*Tngov4kVSyrjr23TU|kjl^ip{&_Nn5_$0 zZ`6Vd&~9btI|vssft^EHFEDSd48&L@Y(vMWhE_>m(0fp39d62uT$%HeSRrzbf| z>=?%Pae`-co!wBWe01h>Vf9JGBMP@CJ5mcRt&7CD3Wdw=SKY;e%^Nv}8sKu&f*eUJ zk3xcQ6?&=Ri@85%9aVQoR2@r;ao_`-Gdz;PM+|s@vHG^_w?ljLCFt8LH8l_RXjW=! zy1)5S)^-8gNEg1OJ3ko7Q-l5D`WK#9hVdT6Ie591ViIxUe*`aVtk0O;?VDQzA!O5;(} zLl5oQN_4W>FsLNP^GJ^J38r1@GCo`p+lL(GlgN)Unk`1BU;^*9sI)*LF~XOlDHfG( zYYMZSy7vbg&abhkWV^7ek+tcxm@})2V=OJ^?rPQ=T?H7v0byC2&Xr8W9AT;AYK$lo ztW5_`il`tt%JkL)j{FErJi>c;a=yi!d`W&FM)Q%Z0>0HShY#)@dj;rVTu2%1$2A^TDlU{A5=Jx%7yKqKt`M$V zTtQq|c?cr-&VUH}6ZOJHbSvJp@<*q)Tx|iJz83I8*Q`J?y%1pfdRI=ePGLcJx?hSJ zIwfVj1USaU@DsG1^t$^n9^DFh9d_z8S9YjQ+FH2G z*;$W~F*T^uL~!AXeQMB2DQT>8n2+IpK%Lz3OGeB|0Y`4OlO7W6>tM!7Pb&-4oRnl+ zm`(|apUT9wc63WMR+RPOaptxk8+@3R=bBr|1NI>Q17!1z?9e%HjdzRgFC!vXVQzpOdyHdtx)Qv zk^&Pl=lkn)FTIj%DqdQf&y>f7>NJsqd7{@o(aUS&zRN|Pl0Dph6@8sl2&hwA>Q`PT z9rv@vy|G-r{Z7Ewgo-B+lTMW)2XCiwx4S^s=`R>pC)vdK-Jo-?$3?{ZlDT~dSscRIg- z3-%JB|54DF$PZ;RWvd8v5duK{yM%%5A}xh5tkYE@`L~JDI+D+E*NFJGiG2K0$ao!0 ze@GafEc(79lr9ws*M!M&B7m7rcJu||^gvNzYecVK^CXYa08t3Xz{YZs&!zFXD3+&s zaaP(y`%y8XaWPY7i8Q(jxs+OavHViB5oIQu2^8|wyGPAJ$ zVYS1TcF$rdVob)BLeJzA6``#NOvyWGRAARq1y%s8mRw{L*t^b?#_i<6$$Wpv{hx#wjeo1p+&1J87K7BV$-#s{N!P zN!e5`u;u8dNqKm0zy@am+d+lcni;zl1~sXW1`2G2FdxPP5%bQ6`R|}{h`>H}#7-J% zQW1?7sDUUXU=sxPPdIZHFM1{l>@HwCuvbhG*z>?NshDO6?A~4{jR3Io1ol@S=c$b5 z2+W(xd8(kf0$c25tdiynY`phm45F2^h~mh9xZtEwME$7-SPC`38O9b1(fjgQX@6QG zBsaM&-crFE3Em`WAk_-&e&m9&O9b{ixK@Eo)CufvVWEmH6WA(Xu_El5%LMv4L~Cgn z)mx&;Cyja1Fp3E5ST18Ds7YY8FgQ;dMJokn_|Z=qL#qV#x3rVSwbFRHR$$i)gOg|- zDF{hdxSpoajRM2>gH#lw*<=dzmy9A!8wK{6%-B4-Ltu{!Y%y&ChK<@qbOiA|KuT^3 zofS$iV+W68UD`wCE)rzZuhmbPBV9l z9@FWM$sHt#hW9!P_SM473o0A?hm(~q>?I{t(4|={xe;8Qs#6_FI$a5hL=#h4a-znP zmAyPke%hU!4tOIVw!73I;4_(pfWNjgWwNsj@M)tmNsrM&gVk-w4ILD>Qh2Gl7{B){2{i?~zWqd~C-YY}p((~8WWfO1FPPoUZ55+Q{? zmLwV>!ix>}WMT2F7BD6AJP2v>9Kba)rzjjm@DZ7R2+(2v3beTw^v5z=f$W#ANYeFllxlTO+uQjcx#zUSlRt6~q<|7f z8aL8)aH7Jf(wMRdlsR;dpg#a8(F5Qf6y@0kyNq?k+B4K$u&c?FIo9=vb$ST%fv(FK zhzC!J=5=DcGt_lr%xmg_Z57x-`WkOs#`T)?PVn(0g??{|*pGN}v3b0c5V=11EAUQR zJo=4S$5v9GOZXh5w^A5;N?>t%)c2yfVO*aWJEPGpI1doTsaSeBNu#X-J4ltmBZ&JA zfxSS7GT%zF(I*14g0Ru)M86oOqm7DivgioVM&}7EZht3u4E+`+u(;2w+o)b(2kHA* z{-?5yzD=O)qJ!?i+g*0%Hs_y`9Q0+Fv4iBxKb_0Nffd$d#^N?CyBxWJ81t-c~4EE8#*P6aH61%3DFbo6o^Wt-PQCL*g^WU`QiA? z*)wc@NJPuJBs_GDg(1#-kB7Dk?4W(II~SYvZ!L`OvST%&PZHRNDOcD$^zAvUfY3tyoz=3RZWUOZS_^ebrw0Xgkfv)`B-5#WV3)ykY7^K&`_G*x zB=Go+3$oR!&akD^6&7Znfh=dx8wuWYtWFs;kx!tBGRUAAJ+R9y3|SlQ$)L3f>@oF~ z7&_i0(1WxRQDo4A35*9TgL3)Un@}2{{sKe!BEbPVe+csq(nH##woE#In1y|BjPYbq zlfbOx=MeuMrb9~(ZB9rIEqKKi%c0i<`T`wM_Blcn9ML73ON9d4kTEnc1@nDS58e`i z@jROW-U@*oq~&SpdM;g)z<6Ti(P2xHUi2|`GJ*9?1s0>1Ms^v@qazjurE@%abWC8D z(mc9nRF`Bv-QNQ{EHKN_eEL#gchHv13qAQ%GPw9`}pW7AZ#6bOA8f zx6}-#%LJ1#2@lRU2<*7D8>h1&^il%*JTDhm#w<(Cay&W=p#cIr?r6_BAq}Bn7A93> zGjD8ycQ{lI?A!z|D`Tf;2;I$CjE+lZGRA=UbHTKn8A3aIU{48bEj8h}WeA04vw6$W zAv9EAmZL-IsszT44y6@yyBr-#Hwo;xV@+tUXDFEhiyar94yC&iO!jmrZMQJ#{*0#~ z`u7CJjt-@71ZJ5ZO8)cNgk^phWh5{*Ka5_sFvrNybDm-JhXju^GmPG~u$Y4l4x>*J z%$kgsAlhf1rIZa0qjLmi&DdcyL||5)hS6Aot)=_ub@ZFkjW?XmPw>V_L47!F7nr4G z1no*lisz6K^mIaW5q;&bR#h-U(xLi!ixWq_It?wldKj zTJ-MF-?UbwBo&69NsDXj!0M}&~Q<1Ve?Io&E#yehtBtMK)E7i%G zbO=Xmr_?Apv{)`RN+(j2rAf;6tTd@wc_Ces8mYzp3h3{8Go@2-XsC3ja+~ju(l%uo zPV6(3S&kEszc=ess3`ZHmUbx9Qoj}&>~f=Yk;Xdv7bMH8=|q8FKA;S;Wy^;Y-Butw zq#J$J@{xpw?O7vY@;0T|_*gosv}RA0k1Hqj+43pn3+F=l3@G*TS+twwLv#(E4JGyS zlq>O~@bi=#LE(H9Nz+p|%SFHIVk6<!cIjxq!DrW}VcWyF}dx4O|o3Jgv~fCL7h!-uuvICvK*@^NMM; z8e0|EuFg>ZqB7i<{)oCks`lnmwR&3ll^R!IU@+A8BV{UegW;?pf*2$mm%qg7+BPluh1O)w5#Yj?%1{noD=8dsB+F zqok%(YTMMWvZ}Nl>gc>-TCS2=FcXSe>g# zq_J6#Y1>7_JJg$x_(N!BsmDmooW$;%G1jAv+4qz6FI)|ptEX8OjJqcf^vxVQMx2>zAkA$ zRp;vgd7QC83&`ggP5KV??(A!z^HlO?{U~y@=x_WsAx?3STB-$Wq$z~J@_|3u8*Cx!u>adv7)dEkPl-! zMUn0mMcOF+(g@o2iefw~Tt6c5(JoheBlUz7h>AG2>) z+^X}4JlGxcID;sP?X*Mv+9-4ui1touHKsUol?!sucOKVfr^W$y+T+fnl!o>0xZIk3 zz4MGx;QOiblr}YUvy&U4I+Q1~vy`LqwMkDn zPf=_3Kb+?xPtV2ZjMlDy=e!Dt=4zDs;>G4s`2l;f%b~2m+gOJZ#sch6Jm~>YhKlw- z{Q*}EjODq`BE3a`t=atncWJ{wKa@7cbx7tVyuZXt^-z(;p(20B;2*AYq31cu)gMq)_fh)5{gP{z#FKWGaO)!BRz(cmw&Rumz(8O3 zMZ(80@niuQf_pgl2-P*#hokf z(>A*`{0iW4z@hY{Tc$>O9+XYRq)kQ{zTc`zE~A)_F2gO8)&b_z zZOLQsqUl-p7(5_7>s}(-OA_r$`cukQ9KYU6-Y@9;@guxv-65R$@>59WUL)lpbV*8^ zXg{y~9F&ihUy|F%SAUK6^BT*1ETE!uJ734&dcc@K)(ZG@0iPG}V*wSL5EXEwfMcw- zdk^~VPZ>g6Q^;T$GT5P!0xlA8zktUCB(HE+z>xy(2aG-IK4y`8%w8m5n}Ayd+%MoU z0V!1&5O9%zZ31o;aKC_*F3bqnCg4^9_X~JTK*BlWS@(K+o!&CHT`;V4hy7#w*Y<#; z(Q(vq!r^eHI)^(ibMA8nUDI9Hy0*C9bA9AG>GHX!xvz5n!n9pj8Vh0&`;ZUgkctQ2 z0G?4Z@nD;U=hz&aUp@_ff%D6op1%Qp8vGh?zwaBs>@@ysGD+0{KXtnp1`WWA-IkHJ_R--7)F90a&EI1KQ653~3C#{-@So(uR=0aMa) zSkc=#=K*fWnbX;xnS;NSNzl7w%#@2Rjm^h*o-)-VN*Q0j@mIB1AX*8Jz{O}^iN8;f z@pBmb?3AuT^fLVv-!;l~D-8g=3okxox(BZ~WcnE@R;KMZM$5F1@TYL}EWSxABfsPW z%)m?3G7927XBlNn0l<)y378j?vT!Sqa-h5nq7_sQQG87)fce36B_s#aRgfG^ zS4$d?Wt$nDUp?l4{gB;(Ka`l{Sme0Yk?9=g{Drf{b(QNcu5VqL?mV~Jh9U3qIf+vz z&VQYso#vVOX|V}7VE+5(90ybQYjCBLm4n|S{9AwbCLBxo&k8hTT&Hqe6}bB0yN61g zoBHD#fHTlQjLjfiRk*5g4W<&T5zo+ix=y~uymrBajG1zkbDq3aTZa2K`A*j!+~1TJ zx%Zq{@PT5R8d*MbNzHO||Kckh_>ENU(piynBYOrd*(n#yTvk_Ke_rj9NYhdp9a*}1 zdQDSH0v*@X6lt2ad`az|Gqu<0nvgV`>-&^lTGMoSZF9@qNYkLZJ5>dj%13R`n+%ffSOFE^Lrk0R^MwUOzr3AHW4F=}3Bz8Yzg zCpDXcR88d+Mqu)}%kl%iEuTFj!AOWYH!OwFmO zuUoq3`jz_>M>FReA=H{9S63^*_N-j}f#&Vdvv7KS&GHuRwr5(bS@QIxo6ojoyO-8A z*DS8D9b3DkX0`dpws(_6EUdDA-0~Llv3S@&r4G?AzvR5y#+7wVwM!F;H{Xd*(#J=d z7Q>gonvE{MZ#ve28d^>*_!4^zzM5|#YJ1Y0u`U!FgD>${g1eML;77m-(Z%>hz;Z#E z3rZ7y0x$uT%kdk6CLEM&!DrbTYCxO&^`Rf?@53uWH+m>xw?*i_1iV#f)%SwwF2k!5 z=E_KF+acWh&kp>!(GY$lV7biBhG3$(oBkTKJNR88Eu@+F=>(@|xd@RHz&b*-f?s>A z0y#vIV=CTqoQr>yIRVTF=xkylB$`BSnnhNh{y)s>f3{;~x2J6$vqWBl$m)N}>+b(= zUjHYvUHSW8-Kns)$xCza-n$8l4gf-7Mw)$rTb_?_kxw~q8}(?aBJJD`#5@dUXY-(fm7 z6sS9l_`_z!hO8RsY!DjwHc9fvcX!;3M#-Jl0~o749&h|{Z~SQ)AGYp|Ka;q5;|IL) z7cJy~+lU`Z^R~SygK9pyAyZmuzPzCz`KV3`+z9F+NiyQ^o9!F?(hf82w%)zJ@Hj~K z*jcUYCdG)K^%(Il@E@-h&^n77pjmU8Lrv z%$0KY)R^NXX_Wck#xiM~`S!+vzIB|L5*vPm?QMJ7&fR91q1z{qnFmysjWzRS*&dR- zYif?A^Kj2Z*S5{xw#^u} z*lrkvW&WvJa(?jHOE~cDIw==&_n3hAlrCc{^V`oJHl?TTZ8CraD@~> zV5M$^-eE{~*b;@=fXpI}I{fEhh}U_HHD9P9DHv2CV%K6kkAgbd-gtweF9*)hD0$Zex! zN3art5~bWI54T312Oqz)^w{lO;f+8$eUZgl3xH<^ZZ}tzqMo8Eex#A%!a_fyp+ThHkQ~i?S|-RGYctZfD`zfU!0U z>T}Vj5aGMUfTAsX*A`*4+0F~*mb)`^25>2_4WMS%Rtxe=YKVN2th>348_lD42c?td z*LM$=4x1JC43F6@Q*E2kEk1<->Kzr#pss_tSJ%Z5Bhpkfz4Ijxni-I3+lL0riHTXt zl>H3u1v$u#*HR#lLW96FGUl=yet6s7aavTbff8aXqUe~j%l!PF%?pu234VJoWzd3> zLKRnYy|mrxB4n%qGXiO_hr}M?Z4jj-VB0QHP^Fks7;kSW7mqi-8cBW{zxNOmFy3l@ zcyG0RFIEeX_nM*mCIwrxFe|r*I}`$qHwfacJ=flMfovYzn&O#wm=8wQXYpaPeQPgy r)?u^PwlB^7+g~$1KN}()+cWuRPb!Z6gaZ;$%g{Z>Fa9cRD7XDT!}0_y delta 16015 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
  • + + +
  • + Plants + 10 + true +
  • + +
  • ARA_Sowing diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index 8f310ad..fd0e1ae 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -107,7 +107,7 @@
  • - 30 + 30 35
  • @@ -324,6 +324,45 @@ + +
  • + ARA_Sowing + +
  • + + +
  • + +
  • + + + + +
  • + ARA_Sowing + +
  • + + +
  • + +
  • + + + + +
  • + ARA_PlantCutting + +
  • + + +
  • + +
  • + + + @@ -335,31 +374,6 @@ Insect_PreWander - -
  • - -
  • - TrainedAnimalBehavior - -
  • - -
  • - - - - - -
  • - -
  • - TrainedAnimalBehavior - -
  • - -
  • - - -
  • diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 7fc9efb..8f83075 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -96,8 +96,10 @@ - + + + diff --git a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs index 758e74c..6c462cc 100644 --- a/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs +++ b/Source/ArachnaeSwarm/CompAnimalWorkSettings.cs @@ -4,6 +4,35 @@ using RimWorld; namespace ArachnaeSwarm { + public class CompProperties_AnimalWorkSettings : CompProperties + { + // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 + public List workTypeMap = new List(); + // 定义动物的技能等级 + public List skillLevels = new List(); + + public CompProperties_AnimalWorkSettings() + { + this.compClass = typeof(CompAnimalWorkSettings); + } + } + + // 定义键值对的结构 + public class WorkTypeMapEntry + { + public TrainableDef trainable; + public WorkTypeDef workType; + } + + // 定义技能和等级的结构 + public class SkillLevelEntry + { + public SkillDef skill; + public int level = 0; // 默认等级为0 + // 可选:是否阻止技能衰减 + public bool disableDecay = true; + } + public class CompAnimalWorkSettings : ThingComp { public CompProperties_AnimalWorkSettings Props => (CompProperties_AnimalWorkSettings)this.props; @@ -15,35 +44,54 @@ namespace ArachnaeSwarm Pawn pawn = this.parent as Pawn; if (pawn == null) return; - // 关键:如果 pawn 没有 workSettings,则为其创建一个 + // 1. 确保 workSettings 存在 if (pawn.workSettings == null) { - // Log.Message($"Initializing Pawn_WorkSettings for animal: {pawn.LabelShort}"); pawn.workSettings = new Pawn_WorkSettings(pawn); pawn.workSettings.EnableAndInitializeIfNotAlreadyInitialized(); - - // 注意:Pawn_WorkSettings 的构造函数和 EnableAndInitializeIfNotAlreadyInitialized() - // 通常会处理所有可用的 WorkTypeDef,并将它们的优先级初始化为 0。 - // 这正是我们想要的初始状态。具体的优先级将由其他逻辑(如你的 CompInstantTrain 或 ThinkNode)来设置。 } - // 设置工作优先级 - if (pawn.workSettings != null) + // 2. 设置技能等级 (如果定义了) + if (pawn.skills != null && Props.skillLevels != null) + { + foreach (var entry in Props.skillLevels) + { + if (entry.skill != null) + { + var skillRecord = pawn.skills.GetSkill(entry.skill); + if (skillRecord != null) + { + // 设置技能等级 + skillRecord.Level = entry.level; + + // 可选:阻止技能衰减 + // 在新版本中,将激情设置为 None 可以阻止自然增长和衰减 + if (entry.disableDecay) + { + skillRecord.passion = Passion.None; + // 注意:仅设置 passion=None 可能不足以完全阻止衰减 + // 如果仍有问题,可能需要在 ThinkNode 或其他地方定期重置技能等级 + } + } + } + } + } + + // 3. 设置工作优先级 (如果定义了映射关系) + // 这里我们不检查 pawn.training.HasLearned,因为这个组件只负责提供"能力" + // 具体是否执行工作由 ThinkNode_Conditional 控制 + if (pawn.workSettings != null && Props.workTypeMap != null) { foreach (var entry in Props.workTypeMap) { - TrainableDef trainable = entry.trainable; - WorkTypeDef workType = entry.workType; - - // 检查动物是否学会了对应的 Trainable - if (pawn.training != null && pawn.training.HasLearned(trainable)) + if (entry.trainable != null && entry.workType != null) { - // 设置一个默认的非零优先级,例如 3 (Medium) - // 真正的"开关"由 ThinkNode_Conditional 的 GetWanted 控制 - pawn.workSettings.SetPriority(workType, 3); + // 为相关工作类型设置默认优先级 + // 实际是否执行由 ThinkNode_Conditional 的 GetWanted 控制 + pawn.workSettings.SetPriority(entry.workType, 3); } } } } } -} \ No newline at end of file +} diff --git a/Source/ArachnaeSwarm/CompInstantTrain.cs b/Source/ArachnaeSwarm/CompInstantTrain.cs index c7c95e8..cfb504d 100644 --- a/Source/ArachnaeSwarm/CompInstantTrain.cs +++ b/Source/ArachnaeSwarm/CompInstantTrain.cs @@ -4,6 +4,36 @@ using RimWorld; namespace ArachnaeSwarm { + public class CompInstantTrain : ThingComp + { + public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; + + public override void PostSpawnSetup(bool respawningAfterLoad) + { + base.PostSpawnSetup(respawningAfterLoad); + + // 只在初次生成时执行,加载存档时不需要重新训练 + if (respawningAfterLoad) return; + + Pawn pawn = this.parent as Pawn; + if (pawn?.training == null) return; + + // 瞬间训练所有在 Props 中指定的技能 + foreach (var trainable in Props.trainables) + { + if (trainable != null && !pawn.training.HasLearned(trainable)) + { + // 注意:直接调用 Train 方法,它会内部处理 SetWanted 的逻辑 + // 原版的 SetWanted 方法可能已被移除或变为内部方法 + pawn.training.Train(trainable, null, true); // true表示瞬间完成 + } + } + + // CompInstantTrain 的职责到此结束 + // 工作优先级设置由 CompAnimalWorkSettings 负责 + } + } + public class CompProperties_InstantTrain : CompProperties { public List trainables = new List(); @@ -13,32 +43,4 @@ namespace ArachnaeSwarm this.compClass = typeof(CompInstantTrain); } } - - public class CompInstantTrain : ThingComp - { - public CompProperties_InstantTrain Props => (CompProperties_InstantTrain)this.props; - - public override void PostSpawnSetup(bool respawningAfterLoad) - { - base.PostSpawnSetup(respawningAfterLoad); - - if (!respawningAfterLoad) // 只在初次生成时执行 - { - Pawn pawn = this.parent as Pawn; - if (pawn == null || pawn.training == null) - { - return; - } - - // 瞬间训练技能 - foreach (TrainableDef trainableDef in Props.trainables) - { - if (!pawn.training.HasLearned(trainableDef)) - { - pawn.training.Train(trainableDef, null, true); - } - } - } - } - } -} \ No newline at end of file +} diff --git a/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs b/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs deleted file mode 100644 index a53c0ea..0000000 --- a/Source/ArachnaeSwarm/CompProperties_AnimalWorkSettings.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using Verse; -using RimWorld; - -namespace ArachnaeSwarm -{ - public class CompProperties_AnimalWorkSettings : CompProperties - { - // 使用列表存储键值对,因为RimWorld的XML解析器对字典有特殊要求 - public List workTypeMap = new List(); - - // 可以在这里添加一些配置选项,比如默认优先级等,但现在简单起见,可以留空或只做基本初始化 - public CompProperties_AnimalWorkSettings() - { - this.compClass = typeof(CompAnimalWorkSettings); - } - } - - // 定义键值对的结构 - public class WorkTypeMapEntry - { - public TrainableDef trainable; - public WorkTypeDef workType; - } -} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs b/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs new file mode 100644 index 0000000..4ea44c1 --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantCutting.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantCutting : ThinkNode_JobGiver + { + private WorkGiverDef cutWorkGiverDef = null; + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + if (!triedToLoad || cutWorkGiverDef == null) + { + triedToLoad = true; + cutWorkGiverDef = DefDatabase.GetNamed("PlantsCut", false); + if (cutWorkGiverDef == null) + { + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'PlantsCut'. Plant Cutting will not work.", 847595); + return null; + } + } + + if (cutWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) + { + // ... (你的逻辑,调用 workGiver 的方法) ... + IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); + // ... (后续逻辑,确保都用 workGiver 实例) ... + if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) + { + return workGiver.NonScanJob(pawn); + } + // ... + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'PlantsCut' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + + // ... (Validator 方法也需要修改) ... + private static bool Validator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) + { + if (t.IsForbidden(pawn)) + { + return false; + } + // if (workGiver.ShouldSkip(pawn)) { return false; } // 这个检查可以保留或去掉 + return workGiver.JobOnThing(pawn, t) != null; // 使用传入的实例 + } + } +} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs b/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs new file mode 100644 index 0000000..13563fe --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantHarvest.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantHarvest : ThinkNode_JobGiver + { + // 声明变量,但不立即初始化 + private WorkGiverDef harvestWorkGiverDef = null; + // 用一个标志位确保只尝试加载一次 + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + // 如果还没尝试加载,或者之前加载失败了 + if (!triedToLoad || harvestWorkGiverDef == null) + { + triedToLoad = true; // 标记为已尝试 + // 在需要时才查找 Def + harvestWorkGiverDef = DefDatabase.GetNamed("GrowerHarvest", false); + if (harvestWorkGiverDef == null) + { + // 这个 Log 可以保留,方便调试 + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerHarvest'. Harvesting will not work.", 847593); + return null; // 找不到就直接返回 + } + } + + // 现在可以安全地使用 harvestWorkGiverDef 了 + if (harvestWorkGiverDef?.Worker is WorkGiver_Scanner workGiver) + { + // ... (你原来的逻辑) ... + IEnumerable potentialPlants = workGiver.PotentialWorkThingsGlobal(pawn); + // ... (后续逻辑) ... + // 确保调用的是 workGiver (已解析的实例) + if (!workGiver.ShouldSkip(pawn) && workGiver.MissingRequiredCapacity(pawn) == null) + { + return workGiver.NonScanJob(pawn); + } + // ... 其他逻辑 ... + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerHarvest' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + + // ... (Validator 方法也需要确保使用传入的 workGiver 实例) ... + private static bool HarvestValidator(Pawn pawn, WorkGiver_Scanner workGiver, Thing t) + { + if (t.IsForbidden(pawn)) + { + return false; + } + // 使用传入的已解析实例 + return workGiver.JobOnThing(pawn, t) != null; + } + } +} diff --git a/Source/ArachnaeSwarm/JobGiver_PlantSow.cs b/Source/ArachnaeSwarm/JobGiver_PlantSow.cs new file mode 100644 index 0000000..5994d2b --- /dev/null +++ b/Source/ArachnaeSwarm/JobGiver_PlantSow.cs @@ -0,0 +1,41 @@ +using Verse; +using Verse.AI; +using RimWorld; + +namespace ArachnaeSwarm +{ + public class JobGiver_PlantSow : ThinkNode_JobGiver + { + private WorkGiverDef sowWorkGiverDef = null; + private bool triedToLoad = false; + + protected override Job TryGiveJob(Pawn pawn) + { + if (!triedToLoad || sowWorkGiverDef == null) + { + triedToLoad = true; + sowWorkGiverDef = DefDatabase.GetNamed("GrowerSow", false); + if (sowWorkGiverDef == null) + { + Log.ErrorOnce("[ArachnaeSwarm] Could not find WorkGiverDef named 'GrowerSow'. Sowing will not work.", 847594); + return null; + } + } + + if (sowWorkGiverDef?.Worker is WorkGiver_Scanner sowerScanner) // 直接用 Scanner 接口 + { + // ... (你的逻辑,调用 sowerScanner 的方法) ... + if (!sowerScanner.ShouldSkip(pawn) && sowerScanner.MissingRequiredCapacity(pawn) == null) + { + return sowerScanner.NonScanJob(pawn); // 使用 Scanner 接口 + } + } + else + { + Log.Warning($"[ArachnaeSwarm] WorkGiverDef 'GrowerSow' Worker is not a WorkGiver_Scanner for pawn {pawn?.LabelShort ?? "NULL"}."); + } + + return null; + } + } +}