From df573f1ae76e0318b15929b8e99cb2e8adcbdfdb Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Fri, 22 Aug 2025 20:10:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/WulaFallenEmpire.dll | Bin 249344 -> 260096 bytes .../Weapons/WULA_FE_Materialist_Weapon.xml | 1 + .../Weapons/WULA_Weapon_MeltBeam_Example.xml | 99 ++ .../Weapons/WULA_Weapon_MeltBeam_Example.xml | 108 ++ MCP/vector_cache/knowledge_cache.json | 1034 +++++++++++++++++ .../Verb/Verb_ShootMeltBeam.cs | 587 ++++++++++ .../WulaFallenEmpire/WulaFallenEmpire.csproj | 1 + 7 files changed, 1830 insertions(+) create mode 100644 1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml create mode 100644 1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml create mode 100644 Source/WulaFallenEmpire/Verb/Verb_ShootMeltBeam.cs diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index f3609d391f256f37b9d216af20633e5063dfb351..9b05ab37992da159950e14c948561d79ca55d39a 100644 GIT binary patch delta 85158 zcmb5X2Ygh;+CM($?B*odB*12q-GqcBl)xc{8md(3AP54|n+Q@}+=wWf%?42s1qByb z6-7j`qN1^P?DthKSFiP|*t=eP$N2kxpE;Y|;CGO0|)^sgyuKIBZHS-2PIx zR;Ppec=Cb!KG*j4zU*Ocl?`|%2*t7XW>svK(Z%!p*QlTj=x<^d7#%Yyn)1Gj-D8wy zqJ%;P>ZjOYqeJ11tRMfz;(t@6sVko_)I$?YWyH5X?dsP!**xSj%3@{K7^KUrP;|Me z+~w7Q&h^WXX|j|{S+(<(@{~7_VnbMEg;KsAE;StzGnMkzy1?VHT#;2^P^R4)jjCVK zQj9?{3q=em!9~b+)~r^OndxfW=efl!TG_H!Lm8Q2FATP&EcR{AH?2M3 zC^sXgvz#kZ+xShZY?t9}{KFf_%J6C0`o`jR&%4UX0r@Pim78W47|Ihlo0^#6VUXoT zD>}zA+P5>#j&*K-^};S>%~oEI-3A8pHyOShZ%&n2xzd~M_0-oTbPOZYWVHixZ8;>C zH;`gOxyr~! zZt66msJfq;R}Z|qyX*ljG0UD0)^QPyZw{KG8Tnkc#jnI@|bi_RDE zTN}Tu>ThNY(Pb}-Rdw$+;i8t@eaU@>aFb%UhuMPb0B7}|kKs|<5A^H|GqMfDjP&4{ zphPZ4US)(Yj_vDiw;~W+0#B@NL)4qyi;Rn7KX>ow6~ajHhc57_HKbMcSeP{s@_gyu z^o+=y$d_p~ zQ>ayQ<;~bweb2s7@9v)ENZ;&v0@7~1I_ES?&uFp+#1{4HY+T%Uey^yJF%F_(^=lhj z*SwzIda8zQhio|cZH+%2)6baCp^(?)@@054s(dPaAK?u92B_0y1)FdN2WJZ zI0$FhHzqjxrLSG;aCp2P;UJu0-vo}>w&D4)J%bMzg|R6^#v9?-l|yPJUmU9%I^Rc8 zd&>(mw&+aT%q>e}R}CHHaq#I|!i^sc9c|1>RnmWyk{DOeb3scz$&{+6W*XR1RWdD& zoiqGmV`*dFv1vxh92h7^WoAU~f{ComFdyOL;2ZwTCTnhEzY*iiqI+mPhQ_;*X|fiu z^Ik+t%Ny=#+%?K$Ac9^$x{H?@2S1j`UOC?DSsRWW9^D1)x5nIUEQ&oeW_Z7QQ9dv$ z!bf_TslUmDn%NmugAk1B&iyGL2} zbxml^g|TUiMx&x#i{_%DUlz4P>OW~F zFu{}BA>De?S-_+(2EMU;@!duy1yp(5`^sV;oZK;!&O#_0YrUi#I`&yoV1R$p(o)#^ z)TRAl^4JZ_CZO>5%N{U`9!+Tfh-klx+Fv2sKic^0%8h1bkUe9Wk*6A`oqD%v)Wtlf z%`^_h7N6D+>8{gycmI1r!V4lHObO^bw4W4v6gtx$&14L_^-%1O(>fTDSXn4+L>sRR zt#)T@KnaZPR~o(R&Nec(YUr)lt}~y`xKsll#Fn2m3#09^^~JGw&g$pndaqC9Hm&cE zmOi$Aw^4ePF7XAbu9#igRC~RKf25MG$PbN?x__9tcL2$$<`-ZwFInMVVhf_h#xJqD zXpaga!-vs;FobyOe`ZMzlb?`jvJRkV?U&NLpJT5^OH0WfT#tT*6lTN77TW&?M z?my=ncg89jx_57MYW)>#$_n%06qGCrmU^UQTT-RuU9sH_SGT#(DS1SfJQAC@q1ZSQ zTd|=h(kmtX`-Z}KBs&r%ONn-01HS;N)X{eqqarrXtc(%$RSjz)qw#s`CDQ7=Mt z>7K|mS)Wm%0T5W;&?`3hk-FBO>q1y@u+V_UXCHYs&G@--`;$|#;A#Bm*=d%{3a0%$ zd@FpVfyHOIar~jh{?_|=4c3+j`x5}8bd z%L5vG#}0 zjW%f_#~qo8G7vW_w)&@D*#w+{HZyk1PesPeSht`3rsa;k^HZ1XSxM?Fq0SO&y1Q}o z&;86mmZRBRuq8E{E1F^6*3FuYOq1nFYBonS%XT-u{p)pUW*c{G35$Y$TX%f;o6b7F@c*=xci2ckeYS+n9Oo_@Oq&#b&``KqQTQLNYv=~_UcJST>`Nnsy%(ej8t1IHO3yo4^Wqf_1G14fy z_t8S*kjpG^-@C1yF~H@=7K^1eQd3u?fe&}&?0erSGya(#8~;*S)KqN|Dn7x^3yc05 z#D$e+*o96H?}5TA=XffW<&64M!1t-}+1G%Um2230@ifDIP|9A4GRXHr-V9$0eDFFU zCJ}*|njBmTCkxE7&qjC*Mup3M3hlJ_p@3y$0{3KBs*DP33)9qpRq4>9D@`I;DWMjX zrqmhzYo(?dh?ah)Eix541$uWd?Wduk8Q#iaa~U+0_S%>qJ+)UOsm#n(P5H%26>f_k7Z)wg$GZ1}iC7~|++p9PF#ja$L!%gW8NZ$qX!-ToQVYGpd$+X3fh z>pt>k=ao&%Qp&#D9fdxQ-dZqs))dT^qzXRp|5LD*ONE1Xpr|8J=iwg8fU}tDiKrT4 zVB5jYQ9ad{?F^iEXycK8fl z8jbiwT<}tMNH&ZLVk>W}Dx5212k&H~6C69q0n3u3wYN1na)OQIh?3`SXdk=>N#riz z;O)%;D8h)O2cKQXVYd>AFT=zXMOXJ`P<86bc2henEogvzr>2P8})G*Y3 zg#*nIPq+7Zqh7Di@AVJZN3)yZ!Klug>G*GREtx6fAW(U-H=xHsL83rG^EfE<7W&$H z+g1$)X#izuQgu4&S3@h)L=9h&=`C>dih7F@T1njn&0{B^$4(4mCxEdNNQ@mF&vcCa zUt*iKQf{;Uxw$^Ek}uDj=PULW4|rKx>-FWjqGHDu))`K{eJL?QhX`LgZ#!R!w`4$^ zg%Kp2F7TxorxeC1)y64<1w>L=vvJyc+xt3rJBV?Hu@aD?=!K)K)6w*nC4_fO7{?JM zfeVA8G-;et7^gI098^l*S-S-a`trT`Rhi!W@F!Ry(W^UoJ5|+lIP^f}Skv(l1=v%A zd}tcVe2Own91gy6Z+R7Z+Ar*;H{bEb=jckPj-^`gclLJH{34J1&w$m|{B%vF(tTYj zmA6X;V!#57`>n=lJbIu})s5z9g)YhadUR3~O{KnM3~)=AV!qciknAk5Z)4ofO0P=m z-vx}W@K;b8Lkz>e+<~mv_RrcGR_ylAhW0`5!&G17&93YmeiMVOygH{dBcg-!>d~BM zKZh}03+MItvU9WJ_jfX?`s6rqGbgoZ64_kz1s3Ie=*!8?iMK5`j*sTJ!rwtHpW7Aw zp3gK__y;~MR~WI`?Mrusf8i4&Syz(lY058wp04n(#AoF;*HiWU2E6Vi&mFn34X)8R<>5GGN~g&&7gALe)LUR~1+;`(9*LImorlH_`L5 z(sMGaa#UJV{x}4Ff3~V@r_wM7-Up6q7dWg9BoM>#fWr@;8xG>GpaQv2;NLP2xZL32 z%-&fqGS0xN5DZ-3A<%Puw^^_6F2n<6(-mGGz^Ayhb9B02YIId*Vfy za<@urW!Vp;si;R*e7+u*x(Ow}mX_;akbaV$&Jjrjj87jVjj`-9bE!IH8Dvx2WeD1r&bQ&cT9mHJj|8T=o# zFv4w;8HjL?VLA&t?x-T%P^BUg&ESe6pmz%?>?!K|Jh`5v@5`u^#W2TXlolN}EXzu_ zpF<_t|BVDGd}chu(!%k;;zy!J4^(E*lqtR7!_e3C%iNvDG^%!4@uOxg`{YN zosL!M3$RkN2HXv6p9<59xCo}I&T=>1nKaBWU4^eeNOV@Z8O=m#<=-JG59z^17b9_r2!jDHIMxYk_cT(RTLrOm%@?0qa(S4hp410wRh5U(~oii52g)vViunC zglq%lM*xRm#G<} zRYr47*byG3tDZ9K)6eg#VUaw-dRbL>}{ZKcw@tz-gpHVYuU214~=Y^8IW z{I_ED5rVm zT#iCmi(nz-cw6cs)Wg#TtVGu>euJY4)oUX0;E!2?CBU zH1HNzKr*d}3W4klJh6N#Yf-PboYo`Hej6n^Csu5&)MaSe_Y!91&?dQW^x)vL$$G2h zI)sw|mm%31a#G?}(R2nXiFRyZj;ks$KVK&CNe)$Thyt~^bQw^M>Xd73Ar^3q3RQj_ zbF8JK1rI~4Wc8*Rz05Kg_X9A5&;xoa&t+K3__d=vgO%ma&CED7m&47Czh0<^C!mtN zyxRN7mE~CP9aO1@F)C0!7ddEZp2DH`ronf?ymC(3>=dT(F1H6x?Nl0@_inqvwf{gp zl{iL|=#?Ug+3@8^Rvs;)rG%(R@MXJjDzJ`2CM$S9N-3B99u(lxPa@^&MDTte*s4;e zJ_4@#50D1(Z7d-@vh1i#wD&_063)UX zDfUNXubUL*NR>m*+UPy#?FiQ{X02p-%;{u#KIUY3;O1nxN^nH5Vh1}cndQ>Kv>&7w zRrJ-zf-X5`sMwnter#@$tD?RZxX;jDtgtJ_{{{P>3jgP_2#BVd!y$%$Siy~=J`$56 zOL_R}f&{dHc%-VOrwIS*sI0`fEf#|i!oxt!6 z+(5`x>PK;`a3heX-xaU!YP5~cLc!3il-@S$W)pQ*3)DiQZU74EVT)`djMLv15dGR; z(2IyppOW+-vu++y)hQ@(_B-X|PLwk3!w9M2nc#~oMuJ!9cn4nY4~;;fz2yNjd=In^ zA3zd(2_3SxydX4DNLcv`X&P1(ay?>idE3x*lI&Z7GQ$*S|0q+1{l0#DtRElXlRq-=Wz{35PJ_k`scBPHqG&Xt9)9lqtW*e4ll&ShTgEh z0@Oh*Trp<$a;&V(@EppS8Q}xVYAx?cx|)_Znew771%9Um%CNSN5@|u?TrH9h(`$*y z%C)BHFZZQKi1eoG>g-P-NG|crP$BmTN1N~iP$3;=kMb!Nb+noQDSAK1w*iGm>EJQF z9;sD!Lzrd}5PdX%X->jljzewq7inZ22a^3c1}pugUPy%wi37`yYFgXSUZE8^G|@tn zibIbJshvaO7<43-gboX-G}EE6i|j9?wo*^XJ(Zf2W;sOKJ3-72Rgh@k8vToh$}kuW zUbsw1wM#UshX_kFi*!d;LFhOkIn4@>0jYTytPoP7Rb!K-iX8=_M-LGgTr`*h-mLTi zPjkE%CzROTLJ6`oEAecq5_Qv(q_(=I@*=ZN2BMfpMy4NwQjb5WaXQLi2+ZK^89nrW zYEd2O&DE7nqiqvi$w0_y5xwkG_m`oc(uxzLtTtuTsyiW7?wKv*PEC^j?`FWA8D$X< zTuS|{qil1$at7Mwl*D5~>hVX(rw;Y7|Du_~}t+h}5y=2|{+LK{My*DJFq$l^8Wg4H^VZ zZ4b_%5zam-PMniD;Jp-+(KD;v))E|-`rM%hMxi2{^id=GN;pu9P@f`ol~~T}p1Eqa z{Uw-}r&cpPUf;v$a_qbRm#jd9VP8*GP9@(k3ij`mjPTRqpY$-wqB0uj(kq)xc}3|< z3`#-ztN<>%r8aq$*J`O&m^KJtAIPm{HrEz{z&qEH#Mr7hk(N)ylhm;l4b2obw5tYg2(_zb;EWF55;mP41k`_-Vb3yuOY9 zwX}IjX`|wQt1;S-sGj}bYGNhJ(v&!E*Sd_1SNAd6N3Z&?1?@!#Ib}J4;$^%R#36|D z3k`6fo8cu$n@k?$^H#;GX3ziYS~waA{SFP_|GJcq=Xcui3qz;OA*Jon6d4MMo|kGh zhiofkI&-N>^d|8lGt8X=mZf}XK;IC?nCz-Ln)YXiW_*jN0@;=ALieN27O~X+A|C8( z3PCh^FqEM(Fme74T5W&lO47x6{lr%v&C_UP8!(Q2xC8R{9BhS&lN)H^ z(=jOo*CN3^MBIbZH_7AzynO|BD^9^xEGe&KVOFS{q5RqXFHU+W`xZ0CHuQF)m$;zf zc9wl0><9`88dp@+uDr@L`+fv6pBtAR`oD>yc(I*se;yC^GyIl>^D*%Y`x)JhZSe>D z870wXt?R#r8FVY`Z;&nW+u!1W&rqb)B#7r}56`i?;gm1@T{C;|dt{0F0nhp$oAH6* zPb4UB8jb|h@cs{Pei%YA8Q_d$U@p!CtzKd_`(hZYI>)J<05AIREP6zEAuNs9$q+{$(g4*6Tp+Djc1B{w3N5r}6e}y1< z7pgZ)=sekO`8}#~0D|`X_?rWaqUd~RDEI#|it_B=5=8>A9aaYN;`BVuvN(0bqD^*H z+V{2dN4QIrO`xd)XuWgyO-~q%{x)8tIv&n_ewSt*ZI9!eb($JB$FY!XEK&=(6>ep! z?QD}CN-#Mlp$wIm)BhY$LYZ?p7tD%3GSCR*>os#a=JZfC@C*fYv*Vu+G>TG53lgMx ze<7WfAkFy;>GA|=u8@jS>bgHcau#s$Zw4CqsSIBw7{n-_rwPNr6bbF;IodX_3b3#b zfx(%rJyvJ}Sj;-k(+DHo2N`8OW#a9?wX|O2>J^UJA(*>yV1zTYS(+DN{4~pOi(5sO z#v2A1qjHx}P`LS|AQYJwe{GOaZu}AdV-OBQc7bdUhfBc+a{6CLrw;!P&j=ntVg^q| z8vX;x9FI$GHZN=5pP9~~L?HCD)0|{Mc}cC;yoI5(`8pVjusRBJ7Fk81N{`TrxzvvD z8EljpP4R<+jXZPk{P=5wjb4>a;9h$vj`gZ?)4gdyg7%+C;1`KWB3D^Liq{M=hM248 z$4?((3^q5-k2el6I>VFWZw@iq8u!P48e+`1a1+8?J1{TXg8y3!taBUZ( zo+-l~Z~hgjP}%~uCiGJL$)Qkdd;FuJMi)GCh8aZ_Cd$|@BnZ66Fz{l;;D~-Qf^N3F z!Q!_(XX0#Ud;El9#;^=GSpC6sRBU@BFMiuFBda?l;7v#x9z0m#KI&Q6Uh&XMbl{0N zmdd!?g(15u{^>Adn`v3`^}~%~Gu?_`HryC#8bx&NzG|dV6@XDZ zUd!G9x3>}4aY>V((d>xdKGNu#?_wXgcq;%Q6bITXO>}kqtC2=!t4=T#Zh`VJF0^G~ zyz?kye1%)OEL@Lz3wvj|!+DThB;JW-0xrRr_4&ZKZNC-2Vw7R$d<+?xTX=27y(JJo zG|D*M`V(H-uq@tbv@tk60A@41D!yT~QDCf=$B0wWD@{hl5LX!Qq_7fk;1#BQ6Pk!O zN0A_hy+^klJMk1;Ii{j;tlJ^bZkVIRIQl1pOqPfgH>68CgTVfUpHThgT$uC^Jv^oO1an zSN(u#<5K_}f#p&9Ak@j4!+6E!wlie>RFx_-^y?y=@QT=igxEYB1B<$T&*2Qy&T_?# zv6$1O>7rOwwo_3atx{29hAE(;ZEYd!vOWQFW*Py@q@mwv85{~U^~M^Kb`uNs&cgA$ zNcB|u{I&crmG{S}rhJ}?d@b{|l~qwwV%lD?RHXFAI#8V6I1AYdOHO{zV5QO>>*9yT z8U<0ZA=<9T!>)qOs|xLhpn0&ZxIi;nd2WfTo9f9*@P_mM-1apFEE0MUyudk zHv_l$1Kr$}>6PjIZvoLy8Xs60MI`U9XOzx#p22_ncBk$kqeR2h0HMXL9FjR^&LR6 zPlLczshS}?$%XfK2|NX*NDku5JKSTE{XND^QWuU&T@_2@n3*_B*Jb~c1gx*|zH8uE ztgjP#4}n_pel^(9LjBe0^_`$&Wm zKz^RzejhL4s!HIh+v4*k8ojYk+CI_9Kb36ZE@+D7ueI^;2fHHeoREpNLQ#(_wF$nG z$%&`7783d1eLKqO&#o)S*A9Xz{N{QGkcn@uW5_EjBg|(IbDRgCDi6k|%4PAINyf}F zvO3>HBPWWQ;UscfeE%e)cq9w|C+$*#-=$!223H(e>YF+hU8<*|;d&|>a=c-sd&K&e z#wQ$a434t6jDyRNvDa`aYKLx)Tu!l=ib$^<1b-tUSWMCt$Z_QG8QF;h4nVem=k50~ zW)r38++=Zz%4~G6X%C03NRkS|QC1tCicwvS8$P1LT!&kNS2L?6Hd(77Qa(73bOSoFi&~jsKBBq-1&Ic9WCQXAqLRWX zYKe{kzL0LI)`6B9Xtn;`5~W*PfK;3r%Muz3+CGWJISD`OLH zHL>R4msh93HrX7TxfqsLgE7pgXyalq;?`~!4E97GH!%nVdm#^nnNMMt1D;@S(3Fjh zuTwGux5}C&3QKJbSc2ynsv5PYjKVz>C(VfLMHaW;Of?3I?U4n@o_N+&qesqhQ2wpT zY;`!@v?s>LPBp61bHo~Z;^C=S98!pk#cPqV*EWyE>nI#!k#rf0MCh@&4>^uSJ|ov4 z!B`|4#^S5aSQM%7WwMxIDVi9IRETa)q%xy+A2zNplF0RBEzLX*p%ss# zIJipCGEqsB27y&($>3n*r2k0Oy;0!w#^Ff`Ytr7y(oOle5M~f}gV}|a6dSUC25xP_ zJa12Qx`=o^{>H~&Jj3wC-gc!`1ZQ;YM^+Z-S!xHIp|w;* zy2pwyJjE!8zkH&R---xW`Bs(--_8lUAl`b0krlli7#p7mTHz%Kr{&dcI)^4B!X+1c zkw%s=c>%?p*ETN?2RK}>1pKuTI@B$s1|pO%>vv|bj6@~K=>CURm5~GF<5dv8(U50w z7&;|>`3xh+S|c^a4)$t0ObaadUj%ARPZmwB&Y?>fi|?RhGb|4@&6G_8X=2$bEE%SN7r4!Dmb(&B&4G#)YTia#>T=wabw zW2@or_z$y;svh@2km;5m1F6`Hdp`F94&862Ug#l9=m2bn)!S9^$+L~pPD3!l0>Pn3 zgTs(ul%og&{HO2;>WQc}E5u#~0 zJ>uDe$q`Sy9`VlavWVp)w44m`GoVw-I;vakdLSBJ0J(+JPeLn_2v+V^ebG(0Gv;-L zj|a87$`vM;8U6^w;&Gz;R;TnXkQO}W6$G} zq`*M$W{EGRNW?D!G)pA@f0LNv-!Fm9nRQ-{uUTODjhEt^78nzwB*1lE!K1+51I2Ja zKtQKW7EEi^PKAEVs z8l8$d$P6UPR8GVVibB7AB3J_UUeroPw^`7V&%_-?Dk?SGGaY$uv#=$bG7Ac{EG?yN zOLEjv%f{quVSapUXuxmJg0O-D``YHJi&_>kYv-`KSH(;^r6x@ldd?YWbHQMSNee{g zF|PrwLvd1^*k8^F*v1qO7clAJ`QqWUkM{7FkxP0w@!G?2c~;gS)F;A3JbV+dN!Q(N zhF=4vsvVvTCBfO4G5A3nu|aM*CAbDEt_b}PW*js8I`Cp<{i9?VOR&g*t9bOgn~LAm zf99)c$*1L~N?VF=R&bLm#ZBKpO^%zsi7ZdYxUHFph=~d@#@~oXPcpi86~0=$y|W^3 zvq)H{Zy_I{wkp(s%FXaw@fT0Rizea&_I28UHLyuuhp5i?MCKj-M+&ZJ_z@nXprcFAJC?ea;t*D<1STQ3LaUQ(d zXt98O7X+t|-bYpzu<5EVUi;}TBHd$+N>iBR@IQ8O@nt6?xD&5JYAO5W1LRXYs-YQa z<3*$;ZYFn?w1;W_fPI7RGZrpL1p@YsNs4A}vPwA?rOR+OjHnisN)uF^Lbjl`Ahth> zn2bg@LsWsyG+^I?H1Z*IF~d5gUiei-7H+`$y1D;Jjl4%EK>yPU(*Mku0YCq<7qg!~ zA|k9)EeZ!PM~Nae@*Wurj*?W6@W_uvj83%}TzP{SUVUv=iDWIO@F+Q<9q0@DWGeKD zNYbg6gkPvkaZoc%T626Opk=mgDN`I&+MnW~Y(xdzBjKb0@lhH@`zT#2>7!yS@lpJG zi})xNiZBr$-F1|YehPx)qn{&-ii%oe@!lR4?vXh1sb0_R(MN%kPQhELPvdh=G5SSW z6cgeXlptx7)s4*-SK2SGr19dvI%{_Uhcj^`3Uz0pC9tEt6iL9DPQDcBn#T+iva7%t z?22$2!K-t8@rorNb&$giVuChlUn9q0!e`_&B=9A&;cx>XNe&vd=6S+uhNWoYaAObb z!<8D55W;%3kOD`@;ghjyrGS~vtRf>lQm~f8*aSxW(?!jJ7x`#*=_ux<2F@#a&2orIS>k{rk zQ}UhVH=sEF@g1@f!`$j&7!qL%vGSYvy~~ZNDB0i(KjIO_cZgi`%R)vFFJN)wEM&f= zxPVBNu`T6Vu45Q8BEnbDl8@_{W_fxYBW#6{Zx}L?@?;p1lwu9-Wor9rO|1~G88oR&-Y=+?CD)< z1(!Rrer2ut?F8RV0OXo6rxL$h*RA#*YVce9!<9yl$|KDhV8$fiYFVnP6}GU#v?4xq zl~GXf2Mh4m9ZdOsy*{M>N!(Z1;&K7rt@dHcSFZSmRYteTHzV|wb_&jcf(<5K=>Ovz zG)X?}2|b@e!Z&K}f8apVA-ygndnKCFfS)mTL+U|FO>@QnTxFD`KSdzJ74Nj#D9djJ z25j|nG~eGyYVC^8T5Z&H%q2rzPuK0n~xVUgA{wzdg6iIgj z`ORvhI?B>`cb$8RT2s3UszlmS9Ab$kgz?hU9mX%{xr48w@v{HS2P(K4yunjh0Pj=X zmGjInpTQt7@>?{w!EcqB5orgknHed;10#Y^@HFtqAs{{*i6$#B!(PVNcwDT}F^{kAMKq{3;@D@rCGE*huOu}7{SKazWo&HV0=U}|r5OgSS@VewDxo(%} zEaif@5MuGTitP?w4ghy5(B(WZ7=Qz!W&=1JWDj=cH*cj zv*UFkkY!Oks_?xf%LVD-RTIoGwU#3mT{eg)jNd`R9qwz8ad>%WM1If%*8nIh<)hV~*W7xGvT?GGJDAZ)Z(zw(XX4LTzeod7e%6KqJrC)hQt zkx$)du@$enR8?u^Tl7IQ)vPN*F?(%NyG-x0%&PHF?=exYnKSq+8fw=;8#63r&On)? zwJUJ6JKQxzHTw{H7Y7CO;->tkG1&Ap^1{y3jA7#J4$V(m@|=L}O^J^J>O}@t_Nv$! zGKmPuah8mbG5}>3c^;K>7GXmoOpy08PZzMvVPX6Ng*(FTm2mk_u&3@~+JoSX3kJ zDdHd?&gGJ2>WIM*ZpH*7z-WI({GSDPu$IwV$&kE0no=M%1axs>@rn9+l;@p-<2?2x z%mR@PCM~um%e<%8tB;(H^=jAnbEo5_HA{-GbfbuH6;k^SMzc~x zp-6Wk;U?sg6(teD5|Vl#$FRm{qyh;{O*X^{%o7qPL^g~~7BehG6D!L197{)~hA=A+ zqw5$n(fRXn^(>0s3{7GWH{U=plY9~yLT9!hmwoC=y-y)J6(n@}fIgltP(t{Al#U)P zy>2*_O(m@R?9yQx;fF9UoVR`;NnjLz-WtBgmsmUuGQe~l2<>Awv`kc0OSpFZ{ z5vvs+T3gj?bmRKUb~uSDFD z;(m=W$0Pe7 z%cB^M1pGM&SWLgF>K%V>ozXo?P6V62c*sRbeS5JteM@kheN)J_8_*#U+*qN*v8*g{ zQ-yFc)_#Qh<9`)GvKj7=lC@_;R8-3XV4+Yun6tg8QP{Gm zEVM~TF}#4uNPxoyEVZd~X;YLp_-LY}?MZ;`)BUxdJGSo!OoY~e<^!0g`VtAgq3N4n z%=E<)btFjg6@2QPf|vb??ihnCJHwe&GMwe%C>^a>`3P%74-zA_bKx{T-e$c~932mwoqxeNN7w5}{Pvf!ieaH9>wCzR z-&nKjxzRZeNc0>ZdG;N^q?UdKrR_V(HW768FrV^^rIAT2h2>cSGT?l$e8p(CdbO4I}JM?E@nrdn)B-Tvwc=Ue-k#kwK;)8?APJjW_T*{ zvD^RMHb-9mb*qK>tcGdv>2=2VRx>Civ7MU{zqQWj7MtTio9KFFRbd|QY&%>D0 zWCxI|HWj;}!>ncj*dr1+N`T&TWm1jVpeEfO*NZ2p`0R*LRy8+O27&)5qZMV$i(elx z`bHOk2{$zn9v4w4f|N`3;%tE>6*l`F@ViMP=0!-;96;cA)_KJ;7v4m?u*?*eiesJ2 zq&y~A=*Tlw5sKhs&x-;?1}m{_=T9{CNmKasF8t90{YA1%eulVXe04p($q~lO&{4_X z9oC%sOGTH$)jx&9IlfC?7=Nf9Q^EgQ#4Oth4a)F?^UB`D_<0hvQ2lZ4iNeg|>o9x~ zIgI0jAif;qBSF)bHE_9EexQj47~15HoJ@`~{CJ**&bX`%$O9^mrPDBNCHdIS_Or^hK)>Nw~0& zM`Shg0pY^JaY`CQIfW2ug;5ujAbh`RQym6j5sx~takVc*rMM78)h21ti_7Uxf~^w$68YK-6&m>qJooP=

ltK5x>YI(R<-%N{qfLK<+ha;sjXH(t3|oqZpR+T7bDU((&9YbTHP-x=2!!< z___comPi=#xcrB{ARN3LwcA%9(LK19oVd3pJ;-aTMCcwo134Bu!!S+f zq8POyuTwU$_%CxhkpdBag7Nw17=b7o96Sf@l|z<+(wnurXqI&%f@$cRmc7HaSvjyPL)OBUh*7_efqm{S*x3 zstU*LH$e*DhYE$`&dJ_}tR2K;%A+HGkvbI3T^FBsuF)qt7_!9n)JFGc+k_2UnJqdr zsc)U1er;h=;Kxe?-h;;{?f{-CMq(PesHG{ik%aP4Gi3;_lq7Ec3F*6|t)vCANln&G zXh@11qRWmy&nS#a!Mv5JhELqw3zJrV4H~JfiLW|<(CsWrv=cA9QyrHa^anibb5SFI zPGP{4x{Z4&=`2vpFw@XUs5NEt=8Rw=o!vqq#}kBdGbk-Qf!O+Mo0SyNT7f3(=H@nE z2L@ejf_4jOQ{{T+J`y!mx31V}9ZnpQV^XSr8P!8V{K`#6iP0|p;3nMt<>=DEk?TeY zl6u|9YloW1VM3yezve|HBWGe!iM5M>FjeA>hpmG&nDly*5k9$|6v13iM&)lza6w6{ zN0`VOvJ-}Aawg(8bt56XtDc5%!9`!CufJX_6Q=A9JT%066^}p9AIRgMM!*`q$nyL7 z>t=X0Qk0HYmBAZOAoZ1fPNWWnomr?p{`L6?1jHQm0n4kXTs~kC?pmC*T9I>DFsxG^ zIYp=j+(%=u!gU94L~RjjtFd8n$n+n)36v_^LAT`SqT5oC{MG@Z7b|5PN`y{W#U5l0 z;c$HaW}`5J`6jE2JDxKW10uq@0@5bgmQr0Pj{YGfrMm=VU-4YALi&oly038MC#A2X z$+Gt6ANF8ZZ3JEZya)0P%(MB(pDku!%cT#yu@6&jN1O|SW9d!Ero6SP6a`36vAes{ zUAaPkH3R~G_-!kmm30jK7a&)EvvfX@*N(#`*-qnMR)|~#*bM7*3-ZaIRg_%^3|T@6 zWQd$cUVQR`hnR~QM1(pL6MHbq&o=RsnNmG|H4(5>ebI9Ms>HxkaWPCR3}Mk`6Jwi2 z;VrgVG&SCqV(r3uw5e%``;uG%g|Wz~APTnsk-8Tn{L?`r&hbP_WXn9AZ*%ot$GtKFUPGX>#WU}2BNpDe&< zqx<8pU0`%9-UeyTGA}7+A_}dvZ;kseG&26FeX$5-Bb|IS)f6E865boP<~)$E1rDA3be|={}Y`&RKP#abmDRMNR8>= z69>uPNIGu-^PBozUFTD4Bc$Hm@7?+MS>{{%Z6xg~>F;DxyZYs#@FGcP z3#Y&TJ7X+0x*vs}HekyPSZoW^V81OhJnB&Wkv<-E|4^n4%Z}g!fD1iu=X=zWlZhD` zxT@5nA}g;dZKa}XK&Vx-*HfdnGFkZXC1f&2GTkzSY0p!yDz((LOWvLDQGW{&b8s-z z@O4a2*~j#;l}tagnf^YS>D1v&k3aoLpT&;+Pcq-m_o#=LQX%gpRCi@Gn~wqyEB;_L ztGTN;F;AmqsD2n(yZ65uC-lcw5r6f%71*_(1f?z2t!l-29`)OHwx-tzrd1H_Q6c1W z)s%GydU@2xqUgTm#2;8go{6F9Wx4pt@&mnc)u+ct$<(d;kv_SqpcV69y; zqNU`#tQ*sn;tf-UXYf8!A0Z~HP7+kxAw<0}nCV?`H;=kd1U-K&?U8#8(bM2{<56-MIjcLEq;E(Z1TJXGM1qaBZN7xw9$awLB88@5S!8SB6}Fah!u; za;}+1K_{QUG&q6j17f*<4t&!gKoI##F1L!NyPo}!7R#M$3=M(QOVVb}FNS_HVdXGny zNPk~3f%sCyiCpz;fAXIo($11jInwP&6y$CKJeN<_QEQmKxQ%JwflMdQVEXjLt4i0o zMqftJnbIlkR}){-p6M|YkMt=~OZT(amx~V#ucqqXS24X)V!-z@Ec3($51r3a4{Sct zCyLexuwMq=&qGKUemm0&Nhgh=h~+()PFT$zbzjc>ED`-o$OjWnvZA`T;H+`x45NHQIUf0n4v#D_l)l66`k(+eb+EDSd6 zC{YEyzs`%Qf8!PxhUIlEyKXAeaVIc!i+_y0g9GpBnN0sFwd~KPPwcH`B)xnrqe8Tc zRImveS?aNyiHe-Z%IXo6EcI~%r=Q0Wo?EHzRd2#GzMD_#pgUO2j&;m8oy{~Z4LBsu zxO)kyt)#8T4rTuS-b^3qLe3@YncjUe)4oxOeH{*rTAr(hjHH8nD8BkX7;KhWk2sIX zW*G}VD_$~N`ma+N3r||bG$Nz95jS0^9mk1KNU+qoGCOp+gP8ZPVEWLxOpCTKy;~Z2ku+(n)M&%TQIBc|6IrSr z6R}6F4YK;$4op8;!}L8#hsdD%Nv4qBt|k6y5w}`Y$;Jq>)cM^g;YU<&sX;QKXJ10s z3yMNRQ45B*DE$D2t4F=dvQf1~`fm~{w$#5Q-rc^66&xsMsHs`YG+kQx%h)4*TB#p1 z--NGtFFDYwgDT5qT2;<27(0bRA6mm{>74a}^V+H_Z{p7lD-+TC~}#a%8w zTq`CzL*~QVWWL&U38`1bnPy7$uiQ*Um!Ha6qkTTp`vpH(2Ir6MSn* zbVrjE-X!^Tl2;Px{-~iP24iiAku5fRYArEQ87a?6#q-1-kI6#j)stwg5T<*Nx`Wc9 z>Jw;csn>2{>x*hxIQ=xH?PMZ3EK%c*_&3FvnX(4_a04;#NPo|gz~Yz6&V)rV z<%kD-AYD)@RldJcyeh^Ne=-tjbg)!#gRF4scd}T8EFxY!zU_hfZY+@?|balS!z%%zm{PoVdcd zfH7d*a;87lFcO?3mK)NGa?X(;_Q82km20V2WZyH+Pr|25DYQtIN5{!R<8LPtbF;MR z^$W=Jy{wU566LOv<;f=##NaYeKM;Ey8A{B=1uWYQp3fa&4=+>va4wQIs;1w`XOD|E zgRf(oI1Z4B|J$hJ0=sLbBkvMu9iVwQk8lgrY9MK8DqEmVfabv(IRdpib$88XK&=I8 zTD`mG1yI@v^vlrUKAB)g9L- z3H^T2?wW_yV4T7c>TuHTnsLT3HC7-6Xo)dg%@AlvdrBFhW(ssEpn2Fw&r${qu(#hp0HAq*LP9GTqiJUd)ECe^{QCVmfp(p@yXGqV2+vspop##p znri^n33NH2tBm<7B9JY#`RZ(eP7vB+72POcr(9OC7{3TYWu^g|htE6CR~rCrTtKre zRa=Di{l?uj4S+5ZT2&>X z>M4P)LhJ8?_-6zfEzr5@Zvs77L)s?woInku30j|dhcVwE7hw4?H9GLQm+eieLK>2tA7d9>O?}<H=z@hb=@aenegT!rX zch?Ly-@z~N68gB5Zux;aB2ao6-SPwVhj_w^X#GJzP1-NUYv@nmyaywFmWg|27-?-( z9MC-TBLIZ@jw0|EJ7{z?1vIM#jG(y<|ZLHEzjugBLezDyA zOtli|AjbA`^9z+P&=~@KiEI3}SyK8O&bb>&~1KJ8`xAa{I8h+Ks1`65 z2~<0qoJGb-0=+g7)thC;Vu7{_t-@F-(93YkgJut7l|UnQ?2ZELWz-7z;c$u>U_=CZ zQ=m~sy+HGJ?5=spn1%5oy*7g_oMW6P(3$X(gKD0!Nucgych`JsEHKU&XcBDko_UgS zp+N7$fj@;}7YpU2TSqhXtxYdwaUhH69gcO(!-mW;`d*uc&Wc)ZAe_FQ5;h zWtJH?-WF)jB1|N%{l;N|&IHuXc+z-BpyLrfmb;!b-WTX!qV|)<#{w1mch{_TJ#Bm@ zPcyW*;iEyFfh#Yp92?W>>>WU8dPnpejH&xm;#1f$RcW&1LoxCE7)7I2J!ndT5-&6u#e<_=euIaHv2fbMo> zo5KVu0rV~YwD?$orjF3iBuHtazD8FZ1Z}F&js@ont{n43fj(HVyXHkeGXy%+m4PkC zoD&uBbAaDz=!tg|)x1UTpRgXn}~?ZVnXaXIxo0sAA?Ifo^O==u&ftK$}FF-R2m9x@MEM z#~dfnu>##}P8BHnBUa=G)m`SCl;aJCiWKW45L=(!xqeB2C54Yx-Z5`4})Go|1Q=2 z0_hh1YBr{*_M3Tk3g;2?K7shD;X(C>`9KP%ay{hQ2xq&mjx^KtXbLUO^;iOmf|%iY z(uFajy3SPiW7HnkGcFg5-*Ybu<`8Q3=hm)grNYhWq~*Gv7sw@+Y43VPpt4q^b#)z1 zDc95WiO^O^x!$hNrM~*!_@%b3#z5D1Lezda(t(P_h@)IT2u)jNvg?l&q0?M{3hf`_ z2{T+SHwV{oV&IvsGtRyX}=DBi&s2y>EtBsqk_sTN1VxcQnXuYIk zR=C;ofW6q&Uvr9-=yun@6z~$)Aa`fA zYfib#QcnzROtaK6J@;dNe00;)L6%DIR+w(7fi~0Y)-%m3+Tpg;#vvD3UKJ~uGsvqJ zOBzLLsa^|6?KFaN&Ks~0n0{pukm`NwQ5%ESB58Q0^XKD>zH7T!$42uW|>%KX?U zMJ$%|Y)OZoelak=)iPbMo#~QwW7^>uXFfSMGBg>{sdgs~9U%r+2Azhh1Eto#V z%twEkOY&J|x8nC=w=X5?bRSh&SHScX$)5v3hPp!15tEqz{Nx>OLv0Ez8)T>%q19;F z`B2wTAMapVE|mN3LEl=Lb49OQS1a#u_GfV8_vT6XgtRPmWHOt)4uEjos#eo*kEu4ltOokjd| zPz}{K^c3E7U$$&3lTJXcF8)Aspa7F(*gD^1s|BdUL* zHdS=}Jfb*HHY@b#x^OhWpsZHg%NQadTLh8TZ z5O`9nr!C?C-J~5yr-s_M`E?j`*XH+-ZrV&!U$Xggq_=MV0qGeRkL_=$J`GcmKU?x6 z8qC27zlqIgHTcAa;wh~LTWa`mZ0ki*%hF9_`&;VCa^f$zk+xhCMGxWq|DfOT+kLg0 zd>{m*!2An~k$+CoNt?=%*Y2}VFh8Bw4VY)dm3}IuAZ_qsspiWI`+=%?bpBt0dGx|z z&GGI=f>OXfd-E=9_+D(%n zXXC!%0UCJ*@>xBYZn=S}rhXh@>u>2m`QGDMs(NF2ltH72gK+-nRV7mz?kZg{cuK>o zlGfeC{JD}cZ>W=R-Qk|n@HnWbz6(VZNHEU3llh6IOqWY=P0de}*!r@ag-@RLNbLLQ z8ant+gl+i$mr~&6xh%Y1y!Vxk%%1_K_Uf+a$x!0*T;>Pu=#bZ5U2saEsJ+^}?xD2y zih|lJif*r1O?#&TivGVP8>)a&GOBJKQ|{`ix+64Ns&im9TGnwkJ@ac!Fot^Th7d6Q zZ>B<@Ol7)AS~)<{nOoS7&LfGxpoWHhZ`cLBEp@Ae>RqSPu3r_bgXNkQ#PE^X$*9s& z|Gbgumopf+qHkBzEL|&@t}I~Ma~{*bie5C7BYT1L{W|nIMn_5o7hl$Z>qEC*7At{= z7ciYahI7Q`iBy6WYb6kZWM=tU0(RG^v_otCx#&gR(YvCZuNzhABg*X-<<1c0HczDP zf0KUIrk)~mX2;H)#?GHW8ywx0mb$6;xv=F4wQR;h>F9?$Mrpd);to&Bj6U}Qn$d2@ zbjCJP=hZN6J(8HAKDH@(*+npEH<>wgy!&Y_c{WR9zPK%hYOdUH8PZ!$yawsBbvJ|m z&tZ+oXN=?&rF!he&u$|hP4lYW=W}r}VkB-uujOI2;twgE$~4gUXrj-Ymfpgw8|AJ4T5CVZ z@%H}S_xI=XIg9<>Ywfl6u=ex}`?&<+VD?fENTsm3P}RX~)5_C>UD%6xcOVnPX##Ec z9QwiYc7@Q&%RxXVS8_|@6taGL7&K>M(jb2*l{+>SM4$Q5%#1x~V0#>nPMNnTFi`ARjo>2~O!O>f5}MpQ z2E(#Nad8c$B*SZHkX}J`=0xk@zgPI*8$~vOY%+U4z(#@VAJ_IdLN#9OjAe2dihbca zg_DBO58Ae``Adxv~A8Ss*!?sK4hvNNXO6 zI;YP>YK*Re88V^_9r<@Zs1=3bz-d1~^1sCdv(?bvT4vai1@-h4(J7;GK$Q#d7v>jh zwXFTt?iwu%Ao}xmlzh+^tGWlR^QWX`cGj|=(yc?av;x+$x6<1|SV>NIhktSDU4YI= z$D>GbX{=?v7x+QUn)CpmJ=6O_e7i~L*>dvAo8f^A6m0&P`V4B-}?B@n)4d=+T2 zBW5elX(JVEH|V^h**DZpVQ#uAQ1M~LNoccidGA7a(3%f`?r=B<)H4g?ubD5{8F=2# zz`GFs#B>>Gkt4=;bGimJ(}Hxp^EJ@$S9l}Pae3cCOl!GYvZzRgy^8Bj--GB?%R``* zpn|hO)@HlJe?nMR@<(Zyx%Y{V%hL>lEtnBEmy@ZI$2y_pCl>UTfv`2h+BFPwWA0k> zFc^Sg*@qi@8f4ywT^y|7U||U}m9FD36zvY8d0Kx8hd_9P7zD|dPKyCLE^jy(YbniW z2)9%?#(!c;1{&lT19XGaGeF<93<>7!vh!$2+q#cHD@q!uzRJ^q@hh#*Uv|oY@Hdtm zNY-LtIfPpbtbp)`#^oU6m5z-yE^p2MAc^sR8aD#%=7<`ioRI#PPK8{r7#IgYDQDp% z8bYGWE&qoEBwqrOKa+eq$zONc1u;kdkMgj+PsZ$iOmtjc3DxL+D0aN&&@e?$eNz2q#*0cjK(a8Mmr|RveCAA}Sj~nN~XA ztHqyNRb#tKb)leQr6VS5X}OmE&Dj?jk>PrFnP`iA9LX0C#lj>(Ve+(3LrhEBX%Lou z=d(z6NP9_vf1G)&nhBsiQuTU(=$j2y)YJy)Q5U2kZIS*;;foZ%iNb9u{tAR;4{9~m z4c=*!#$?ZGsizmg;-ALlKr0-T74R?93F%PhjX=wsvAt!2>8mkpg{>3TM@cxAX&00! zUV{ykr#%E-a&RGf$@~|PVi;v!r*gM&F=ju+oMVR|i@ITNgOyi{-vzpByG?;9pa^FRe z|CH#syepvRPh$hnmiBIKf--Nc%bh?udxPrr08#}?a|05bFkfRfHEE<4;0Ma!&SC@C|eW!_Jq z9ErgEZ{b?D;tAd+L<-9_mabCFT6T??xyG4s`CQ9=dDu z#z}>m2pzki@|+LnbGQ%DozgMq-A3TeP|?`^&Jl3!qle_(N$U_{U?bq5O0b{H9%Xik zFtTETvT7WecTZ&2vT3ftPL3>0MSWaDb&hO*FXYMcIe?`C zkmS8R$Oj~k6DlyyIe;iXSn~dufoOw@Tw)NNP!Zpn&)cvMRdn`cL_e#@RjEM8`ks;u^9sp z<+AGa-|O44uT|7M>wCQ$iynx)t*lL;5+Bi?EhSjXrZ45p#=-~5gv;7C7;Nm6iuQUS zvf{lLFqi;-VPjoYgnnUT<%FbP*w__9MIA1_7;Ck$USTp__K0^uOFtDkw@FeW+}ZO( zkSP;(VmX9l!cOcf$%BS@CZZF&r=ly-X@DLQlHITqOB^aqV6An67q<}QvN`Jz%?OvM zU|l;vzY$u=a<(=1S30wO5y-4%KaVLhcVU$(I+HyoqANSCqNy)00`!}T;QjOnPZks@ z(_!hmu}T$nA>ezgt4ncY{>d8AbCVZwa0G%WW&;l3=9kaRs?MqdR2*URfYTkFfL@t7`` zt+&D6hfN-iXeEoE(GC#ZAcWe+TJvXJm66Dl1C2imB9zPgR~?A(XWmK3lb+xY&$lDW zWzT9kJeFCaq9{0d#h-nkqN{L!$DdtM(O5&UlRvvgNLIc-`&A;S-(z4wGX}>0R`YGg zAZiiyAcW%;s_}k;mn;#esRlKvPw+Ac)iQSAPe^w~MZ1e;YkRU;$*mT8!OKiI|ELCg zv0ai0O5cy@#VQHaGECSD-gCo*QfY72c6_Uv0Omm`mu2&hA_7>f9WRhQClToUI3kec z5Ry6rnGudN0sB&E5QERb!=EgDFgy7K`dlJVb1@>AeM_j8g|4~+=yyBGK1@3iwdBHk zqg;+^fNFKKHaAA}VQIuGAV=)WG7%|Y9+`ca>tswQ&G*9~{GHaF>w7z*6)lSog#}hu zl9cKCGkCxi{-n|Y488=6=@_OPz^p35bfK(0A!#8LPT)aFMT&;99(JOGS#LYh!K}Z^ zL#2b+FgwX1EY?nP2perDIfPBHlN`pT+DQ&$>4a((Dm}nym>Ze5aJGPuEMYjiWygzP zKM^Wo6WYXDBUnKyB!f>~dnt&v5vny_9Xwbc!S)l9IwP2NI!flUKMFaEVA~1RGG)^G zHO>)i!AxYL=oo7xTPG3wVaol8D0Yqzh>qqghUGjf)pUY;>oM#!p<4Djj2^Mfj4uwe zt;Xk~e~yS{(S&4XV%cg!XrUQ+li~J0dfrAQg~QlUo*^M-CXNNoMU=}l&#=gNwqHea zHakWpuwKtg-docVW3CT(v!^#QOGE_Q-9kb(&WvA?TW7!{eyks~e z19i%D$!rNB(h2KdR$#{*#|-rPwlw%Ovl5aCpJr_rpc=^=&%6mq-gtJxjyHjww&P7; zmln3BOJQFVlIfHbwlTYvIgynTlFW(hMouel68nvi^lbZM-TkW81x_R_E} z>uCl%q7L%dXfs&X<*n&vGNl(mnQ$iCX2*P%mD=&1Wr4Y^31_i^kI@+GEVi1E><8&= zbskBw@}5DF>Fn!#iHdsmkDSdWuaIa(&mCOdMi+Wnw9Ol1LGJj3xY%a@G(Sw(U zMb2ddS0k?$zNmt{9|*}3&SkEJl#T}0xy<_s1g}HD-%4`Xxor8`R>|jC;aa7xDbees*ox{rw zKdI>b?a7f@OtZmm{+rL*Z)i<8p9MdG!U%0;-&9PBoX_T|=%}P;2ohzGpZ6*Y2=7X9biP-4ahq`PQ zMyQq@8J*B!5$n7KC2QFx7z1W#ELba^_$_A>^YWI~Emn#VR0luGm2YlNiIe70XrxV6VwT|T>{qHdnMBJRDM1uR!Ww$O;EOhrzPh>o=&Cl1KC z9Zlr2!4^c5Rg?qgm=>@jDsqQ&!3$W25|T8=c{}g|7N(+ea~ccK<*G3ky5xXRs)&5fCTJ`}UX>c98 zOQ^`WdB_)$>)3CEYT1&?KJM#S&}*$a*RwZE5y^BL*e8T)jR|{{>yaDS*AlWI?E1OKHmUY;_ z%x@dJK!|iIY&-k16#^ReIwnM>wc~a+K_WJMhcT*zog-AsHp5b64@)j@k@Sq(!|qAM zj>7!^^GkTG8=?QnD``QFoHvBqSx@WB2V59GX{& zqPfO9dsCv`V~HxN9@SuYkL@J1(&#(W2M%00La5ewVt+n=k6lsGKgXh^`yteVCT45j zW4?rH+43t9ef>nbn@%2H(0tv#$Dk`)D89>A!*_U`sX68G#n2^lO z9k%HS6kUUoExhv*8RraJ5p{CFx~l9rN1!e$EY&u z7v@W-mZ6q^v;Bl}*~&g|MK!bN3z!b(KlJrK*gS%A6!?QJBP31y!B#$jHWI2eRR_Kw z^#|LgqR$AurlKZ7`&9G_p*K`yia!nM-XXM7FA}LB-6M<+0+d(^NB2P+A_@A zX%%6W{=rsXl)Q{BA4mO%b+{zakJA@<{l(U)$Sw7=C^-H_MeB0EiPG?MD!MTyMyKWJ z^_VV~DYpoINf0h8LT0pl>1D~}tA2{oa*xlYiL~XqXdMqz5w^C0ul@pgMXcmy*JuY` z+8`wduU*pJi62+dsg-HnE!_8?$dfhd%##U0Z7Xnj(3xK*h?iQHba&=g3CX>hmEU=c zyrZpr;MEp2!O`%d8X?()ZoF7U>&k~myYXq)P;x7aNluRLz&EKVFZucCj{GeZ4Jc4n zMR(%o3Cgzb!mkmkW&cQ<)1wPNa=pbMhZBCQ32ikdmzGC+^V%nP7YP*^XFPWRcs~)U zH6HHe1L=N#EV;FZHxIgjI*ZuIPO*x$JJ)`Nu$D#lhf8q$8lkOhs@IX|?%eo|6g4EB ziT3BEDw^~1C(%8*>$k{*DYpF=(Y^TBgo*&&iSEm<-IVDXZU2rQ$WPxQL>FTR^M8GZ zNH&Esn2Xy4VJOwc4CYosu<9S|!v^!&D(~)^2E$;!N=5&kozDmJttxU~i@XY%&h%&$ z@+u`Vz5rMG2J;Sg$UOUXjRRO%Mo2Enhba7*3UM(#g#V_ZpFQA)9KZKHCd_38lY9Wh z{~*ztNywXaPoi4b4-Mtt5R!}Vp}gyT<@|hbev%r!Htg)6*0arA!a0>_a8*3`K<-hV#e~D zgmPJ9kNGjly!cO=|5m~ZP>D(5^Zr87m8^X7s+dW9F5IDO@zN=iWd#*6Gx;e%P=49I&+?sG zDVj6sotSjqNr&h(W1Av-&gBzSglm|2{2HNL=22W1GmoFtqoi!#EPjR%4rS5WEPjcQ zto$q<4cjox%$iA;VzT&N6Ck|)i4)L#{t-e|&3u043A7WgYePb#CH;$-`TP{2)2w34 zH9)6fSA1{kqLyY_#DknAZ*9R(F**DiA(_#|{1zbvHv!ip7xRA+tTpPo z|0iZKZ<2_)&(Xv#<_}ernCKY0gon{bmuhLZ@FJh*A`Rkh;U#{a5N=&M#OCtZa6PT1 zNGtdPLb%ZNja|Vj3DqiOeg%I|LNdRCpOT2oui&Rugxiyq{0@C|S#D1Xc_P#umVN{n zT*qI8)qab?O}v1REZ`=-UPV~IO?;C?Ou-Uv;>9XN6Gi-*TWgt$`9K(8(1hp^5W9`f zQxTT1gj?Wib}a^9}z}-A$iH-HEwWkNvCjD%B_zfq7Xuu zFfz83M-!@L^L)MsG>`SqZEMJj+mQT zHmu`p?QR~gqS1g}=gU=uw~Na86&2zA`*I!ua|EWtTUX_L3L)v;<@{NRjHzj7A>9iq zdUt%NUpZf)qH!~w0+e#Tlc2n5T+UCaXzKp%F?;!^Qk2I0ef*l55S8xZcU6Q+_wh$+ zI^6y4;}bf`tf7_){v08hwF7(sp{;CoY;x=Yh2MjREO0386FV)ol6!ZN=>6E)v4?pE zA(^m>=Su{Ym>pZiHxZK4Xca%FBAhp?_~5Rnr6pbT6DV6E(6SV?DEUt?*Ac>jCJ&fL z2+4t_il2eUh+32$<(DL)-O*8==!Lvm+5sKqO9{zM#|iGyUGi|4JHam!l36>!zf>e7 zH7EE4*od^KIl&7ENi`pGZ#YI7d8pr!1ma) zyqS}iV zp3W$Zt>beE)tc^-&TK-t#x}E1G8YiouQlx>^BdHJ0#>YbyhIg^pnRVublP-dGxEMr zdDr?P`btGX&mn43QH2{KQvhZr*SL#xx)M5VIsgxH)baL+VE<>lkiHjk+C>#@9EZ#( z75VH%v_M6_??JSmP^0NYj04onK|(D}@g*VIzIA+NAex7(e9-Fu;6*BWamH%xKlpJ% z>i+LMKN5tZ(%H`Qv3+I2($&FE=lKjma5a9^GQacuWIyDsWCr)j*bBTW1W^I=+Oo{= z6Mml1O2*^bv5P!<0BPYpi#znW#M1{N%4I|6ycv6m@03Vk8C$|_m-zFc$UM#S_i|Rx zUnW$*?!$7jo>!>oKfw)#dVZ4-+&Y7`Z9QKxn9|WQrJk1(s%2v~a`q{Q?34#=j*b{o)ILk5Cc&wBqB~FSuzK772OK{~Nd~!6J6P z;&N;Qe=od+3GW8*+9%M(C(zv|P}c}dS70<0UX8uRg9yo$-!=XvA-VFq#^*)L8ZAkj zt!S_F_!tRSO`om3!E<8~$#L#0zKf77#aH|YA-U=JieHjEqX{-(U-92mv~TKk{Z~9Q z4z;W_o+9)$p<3g9Z#MWV?i(*H;8I@siccGkQ0DY&K6w-(%xPon*Zg=Qq5`&Y+z+we z@PSDZZ64Pgdy7AaOL?xkIIAUBI#KZ{|{Uo$OTzspdTUu?95X!GA?4;2KX++nlt!lJlwL~ygPKwit z{eVq)HOtd|HQ)X2XK zfmcSvQWcHf=L2ZKvfh2l7nn!y9qCKG^g%(W#!i%76nE=s?P(E`u8sY;)KNW=vOMIXRQ_&Sb zK_Xg3Z)q&?!D0j@f+$LlMyRGun|!)-UG+x{{2O*9dCfRsPbG5&HV?6n~!-qHc(geFjU-Ad03^P;-Sj>VX+rT4#;n<(oivsknAI&;weJ1Eb{+0%hKXxW z@b0L*oleM0T+xzF2Pl&e)rG=_h)NZrdkqmIR->r&?ja(BP$N0p5RoMj)yxo)qw=t3 zhKS`V51nm@_((@5myN1v&}l_|3gF)47RdNIuOkyB-?4IxTYe^+E6ih zU2E2cip46rXNC)qVk;q;(V=3OM3m8?Vvowhj1Cn?R32t@s3Lw=A?9?b_=6DUR0qgy zJsOmm874ZY2s1NG9N$1Z)3nzD;)jV-5|P1S;;hO;gTurnl{aN^KalJKYr~dqI7}!$ z1ZC9>6G4RXnF3WaOibQ{qSB#;iF86Ol39fE*+A_uP`bp97cL4Oqx%uzVke>RI8M}& z;>=?nqDu1H0VN=A3 z92omrTsBT@A=GH{cx`HYoOnedYM3~&TjgQH#EHscn*SPk`^7Us^hZ?`Jt0o~n~=;} zoM11vHbtB;6KdhLBb3kn}dOxs3U|XbZmsUNl2D{q`0FZEd5Avb{l4`(X?V$e*8#rQ6ehuNb$MK!}5+4 zU#q;OIfWqUwH?wa>Vz;-^hBt({YcS|P(E9rM-!7(lwpGB{6xNrK89guq`(J@TAFF3 zxK2oBbd>m7MVQf1B6LS0K z@wUptiF&j+t|BxzTKvAV)!=9$UL{2KMhlZfiU|#l7OpB24UQJ$RfGmdi>ZX9!O>!= z%0q*R;-reuV4_(18k&$}XQC(}BpW7Clu1P96UBa&r=a;naYSXJ`9$%viqL$b_=Au% zpD5f)Whu~nlIWl!G@m3IB_dBq5_eS|)^C#dN#&uvB=MWdTdIJ;BoS98m7>8UF`AI< z=}BS|AvBL_W)R9}FTgyOB$nFo#)uUvFWwYx8zVlnN0yO}G_S!BfOd6}j>c;-3)@9!u)j zG+`}o^@~)Is3P=>R8hGPdD1OY#aTjf!J4XwixQGwri#y1Cb~(g_*&)RiZxXX-Y-p{ zm!yg)Leec$#WaHLi5wbMMBd2ba7ARq4_k?>!8dinokom4z-$36S;&MX{nbc3Ka>-e45y# zGSPgR*sk($t(PWls|d}fi603`_ev9g5RzV!CbWmqU_N_a`zfR|6OtL7A$$nQ@o}c; zby#W5=}a;B4ML`~yH0hVDWW8ztj!d|RUT$-rbt$Kr*azNXNuQVgjt&@4ib`?nJJDD z%4e&fSIiV2KIZAzv*PPF)cFsqZI?$@6~ASEKws7Wo?!? zr}8jsv&5Gw@8F`F@w0@_QK=KNHcJE&l3AN21_Gk_?-j_~Eb$&OWtFCjIy=#HahXs) zOVT_DPZ!^-=oM|aEkpcnCplYa-b91>36JupUW7(7jLzbAVqN*v^0qu|o2INQa^F^gZ%xwy1FNiBDS_D@^ zUl1N|VP;mc;!&I}5J7KCbf6ef-*+gZa{sqLgb|dPSs>yG<+HnbO~L|k=rK>n7K(F( zqz7k{&&nrX#ylQDn;(ga00Ag7tAu=KIVTDmZ_B1#GQ*U+1@Tl(}Gd;dvNUp-u{O$ z9xjMf%H*xZ@UJTc$Y|0qoRy05GCVUC%Qq-NQhQ1Jcr~opiT)qhc3f06vlPv&nS<@u zl>UF0|2r2o$l~p!;-QCu|L+X8S_S(jwJS0(2I(Mhu_sFjhZ;akDZ~pl6&^K*qZqwg z!)@X)=Hd>d*octPZkSOi`9H)cPYCsO$Haf97n3pm&kCgWE_Q1MHo->7M2lP9AM~V* zU^n(ztr~W$eM|h4F^YZnSVLYaJ5_5~z*%=#j$366UPUj>V{qJU@&^1~;uT-Gwg$)O z;a4EI|gLNa{?a z4!#8h>KsX(nbbL{>WUXo^^&@qkQMl(CUrKfo0g`LVGX#ahAo4Jz`ld@t}9Ymi$gXm z*!DfvU==w|v|6>S%SNkJ$No9XYK5~pff^WmKob&#fYZU3Jtv~NXSQHXxB`VwbmpSu zntmvGW{1^kWa}bO{!T1vKHeF_D`2P*Y!VGP((q$#%KuW`wOCYv1JskMA1nG_>aouj zhN1t}6!R?X`s! zgY!c9sZ}I(_Cpmb=9(5c8t|DMs(y_gm=4Oyp5d;y(MW(AKb!7vs;z)5&0 zvw`}QB6EZc4ID$#lAxu;f9FaSQqn#w-7TgZ^|W~b{o|kO&_8}3hdTYIB7KAWK=uN^ z&fra~Q0Xf`XeM+p==Xh*782b9lM3V%yjsHw{88O{m`J3go^?*dju!wF{CWKUEXhd& zbYRe_QERRj4Bmn@cEGe3cfk7hNr%ER$^OdO*aQrBrB0=J9aUh5)WT78tuh@Tivo@> zMlKekg}WdCW$ZgDjsaSd)UgEt*lS)`0P9~4C%2+#Z)iC|1BHgh04~8GcYF0#92fkhUHjkpLMB0mR@qP4q65r*$bqv(7>$xk0bLzs*m|EU{~De zjn1-)n&xjR{#P2pNW*VKp3Dj?ZT|1mLlUf51lu(qll@N_ngf$^OZnvNhpQ>U9BGDZ z&2Gyq(7G&x7zLcdex=6QIr8V}Gf}C1SXLUwXy7nC617+U{GfV}|J zff>Pu!`clNSR-*h?7SK~A_I&~FJru1Bb|aw2<8j&8il>Hq=lhIsWEc3gCn3E#agIzv8BPda7`r_`y&cF z=QOGzTwMRZ!>E(Tqog8}$%>V}D#LQk^ZIlYl}&(+(z4>S-$KZSldHT>CSb{A7_%;? zD-DYXLq98e2J1<3qao(;`d_a3C6x?&`f-00l~g*;|3qg(SH$%l%Kx284YCPjQN!>> z=@!-YW=>^byxawx%g3;w`Cc}MY#NzGnQF^Yl#z5SOkGcg?KS^b7{`D6oPN;`6H5a! z-rfV?O>5vvD!GeckcK4;IhRaT2r@7sQD68kV~|#sTgIbi82=?epOowNC(TQx_EZ|S zkC9u|P2lq_bEf3}-TcNjC?hqriEGO;6n>Ch*L(Nn9p5)6^=}~3XH3)2mBi0cZ+=mXLo!BabK|j_%*Vxw%yW+VaiR2 zz6sGcA^Ijn-vrSIkoN}=_W<(#0OB4%+|O(f{O-fAKl~cucMHDnfb|rZ00KU%v7fEas_5=!Fbq8u?p+qByCJ;>`nnE;{Xa>-B z@b)?!7G;HR$RW)oS_l-zSD@~!f^S*Ul~n_U)Aslea1Ex8u1c9%a%mq3y}p z!*8(3#GOIhyE=@|q?iR1vy{RG6wc6ZS<=L+fm-3fLDX4H@eu}0Rc&a1hbt3|Et;(y z^(*eYh)P@`%gvAV?#3%v^_rf%8ulhZK=H}!YS=C$@?68A^l`j_;rT@M?8Lfhd?%#J z;^nM+Sw7G?<5xk{zD(XJ6c^JAyY~s3 z$u{#M&?3K!qK=t5!ZWF?03LTu;z!+m;KObww|yo&O@sPh6NMsT>bJtrbSv+^!1xE^ zysCQHUajT|I~eN2TsXYZqbcD!I70Rc^Vr^pmGGBJ_Hj>MKFn8>#N(cstubj&ZkwmM zra#P_E@80wj#f;TqouvRhxh+lS!tuF(l$;G=@PByL zjyhNg(F%qq%aw3HI1snQwCiY|PRr4)N;sZBmn&sV*@ZiFjU1oLzsvEPE)}MbSKiT8 zoA5ZnMvjNdHIigAaXECzQ@TQ9+zV%QHn9mBw8k_%^HW`&=|+$OPhvBCMzxNu?eD{y zHQw0`x_VRg%&&BHY~y?s{rttdx(3rz9zW^|O?@kJwAFNqn+=pc)HRxHiCljdXghtA zDX2#eeS)}b9<1jMm(3A+lf%hA!}X!Uca8&hamb!I0mAq`v&~`If^@y7!`4k%iav$k znDHVo1`l1W_j6d=W&?zGz$;+Q(9&Dd>^!N3iqOrXXi_kqi>x@3s!Eb&& z#QXw}Q+kRcUEoG4AK!VnHigf$U58Y!*uK|S@zB7Z^mY1+aMpP>odj3M8Wx%j5e^$x zPuC|n%*bwIP$I;B_|gIw_g!s<6o;fma8|LfE%GoF>6RY#HbhX>C5g>#{0*rNec1p* zhQsBj!hqW`E6I?=hro&MMW%V%bF_;c)@4jH6q-IynE_OrkpXnN0mFSO<{45z4`;a! zZrutX+^OpZgH8Mh$L8fK937|7VcY(f4Mh&S$L}x%lW3Osv%&^i&-(0 zICMI2&QRuXr|V^i`Dkkc&`-8rH&i&7%DypFIdq*Bsw;Cy8+#Yx`y4>-g_P?ce>92+XY{CQ(P zj-!Gr@2);sPgNGnoI%P`#EsFsj9)S0Fq62sHPLMSP@SjabBne+G>A=OuY=#5gzxrX+K&~7 zDhGUc-;--H>%rKoRo4xnj+ySiJ0v&`>MtCV98YdDJEl11m$q|Ebv*3j?wH{?acWOT z4pYdRx(4HW%flR(a-4n&Ad6W%!*Su%agGJtTrdq}&>K=5OCfEIDSOsSjzy*=0R@ih zs1C9m!xBp!l_VZHE*i}Lko;7;o zapW&CbA@C1W}UgrG5(N)xyJFMHE-%X$pdhV^D={<_t{{mW91!VV7$9EC{)KqYR5ox zo#Vi;5ObZevP+b?7|g>p9?@>~5_7%c_!k@%x|4EL4o(!wD#?lJ*lm0lcRHnL@jPm5zA})BTXERw zBo)tOy1eJCQ;Dgz_m@tmslS}($qGy-=c#*yYVdTu6iq;yhvf>-aK{pC=@MtD(|Ely z4ps>}kB+r))2|^DEDesohD@;p108Eg)ok+#g?XW>?>tMe`CgEmTCy#k;49#6jxV-Z zZb3&|VW}}4%v@&)HE$la*>a7V;0p9O<*M-}Rr@`v_ChG%1z=yHMRKW+vsv6e0CT3;8amkd zAJRGi{z^>I#;1t|X;F_*R zgAe_M32dM&aqihXYnHfmc(v8V^vsTa4$&kTO{t1B8)0&CaohzBH-fU8OxaB)^BLw_ zhixudirG8F%Y}<~4g{LB%&CilApA%FKr^mt=0OR5s~F&tE4o+ENWLFw0E8!#x*4P{ z*L-r@SeHWcn28fzW{~Pk;w~WW0*YBmF$EM;KruxcJYcTK4CDV?QDT0|>!eGO=5k0o z)`YDBG_1JErAc$FeX;hg#%tcME*0h%Lm#;`YwAY0x2ZEa7Yu0=43!zv1{ZCM+tfSy zZ&1u8)3Uw&9BRy&v)8t%GiS%{ZBu2u@cPj#bfHU=2f%bZG*$w=WU7wtbgW; z8uOSWo1w=1#t5&rRmQ8Y4`|z9{-=jHfazITCcd%XtaKgq0Z%bhY@^0}urs&jWujp^IW z^KDH|{n}p!u3u(DTNkGeo0YHHHfiuXTTPmxXN;~*8vM>ylLo)DWphg3-rn^JEl`^@ z6FPK+_|BNypIj`SFXPZBK`xNfLa=-)A-Cy73yp{5)>wypDd@K_(`D>Q&y zp#kI(4It;qhbu|u8p+%wnVTeYjkphK2)akyhs1qI+-AduV8Y0u6nbH>K(Y zJ!`J8Ic*J{X6Q%UFb$3WVZ_eR;=q#XWJ~1(3tXRdPq)WDGO2wsb>_vSt%~nXpVOXm z+#^)U7;W_$1@^hx?7{`@tF`#rPp(r@>0$_nyi(O37R!g;Za-Or%d#1icazDd^3(Pv zQ{?8~A^t?PxkDz!*BN_F?B1c!X=Aq_ps#l85A*||HI&6_GFGj{7l{fTM|KzoHT2HJ zaXd?RYHWjI$kJVaB~i5&&zh^(E@(HqgGuw@mghS(aon%hYcan?PQ3@`bf_mqHq-9* z7e%4tnr;;x>a^>p9_~=ZGTl#fsBp4Ho$7$Q<_jIFc&7W;9jcrnVt?$A#0{Nbvf+1n zb+^?xZSLT2t8+RY8fdGh`c~?-ctBbmTYqSF{)_I(Bf#bG8PjpJ!y*mdXaw)%!FU8lC*wZ3aE=^AFkzsBTF@&rJ4xwI4PEKb&@~PX_TvQpk}n*lZONIG(6P{TW&67wYs^p2KGo6F z@~Fe@jtOG5$8^1)#nr#5qo3uI{6|1b_cwJ6wtS#GrT0h>sXfddp_b=|wDZ92RTmGF zWipg0!eZDItf4QY<^Rz2cE-*|KCegg0$F2r^i_B;D|G_*in14qYq>lCAZq(RYKj z8%{rEPK9Ff-WXktzF=V`Ptoign-6sFSRKo-EDgNpk;GR%)8vr~ihlQ4Y;pC{bV|`> zJ&W2Vz-5Od9UhaGr0eaA;luD+U=o?k0xO=KvdChVt}?|(VOhYKt<7+}QWXM>J3jC{ znhw|PE{=UmB0JSNUV^WR;_`V!rxfi>_;6a5?jP%tJDsEkI!TqErNfiXvUE6pgbGRV zps+^_nMkXCxoYVnhs%8 z{2UzGZP42+X@mX^QQC=HI^U#4ho9z+&3n3fYOt4kYVdkkgQcSD!LC=R?VEHn7M$za zXnAS*g|642Vk6m2s@Nvo$g&2*6%Eer_o#O~Bx*9fR;l-V1eYX#*FGXit@cc)vZ37- z4bJO#EqEF23iNDe>mzE8YO3&R9qwkTb=TliQq{U24%-aXy2Gv8^ zYCJA3MnD2w|Nj;Jo^vlsl}y}ZlCN?&iF-wdVPpGsOLE+@WN^1;=hIj>ujxfGU{csW(a8g*rBx@#JBczW3kDqo5g&n|1yA?3~; z=fO8orv@kJVk*6#^R{SfcNcx%bzQsf1U;*`O^+Yds&P7W*dM;;iXLXu-ww4I zia~$4^G+?!DaG3H3as+VA*VjhHKsB1hIX&i;!-TwIUp<%!nh!-;%~n+j)yw`umP_1 z3S+kzT{)GbQHQ6n)#?1*p$BQ^r_JtO$2{@EwXP$qjvC4Jnu$h0UEZ=Z>-x2y-@O2` zt79ozJkKo@?i9eyvSU<&W0Wt9D(+sdI|I3^*X>B&3qm-cM(8g zkbD!uwacyn#qr>-=+yb!9;tf&sdswh>RpQN_bAejU-EO05`A(hoYkcN0M6?u(PM8) zbw2vkwH}_9gf{GgAlK^YkM4%r%+s!rA zdEZl6J{9`5NlSeE#CVV?ba>AuFI6fKz69Y4z0-zbpDWa&SIB!R^sXC=eX?NdvIo-U zt~u~`c!N2 z$~~hqcP(ld47ZO)$C!uRr;$>!KT){5IS}p zJk6HrTjX52W3{%9DPyyIOPrOzk^xZLn0N(@-l4RTZ_rPKHDJ9SU+8btTZ*$fH|ht# zd+CjOml(E9}Ly&aq)1^eS?CHlel`UXr}pi(4lxz1a&_{*QXy6-sXB-X?2uhF9-8)~6D^ zA!^Ua-Y(W>y7@4hbw6xf8l1*-%d&Yo`OF^E+oWj5yJU6t1C!;wLxEbEr}ZBP4?_5x zAl z0dHYt81O=VhSb9|*XP5Us$aBIKoVD$tk%*y6LC$?ivwL&Ah@!LgMQ~#|BjK%RwmtVZ@ClZnSRAkQV}?Nn4=-Ws>;! zLl*}WIUn1x8N!&wBIkM8n;|Aofv6J7SG5+;pei%SKK;ueA67>3O}riMR1A*WVKO!R z4(lZs!vPrcT?~c|p9G8m!*EAHhx2+f4b{O`ceuD7YP|_#L$DQ(ND8*1OD6HRXWNYLNfnf>D*kJ9-@pWG7<}bA$yzyYXkd+Dy&tr`ObV=$iN!oyG@NNu|_zat(O6PlB~B*kf2&%}>Q?0hd+`wD|uIHN#{qxE|-I;Mt0U6fsU*8*8Z|Dmf)+WOba}Nb(Spz|) zQGc=j(ZF1*^X!dqckITDcLGy+=;-%=zMgV6P)VkCDzXL+_%e_id##1_u5o-@SWt*% za3QHdzsdLez(##6?C$Q0d!7CYEU|vqK^xSl|DmT3WHGfX++?w=+HwfW=L}zXzAFNA z{e#M^ZT1ERO(vgkF-_VLACzKsu?-Kbu*OasA5>!fXk%WGi!mC$TwJYKxB0CNs$;%| z#X&VzpClY&vnT8bO0fPLO5dRW7HF;k4+esj5A==({YhU~VnfG!I|%6qK`xHvN}xlo z0f&?(EglnuJKSqQnDv`MRXif>Zcw%HPx#oJizUtPUqLRGQSdqXLWiJNa2iu~kN+K_ zCZrgGn+>0hg9ikx!y@+aCc~1YJ%eXZ-8AZlj~oJF>(%-|yDjXUy#J^5bHkYxNNEkC&439k@% z@=HqAI$+<<+6L^mv&w>NtmWWDMb2J>HwSp~;P&+no^bmi97Meahuf<7{Y^M8e6k*v zrg}U8tBG4+`_ZT$2_MP5LJO}5q0Q*rr%}IrW_q6nedOw5ZJ93EJ6hYI|EQo?`$&sh zxkuVdeRm4HYo;s$p+SrC`b?&~bCc=5T!X$F#5~gC_OaRU0^D+|vzBci=&iTT z+S;~ngMPO!sJ0BB>DMt=b0t zd+;@PNIS}AusPlKTCQ09EPu7z2vH*SrZ4q zM2zQ?dcvk`K<6u3K@;@zucPXz;}5xCp-eaEp93#}m=Q=%PeOVHK9?OK-kkIuq{1CX zCe4{jCQX`+)^!~n`=wY-+uHSWF-;vA(62$?2e!=(`Z!2-*P1Y4NWVt?uL~S_gI@U9 z43B8FbJyCYUlvG)K;~+kmcHR{YtaAE7mcO(LSL|Y_sfA)I5}OR`K8)&zWjDayqy)Q z3nqG3v5f9|wBG`nY)tSdhBllOI`G%NWx-EnoQ|$e? z-XS&@ckezSE-wE}84%*m4Sq5V^Iy^^!~mlzMbF6y7^GJnjn z{(hRCGxGXpxNIp~+rPmn2QFh(8*%AzSL-|S!~R(=TBYc0|2lSK$THnxmt?p0uDLEa zo;R4>V;$fgZg<#jmWZfz-}EnZIkxAA{w3n&H5lGS;Wt+|_jjc-6}h~*Kduu@MX5fl z#6@E>4k&Rc?O_~H17n8MfI7Btso#KN7>?k2n2U3}{sUZS2VLV5KUS&aH7-NkkdB;~ z3XJ!j84_IQ(ylvP6#yZ4!a?`@x|{)xx~HGc1zK8e?N|?4Ts2^)4zG)rLruUfOR9-R z9UhF_s0*HWazKq~VrI>N2A3}WX9ooH1JhwT=7V~{@TFN=s2kYmGH1Nwz$TZip`nTn zuG_!SW?-{RLZvn+LHqx8cINR-RcRkT_ntIK+q5*-mPNJ{C{W5)pmYgHODTKVT9ztE zLmME_HeFJn3M6S-peQO7II^08ICK<86pR~M2k}Kjp$^W#09q){$P7B7;0vS7yub6L zAkO=F|9RWo?>*mQCx!Vs)={k59R3T3$IMC6{g*AELy{ zU{F!4OeeEjraRDkv+fWz#QVCx;5TpI*KOK6C*_^sq^!ywZ`QQD!jun!L$X#dXJtyP zmQk`k#T~C58oMRMto<;jFeOnt-hV%MuK#P0%$xN4luKl{mvkeL%q88txYLmD9aso? z!lReqPM=i>J~Bx1o$-Y!8QS%+H&P~OBXZT$llKzqo*HjX%o~~7%qFdu-<(>4f=$v8*2Ted9^I^SM9z6hx|iDfq}}FkzO-3)n}3Zj zZhaJPT0XApHgn$^V{%=n`wOgGVV{qsrR8b$kBv!_@8afxHL{m#A_i8#n7E4QRc^VV zR7;*Z;s)YI;uhjI;sH=)iK=OY$}-f^BaC>0hm>TKdzyL&$>*vn@3Oe zsAEQ$n8GI@YzUVzgn}B2;J2*UEMz88JeOr10FlNLL2R0YL}l|xZX>y!2Hz^G1w&C z*U0@Hxo?^O(5S!`lSO>BPSnI@rtTVd?_GICc2C@Ve4Gv}fKr1nmIEmyrY%t`HFt@y1Ko^#> z@o-nLa`18Ho|K8LzIUvd_%84rYXP|n+T2gDnB1fIlJOmDE3rV8?j~N(KAOaIG8EJ8 zkTlja^W@gh1Z6}n4@*$q&h>}Yv$>P^hFO)wnMc7g_v}`jUd}5p$td>X0j;eMr$^MY z=O_CkWJFEG79xwJs3T?6`H}VPuao^G@sq?7C9hh{^(;O+-z?n)nvBy&+^g+Chx9!l zxtEw3Eo;v0iGDy?n(YU7Oeu(=OvEH8b00Yho`2+Md#TjgK0%o=mv?wgX#w9>Cd}*E zAwj8LkO^u91>lwfAK15WFLDoU0nta?OFT+! zCGxJMPs}715cd*~5_@)&I+?@*qNiKEo1LEOBhOyqQ6le7(GfF=1ww>g+dVvh(6+8;!$ENk;jrI=thpnlOHRi^AP<+OOJXMJ}tk8RP_*BAel1F-?N@= znby)%%2_W-3o)ITPxKJ|K}lRayEx4Q#!hdFllm=0)*EiO)ixjp3BN!1apjeqOGA9h zCpq4sKIO|C+c2MUJ;y(+o|Q~jl6(r!Rg$D;EHOQ)o*kZ^L2f_XKTWp`r>qQ@y~C1R z&&JNMq}Q_-X0Qw?XBkrNpD4}QKck*qoxx^Gx!XdgbYecy(?$wFZvRZ_ZX$ORxjnP$ zS?`>tSuY|(Y__bqro4K#D97@Mj5M8?PxJ&OkIIDeiA|4EsQHrl?)fsXhdh3Ar`u#= z`NSq-3z035atkq?m{0T&n}{t$RzRA>bYi|;N<73SVhfQibd%~r$#i1VBI#}+rZ1N6 ze4>ZwCpHl+4hltVBDN6O5-GP3(~0>+53z~ZLS##KVE(gOmQqB-mSX857AF- zBDN4Mr4)+jA^M3;#1F0+KG8$;6Pt(@ z7iEQ*PxKJ|#3o`3(Nam8#C%D&)k7XX(NiTa`-$u^>9!EliTOki(NAn5S{|oJiTOki z(NAn5wh+@-O3i$thv@dxsfn1riY^oV#3o`3k*%f-5j{jdkp*ptm`=3o($MtbVGvO+ylfqzrjt z$QMIGhYlS&ap-}efuZMyP8sGK_VlnV!}bmf410IjN5jqzo0#NCTAs8usU_*hq-n#q z4S#L;ABSHU&XRj3XC>z)FH9~<7Ri4|K9~Gu@>j_nQbwmtP5C_K>y*&c#MI=}v8nS@ zW77tv4NF^=wmmA`E`BV zI6d&P6qVNX2fYi2kbC%j?h$aGEzbZyPm@>6ek=L!LdnOnB)e>tF?_s5vSXv<#u>pl z$HIMf%p|b1ZYKD_@Q1-p+hlAdbB0X7KE2Yq`E`u=C>IfRlPj`N`s!z^x-+nSg!T+529H zr?l=J@Y)N%2aimVm;2jg0`KmZ<@h2;N=oaF6F&ue?gjU?J<@$%3q{VdaAQ5 zith3zDQ_7nIc%xqf%cMnNatlT?emLwAcn7IN_oNyL!|xxYoGM^vZQI0caiSZ#6*hD zN_G%l*MMNbs*a$BI5}Thzz4*adi@4hOY43IcBiI!Y=>;1`dx>?s9kT~b5Gv&-aWUJ z!~Xxb(utkN?kTO``SCsXPdl3b-|qV}^u`WpfRt`FyFW*%JO6Yqfe||{-g6(GCk^WU za@?QAUo->XJ)}kAUa+Jn%f94_@Xr@Cq*gzu|W9 zAAAvbi#x!7@};1rD^?WtfX-bEPpr-f_QY=`sVqTP0S>_9#8oy_w;W8;RbhiHK3>GQ z-(DXNcGM?;UGxLMZu&u>MV|=v&<_QB>60)!^o8b8)(@ITS$};hI1rjg*63RJJKX;8hwW(W^+)zcX#U8~Li0!VXTu}l1!(?=M}#JVErxmE zWoX`Je}m?2b`6@h*>{El@Ox<9W;dXDoBe38gSVimQ__s?c$`KU6Ts2NRB()O5IEMD z2#z=6zKAl>n1ofz3}ZZ)3r)Q;%a{Sqfu>%07@B%zt}zpQ6q*KQ0W=LtAv6ujLSq5A z7@7uU2{a8#k-Ycd9wwh>@XOyntpALbJ_Vb=YkH}88i4$}u~_ogdcQ-+U;SZZ zXFCS}N<^MlN%rf&PvYqxa(6$+|J^@3o`dn9e?AKPE*?wu9*!m)@8kGAwt~yu^dGP& zb_~adIR1;_ORdM@_z1@d93SKE*hw6p;P@2BDIBM1B+*8P=BAZ{_Kxz z0Q(b5VP~;@{Tv(5{>&z!7fxaquuJ{F4V(t?2yCZ8DYO;-mX4nW#q;1 z1U18WJt=QyOvn&a@}xFphnu^C?GgG~#&Q^li#f9E~{k z;o31Ajiz>~ZZ<9TlIi!Ue>HuVYKS<~BQ#=Ed^ip?YvA$8>OkdzG3B=9;~k3@7vXR{ zv|#@H#36xw+3GWt&ELUw(d4atsuzt4sv>LX^?wX%z zFLBw+1LlX-acVatCPO2^DRyLLfwQt)rd;t*Au^R5m^D}Z(HJwu>2fTrnm?`Fxx`-J zaunGo+bT-}9Q3CO3T$LN_XiW z>nOM9I3Balu$3&bUpIds?Sz# zFPdR5a@q=Q3jzl!)uEyK8TMl5GP`J5t;Wrxkc(|41@>HLhRbCuSS%A`h%9TFz5G52 z8s|Qr43;CyR_?4UL8&Ov{c+{EY~`-4ZgpiiNh`~j*<6)@DmRuxe1?5lKzP({N+{~f zS#B@Pb_Nc5)fipEFDYbFo-z?GSm4Qy68qR9d%@DX7Xq)>s?$TLdV-mtt7Gg7sebON z3-t-L)F88vRZnmWn1$MD&x0g7m;rUsSG zJfS2ou|bVejn2~fV`K#cX6;qSDBa+lSz;@%nqpsMbD>hG9kOjJ#@LrRY_7moY?|UG zY4@_1$W|An`_)2|10{0Uim0yyPV865ghV5?v5t~L$_zDRxwAMB{<3ONqZ|cGD{`Gv z>?>TdS#n%~$XC>#!_1k^;?g!-m*tqcT@x)Hu~rVJ~o&6rx=B#;iSX&u7h51Zi;S}(=q+*-Vs=MQJrg&R*iPX;J?C!Yy{rEst!>S zN}MGV*o?|asD3w^21Y#O(&q21QVsIQQzWtl}wobO6c>eEddg#5D41D=_ zb$e*Y*dkkTu_(K#9?;2-BijF{KF2X#1YZ16J*Na}Z>gK7xSAAT}fkneo zd=!_9MZ**<9#-JWw6^OxaNAia-oiUr2{fg)O+FI_EN6>wP3k%kI(W?qE!L?RzHmr^rXqQ&gpyDq^vng85zP6KA)2P)P2znY#=9+^sn&+4bsjx5R zBa|b7J&So?C8imV3ktU=xcH_Lsd>)HESwWxI(Qf5qWBr74qt^Zrg`s#GF8P1FX^xO zMhsel_tSU8(j|PAGE!V!!uu$lgn21XH^%CjVlvmpi@c?HE1oJgEafL3m>13vKE~`- zG~dV&3)5=tqNs=u>`-QiF;^+(+R6xvs+grtrx|r^%|%)YQ3QbB^av` zOxml27?7)Iajlql>fSLdMysvmCZuKR6s7WR!OH2zq@%W0^eW+1Q5(>3jo}tNiOK6w z%{5ixKnZ_HX%^Q?cuvoTE|I7$vo|Z!T-zYqxV916$b$EJI2N0c@QVdb-WYNO5xy^? zN_kxDF`2`UBtDU7mN*w~;Rt+Avum{%#jH|3wkLk0&7^9+VW>(kTvQqzFNV)kYr7bY?TxK*w8wuma@T@7m#V~n;YL<}qAu}Y|z zRmPVqG2+uQ-bL4d0*G(R_z)B=wj4J?s)VzgFX++LXhF$g42L@ybTSiW?=eJt6~buw z@=X>$lq0rS5mNyxju&Ya{DhJyLR|dG-nn|1zvlfa+z^7s%tcWSs3WxT60Pt-2sTf-X7-i>JnP4mqaam#sC`%2VXb!d0g7upOj zcw`eDTFz%jd!@CnsiiDeo5@ory0757qj#BLuhal`&3l_tYY@#Va64+B`1cClQE3z% zt9Xj8N}5M*6^|uXpsEVb#BWy=H0SD6DtM`|KF)iDS1CwY+RK_FV)5gAKu2jawT+?D z%+?%kJBHc+S|I4A6GsRAFV{~H;Zpq z@@Z|xmbr@eM$cZd3b)6u3jZqpAlmfpRlINHv#<_1jD+e@{TsyfReV6Zn`UM(ueq(+ z&AyH1HHsLpns-dQEp6x{*#Uxu@H85Ys(H;F1T}EYw^MUy4x<72a%t6GR2-;wlsSA} zxL5Nu<+gZhHSeK(61cdU$0*8v@q-(;$>POK53lSSk0SeQvR1r)IM)t91gchj*eJUK zPO1U5uB}ZJ-+TC!cBvTkm`WD?tS~9>#)2b-?;V{U zVpzXa@r7XAfCITjKM4zV`L43d{An$JS=lJotm8Ffo5)5`NvJT*7plVMBhZDLv27(<8=21A>6wPH}DB^SJzDU_xdr^GP+nWg4;Kk$T?65GQlJE?%sz z=Zl6WQI=`uU6%^;T1T^^=U}Lu4!s-kGE&`Y>#~CVe_fX7xS1#P&z1p^A%yYl>tqPm zYS70nq9>SZLeOQZR1_aZCexiRoSQK)<%wOJG56cVpEvW^um%`fTa|=t!CGLR7`TP6 z4LuS?g~i15?iRk@%?*l4w!Sx3)}}XB7RqxQW3rUc%VaXpENzlK#Wcte8Dp-L6(wKQ z%`%5_ZGy=mD3fN7`QA%&ut|-y=%fnbjFQ@IGj|!f9ExqOnkO|U8~UOk^0GWp%oz84 zceI+s`y^WR;9sX>!o^=DECn>x)Fk#ZL?I%fY~?-N8YiXUV~#c86pI|ufx7S<#4DJwV1j)O?b@!&lhi~wBb}fS zWA+@D3E^doakqJBg@-Z9TiKEEyFGytr+SbbB{E7;yD@m*MEi8Z{lO5KCPJ8SRja%pqhbt!77wHD8r^)x8?P@Pq6&hGA02iNb{&WSs`{EmvaIr^S@5{2@6XdbT7O z+G{lyA-3`f9po}@U9Ci&#KurLDXiNl{(CD=7-}@=(Y_|tBrk0<8$vNn$=>WmK2Ygu zFk!E>-*pXLF(1|R5_y7miIdarcm%4MiEnzgl^Y)PE@aRs7aH)1?Sc<-XK6KAS_&pQ z3o2pVK1H*W3(3^9b*J#MJM^Mc3eN4)=rm4i1=+hHC;{?Ut{S&i)?bp#oX7> z^CrqkXWcj97MS}st@=8emO_pR!N}H@$at}58;{GmE-P)_O`}Zmj@h6O8k**{;1!8x zKzo_%l;BK*B~4pZ`AR9iqTn17X~gneE-)f7u+@c#2eKdl<#0*rgr&O!J!q)YCy$ijc-7tJiZxTbG0y@|6K~Sy*|XKngWhO_UhBi+9VM zAlFQYA)AKEny$eyQ(A}2Kut%zL1#oehUmK@F%oqNGhnbln?oRL-zGNi;w2$E#yq2h zx|=Uha)o_2_v7xH{yA};b(b=3z#<)xk$&N$#+4{pBV74E?WHpK9s%?*#83G zql9WcdP7iS6nXo3l3PyYn4Mr95f(062roJP$Sy@5>9@$a>P?D{WF0Mf8jTQ2s~Lbv z88ZO}>^L=srjA%SQbE$zW@?!1TNKbFoznEMR*|DfwQ^c)-j9#Qlf;Mnd9pS$O7opF z-y6EkHS+@P8uubf{v0$(9|2${zW;gi0zyB9Mo;#<^nKNh3oSA#?+)c%I4JvjuxbDh9 z(_i>|tFr#RubSq@8Eut1ZBxpjiC2G&axTkuf`(EyEer%pOsSsRUT&S(3DUzU2k8^G zZB0_*bL}b~Xd^HhRW&gSt0o#Po!32SDLq|vwb3k=s;T`<)%`|JENUn;pq{NdYc$PR z%=Ynb0RA^slzQ@rp(b=Ol@WaDyscyP2=fJ-kzJMR=npvGQ5G0$DtlflcZ+pnP^fi$ zW-3SdG^Lz*736rJyC7ewl(sfC78+xfN-F;nGERrhKLG;D^fW-H){U#L=5wlriQZ>^ZB}K+Y)$^gB2Ho}$%ex>srs>)riS^g zS@luuHF@6s7Jpq1=q3zW+YWLYSznGS~aa%KHyc& z2DoA@xy5xVAr@QpS+ndcr^ULoj@4ADiXPy{RpmAxoV5USi3V+H6fJEhmM*A@&TCe6 zq}n(bMKkNNP}S8a)H)im>NHV* zS@pTXPG(G=uDhYCuubd1YwAlkru0gYCdbnRZu71J9@l9aV!k{Z{P-BtzZT4xXzyxp z{63UbjL%nfu#G2?h<7d`u~kEo-foj+_^N(s(=16CeIQ?UwNou6ub}OWxF*n-5}gzs z<6l>GW83V;>rlPckrT2)+V}fGOp5mTt6pmBYD5WNeP!TjYL%^ML_t$lu0TU6v5q

vpfEN)@=s;?{#7%`Zj^!nE71|@Gq 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

T{>4pJqyLSE+SJd&VOANu&GDM-Lx=3Mfsx% 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 GunTail_Medium 7 + 1 false true diff --git a/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml new file mode 100644 index 00000000..5bc7bcf2 --- /dev/null +++ b/1.6/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml @@ -0,0 +1,99 @@ + + + + + WULA_RW_MeltBeam_Cannon_Example + + 一个使用Verb_ShootMeltBeam的示例武器。它会扫射出两条弯曲的能量光束,并造成范围爆炸。 + Ultra + + Wula/Weapon/WULA_RW_DM_Cannon + Graphic_Single + 1.5 + + +

  • Wula_Ranged_Weapon_T4
  • + + 0.8 + Interact_ChargeRifle + + +
  • WULA_Cube_Productor_Energy
  • +
    + WULA_Synth_Weapon_4_DM_Base_Technology + UnfinishedWeapon +
    + + 500 + 300 + 6 + + + 50000 + 10 + 0.6 + 0.6 + 0.6 + 0.6 + 3 + + +
  • + WulaFallenEmpire.Verb_ShootMeltBeam + + + true + 1.5 + 25 + 20 + 5 + Wula_Dark_Matter_Beam + + + 12 + 5 + 0.8 + 0.7 + 0.5 + + + 0 + BeamGraser_Shooting + Fleck_BeamBurn + 0.32 + Mote_Wula_Dark_Matter_Beam + GraserBeam_End + + + true + 0.5 + 0.5 + 0.2~0.4 + + + true + false + + + + true + + + + true + 3 + 2.5 + Wula_Dark_Matter_Flame + 20 + Explosion_Bomb + 0.6 + 0.3 +
  • +
    + None + +
  • RewardStandardQualitySuper
  • +
    + + + \ No newline at end of file diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml new file mode 100644 index 00000000..dc363ecb --- /dev/null +++ b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon_MeltBeam_Example.xml @@ -0,0 +1,108 @@ + + + + + WULA_RW_MeltBeam_Cannon_Example + + 一个使用Verb_ShootMeltBeam的示例武器。它会扫射出两条弯曲的能量光束,并造成范围爆炸。 + Ultra + + Wula/Weapon/WULA_RW_DM_Cannon + Graphic_Single + 1.5 + + +
  • Wula_Ranged_Weapon_T4
  • +
    + 0.8 + Interact_ChargeRifle + + +
  • WULA_Cube_Productor_Energy
  • +
    + WULA_Synth_Weapon_4_DM_Base_Technology + UnfinishedWeapon +
    + + 500 + 300 + 6 + + + 50000 + 10 + 0.6 + 0.6 + 0.6 + 0.6 + 3 + + +
  • + + WulaFallenEmpire.Verb_ShootMeltBeam + + + true + 1.5 + 25 + 20 + 5 + Wula_Dark_Matter_Beam + + + 12 + 5 + 0.8 + 0.7 + 0.5 + + + 0 + BeamGraser_Shooting + Fleck_BeamBurn + 0.32 + Mote_Wula_Dark_Matter_Beam + GraserBeam_End + Fleck_ShotGlow + + +
  • (0, 0)
  • +
  • (0.65, 0.4)
  • +
  • (1, 0.75)
  • + + + + + true + 0.5 + 0.5 + 0.2~0.4 + + + true + false + + + + true + + + + true + 3 + 2.5 + Wula_Dark_Matter_Flame + 20 + Explosion_Bomb + 0.6 + 0.3 + +
    + None + +
  • RewardStandardQualitySuper
  • +
    +
    + +
    \ No newline at end of file diff --git a/MCP/vector_cache/knowledge_cache.json b/MCP/vector_cache/knowledge_cache.json index 09fb1584..3a0d95b6 100644 --- a/MCP/vector_cache/knowledge_cache.json +++ b/MCP/vector_cache/knowledge_cache.json @@ -1032,5 +1032,1039 @@ ], "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\ThingDef.txt\n\npublic class ThingDef : BuildableDef\n{\n\tpublic Type thingClass;\n\n\tpublic ThingCategory category;\n\n\tpublic TickerType tickerType;\n\n\tpublic int stackLimit = 1;\n\n\tpublic IntVec2 size = IntVec2.One;\n\n\tpublic bool destroyable = true;\n\n\tpublic bool rotatable = true;\n\n\tpublic bool smallVolume;\n\n\tpublic bool useHitPoints = true;\n\n\tpublic bool receivesSignals;\n\n\tpublic List comps = new List();\n\n\tpublic List virtualDefs = new List();\n\n\tpublic ThingDef virtualDefParent;\n\n\t[NoTranslate]\n\tpublic string devNote;\n\n\tpublic List killedLeavingsRanges;\n\n\tpublic List killedLeavings;\n\n\tpublic List killedLeavingsPlayerHostile;\n\n\tpublic float killedLeavingsChance = 1f;\n\n\tpublic bool forceLeavingsAllowed;\n\n\tpublic List butcherProducts;\n\n\tpublic List smeltProducts;\n\n\tpublic bool smeltable;\n\n\tpublic bool burnableByRecipe;\n\n\tpublic bool randomizeRotationOnSpawn;\n\n\tpublic List damageMultipliers;\n\n\tpublic bool isTechHediff;\n\n\tpublic RecipeMakerProperties recipeMaker;\n\n\tpublic ThingDef minifiedDef;\n\n\tpublic bool isUnfinishedThing;\n\n\tpublic bool leaveResourcesWhenKilled;\n\n\tpublic ThingDef slagDef;\n\n\tpublic bool isFrameInt;\n\n\tpublic List multipleInteractionCellOffsets;\n\n\tpublic IntVec3 interactionCellOffset = IntVec3.Zero;\n\n\tpublic bool hasInteractionCell;\n\n\tpublic ThingDef interactionCellIcon;\n\n\tpublic bool interactionCellIconReverse;\n\n\tpublic ThingDef filthLeaving;\n\n\tpublic bool forceDebugSpawnable;\n\n\tpublic bool intricate;\n\n\tpublic bool scatterableOnMapGen = true;\n\n\tpublic float deepCommonality;\n\n\tpublic int deepCountPerCell = 300;\n\n\tpublic int deepCountPerPortion = -1;\n\n\tpublic IntRange deepLumpSizeRange = IntRange.Zero;\n\n\tpublic float generateCommonality = 1f;\n\n\tpublic float generateAllowChance = 1f;\n\n\tprivate bool canOverlapZones = true;\n\n\tpublic FloatRange startingHpRange = FloatRange.One;\n\n\t[NoTranslate]\n\tpublic List thingSetMakerTags;\n\n\tpublic bool alwaysFlee;\n\n\tpublic List recipes;\n\n\tpublic bool messageOnDeteriorateInStorage = true;\n\n\tpublic bool deteriorateFromEnvironmentalEffects = true;\n\n\tpublic bool canDeteriorateUnspawned;\n\n\tpublic bool canLoadIntoCaravan = true;\n\n\tpublic bool isMechClusterThreat;\n\n\tpublic FloatRange displayNumbersBetweenSameDefDistRange = FloatRange.Zero;\n\n\tpublic int minRewardCount = 1;\n\n\tpublic bool preventSkyfallersLandingOn;\n\n\tpublic FactionDef requiresFactionToAcquire;\n\n\tpublic float relicChance;\n\n\tpublic OrderedTakeGroupDef orderedTakeGroup;\n\n\tpublic int allowedArchonexusCount;\n\n\tpublic int possessionCount;\n\n\tpublic bool notifyMapRemoved;\n\n\tpublic bool canScatterOver = true;\n\n\tpublic bool genericMarketSellable = true;\n\n\tpublic bool drawHighlight;\n\n\tpublic Color? highlightColor;\n\n\tpublic bool drawHighlightOnlyForHostile;\n\n\tpublic bool autoTargetNearbyIdenticalThings;\n\n\tpublic bool preventDroppingThingsOn;\n\n\tpublic bool hiddenWhileUndiscovered;\n\n\tpublic bool disableImpassableShotOverConfigError;\n\n\tpublic bool showInSearch = true;\n\n\tpublic bool bringAlongOnGravship = true;\n\n\tpublic ThingDef dropPodFaller;\n\n\tpublic bool preventSpawningInResourcePod;\n\n\tpublic bool pathfinderDangerous;\n\n\tpublic bool noRightClickDraftAttack;\n\n\tpublic int gravshipSpawnPriority = 1;\n\n\tpublic List replaceTags;\n\n\tpublic GraphicData graphicData;\n\n\tpublic DrawerType drawerType = DrawerType.RealtimeOnly;\n\n\tpublic bool drawOffscreen;\n\n\tpublic ColorGenerator colorGenerator;\n\n\tpublic float hideAtSnowOrSandDepth = 99999f;\n\n\tpublic bool drawDamagedOverlay = true;\n\n\tpublic bool castEdgeShadows;\n\n\tpublic float staticSunShadowHeight;\n\n\tpublic bool useSameGraphicForGhost;\n\n\tpublic bool useBlueprintGraphicAsGhost;\n\n\tpublic List randomStyle;\n\n\tpublic float randomStyleChance;\n\n\tpublic bool canEditAnyStyle;\n\n\tpublic bool dontPrint;\n\n\tpublic ThingDef defaultStuff;\n\n\tpublic int killedLeavingsExpandRect;\n\n\tpublic bool minifiedManualDraw;\n\n\tpublic float minifiedDrawScale = 1f;\n\n\tpublic Rot4 overrideMinifiedRot = Rot4.Invalid;\n\n\tpublic Vector3 minifiedDrawOffset = Vector3.zero;\n\n\tpublic float deselectedSelectionBracketFactor = 1f;\n\n\tpublic bool selectable;\n\n\tpublic bool containedPawnsSelectable;\n\n\tpublic bool containedItemsSelectable;\n\n\tpublic bool neverMultiSelect;\n\n\tpublic bool isAutoAttackableMapObject;\n\n\tpublic bool hasTooltip;\n\n\tpublic List inspectorTabs;\n\n\t[Unsaved(false)]\n\tpublic List inspectorTabsResolved;\n\n\tpublic bool seeThroughFog;\n\n\tpublic bool drawGUIOverlay;\n\n\tpublic bool drawGUIOverlayQuality = true;\n\n\tpublic ResourceCountPriority resourceReadoutPriority;\n\n\tpublic bool resourceReadoutAlwaysShow;\n\n\tpublic bool drawPlaceWorkersWhileSelected;\n\n\tpublic bool drawPlaceWorkersWhileInstallBlueprintSelected;\n\n\tpublic ConceptDef storedConceptLearnOpportunity;\n\n\tpublic float uiIconScale = 1f;\n\n\tpublic bool hasCustomRectForSelector;\n\n\tpublic bool hideStats;\n\n\tpublic bool hideInspect;\n\n\tpublic bool onlyShowInspectString;\n\n\tpublic bool hideMainDesc;\n\n\tpublic bool alwaysHaulable;\n\n\tpublic bool designateHaulable;\n\n\tpublic List thingCategories;\n\n\tpublic bool mineable;\n\n\tpublic bool socialPropernessMatters;\n\n\tpublic bool stealable = true;\n\n\tpublic SoundDef soundSpawned;\n\n\tpublic SoundDef soundDrop;\n\n\tpublic SoundDef soundPickup;\n\n\tpublic SoundDef soundInteract;\n\n\tpublic SoundDef soundImpactDefault;\n\n\tpublic SoundDef soundPlayInstrument;\n\n\tpublic SoundDef soundOpen;\n\n\tpublic bool saveCompressible;\n\n\tpublic bool isSaveable = true;\n\n\tpublic bool holdsRoof;\n\n\tpublic float fillPercent;\n\n\tpublic bool coversFloor;\n\n\tpublic bool neverOverlapFloors;\n\n\tpublic SurfaceType surfaceType;\n\n\tpublic bool wipesPlants;\n\n\tpublic bool blockPlants;\n\n\tpublic bool blockLight;\n\n\tpublic bool blockWind;\n\n\tpublic bool blockWeather;\n\n\tpublic Tradeability tradeability = Tradeability.All;\n\n\t[NoTranslate]\n\tpublic List tradeTags;\n\n\tpublic bool tradeNeverStack;\n\n\tpublic bool tradeNeverGenerateStacked;\n\n\tpublic bool healthAffectsPrice = true;\n\n\tpublic ColorGenerator colorGeneratorInTraderStock;\n\n\tprivate List verbs;\n\n\tpublic List tools;\n\n\tpublic float equippedAngleOffset;\n\n\tpublic float equippedDistanceOffset;\n\n\tpublic EquipmentType equipmentType;\n\n\tpublic TechLevel techLevel;\n\n\tpublic List weaponClasses;\n\n\t[NoTranslate]\n\tpublic List weaponTags;\n\n\t[NoTranslate]\n\tpublic List techHediffsTags;\n\n\tpublic bool violentTechHediff;\n\n\tpublic bool destroyOnDrop;\n\n\tpublic List equippedStatOffsets;\n\n\tpublic SoundDef meleeHitSound;\n\n\tpublic float recoilPower = 1f;\n\n\tpublic float recoilRelaxation = 10f;\n\n\tpublic bool rotateInShelves = true;\n\n\tpublic bool mergeVerbGizmos = true;\n\n\tpublic BuildableDef entityDefToBuild;\n\n\tpublic ThingDef projectileWhenLoaded;\n\n\tpublic RulePackDef ideoBuildingNamerBase;\n\n\tpublic EntityCodexEntryDef entityCodexEntry;\n\n\tpublic IngestibleProperties ingestible;\n\n\tpublic FilthProperties filth;\n\n\tpublic GasProperties gas;\n\n\tpublic BuildingProperties building;\n\n\tpublic RaceProperties race;\n\n\tpublic ApparelProperties apparel;\n\n\tpublic MoteProperties mote;\n\n\tpublic PlantProperties plant;\n\n\tpublic ProjectileProperties projectile;\n\n\tpublic StuffProperties stuffProps;\n\n\tpublic SkyfallerProperties skyfaller;\n\n\tpublic PawnFlyerProperties pawnFlyer;\n\n\tpublic RitualFocusProperties ritualFocus;\n\n\tpublic IngredientProperties ingredient;\n\n\tpublic MapPortalProperties portal;\n\n\tpublic bool canBeUsedUnderRoof = true;\n\n\t[Unsaved(false)]\n\tprivate string descriptionDetailedCached;\n\n\t[Unsaved(false)]\n\tpublic Graphic interactionCellGraphic;\n\n\t[Unsaved(false)]\n\tprivate bool? isNaturalOrganCached;\n\n\t[Unsaved(false)]\n\tprivate bool? hasSunShadowsCached;\n\n\t[Unsaved(false)]\n\tprivate List cachedRelevantStyleCategories;\n\n\tpublic const int SmallUnitPerVolume = 10;\n\n\tpublic const float SmallVolumePerUnit = 0.1f;\n\n\tpublic const float ArchonexusMaxItemStackMass = 5f;\n\n\tpublic const int ArchonexusMaxItemStackCount = 25;\n\n\tpublic const float ArchonexusMaxItemStackValue = 2000f;\n\n\tpublic const int ArchonexusAutoCalculateValue = -1;\n\n\tprivate List allRecipesCached;\n\n\tprivate static List EmptyVerbPropertiesList = new List();\n\n\tprivate Dictionary concreteExamplesInt;\n\n\tpublic bool EverHaulable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!alwaysHaulable)\n\t\t\t{\n\t\t\t\treturn designateHaulable;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool EverPollutable => !building.isNaturalRock;\n\n\tpublic float VolumePerUnit\n\t{\n\t\tget\n\t\t{\n\t\t\tif (smallVolume)\n\t\t\t{\n\t\t\t\treturn 0.1f;\n\t\t\t}\n\t\t\treturn 1f;\n\t\t}\n\t}\n\n\tpublic override IntVec2 Size => size;\n\n\tpublic bool DiscardOnDestroyed => race == null;\n\n\tpublic int BaseMaxHitPoints => Mathf.RoundToInt(this.GetStatValueAbstract(StatDefOf.MaxHitPoints));\n\n\tpublic float BaseFlammability => this.GetStatValueAbstract(StatDefOf.Flammability);\n\n\tpublic float BaseMarketValue\n\t{\n\t\tget\n\t\t{\n\t\t\treturn this.GetStatValueAbstract(StatDefOf.MarketValue);\n\t\t}\n\t\tset\n\t\t{\n\t\t\tthis.SetStatBaseValue(StatDefOf.MarketValue, value);\n\t\t}\n\t}\n\n\tpublic float BaseMass => this.GetStatValueAbstract(StatDefOf.Mass);\n\n\tpublic int ArchonexusMaxAllowedCount\n\t{\n\t\tget\n\t\t{\n\t\t\tif (allowedArchonexusCount == -1)\n\t\t\t{\n\t\t\t\treturn Mathf.Min(stackLimit, 25, (BaseMass > 0f) ? ((int)(5f / BaseMass)) : 0, (BaseMarketValue > 0f) ? ((int)(2000f / BaseMarketValue)) : 0);\n\t\t\t}\n\t\t\treturn allowedArchonexusCount;\n\t\t}\n\t}\n\n\tpublic bool PlayerAcquirable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (destroyOnDrop)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this == ThingDefOf.ReinforcedBarrel && Find.Storyteller != null && Find.Storyteller.difficulty.classicMortars)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (requiresFactionToAcquire != null && Find.World != null && Find.World.factionManager != null)\n\t\t\t{\n\t\t\t\treturn Find.FactionManager.FirstFactionOfDef(requiresFactionToAcquire) != null;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool EverTransmitsPower\n\t{\n\t\tget\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tif (comps[i] is CompProperties_Power { transmitsPower: not false })\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool Minifiable => minifiedDef != null;\n\n\tpublic bool HasThingIDNumber => category != ThingCategory.Mote;\n\n\tpublic List AllRecipes\n\t{\n\t\tget\n\t\t{\n\t\t\tif (allRecipesCached == null)\n\t\t\t{\n\t\t\t\tallRecipesCached = new List();\n\t\t\t\tif (recipes != null)\n\t\t\t\t{\n\t\t\t\t\tfor (int i = 0; i < recipes.Count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tallRecipesCached.Add(recipes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tList allDefsListForReading = DefDatabase.AllDefsListForReading;\n\t\t\t\tfor (int j = 0; j < allDefsListForReading.Count; j++)\n\t\t\t\t{\n\t\t\t\t\tif (allDefsListForReading[j].recipeUsers != null && allDefsListForReading[j].recipeUsers.Contains(this))\n\t\t\t\t\t{\n\t\t\t\t\t\tallRecipesCached.Add(allDefsListForReading[j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn allRecipesCached;\n\t\t}\n\t}\n\n\tpublic bool ConnectToPower\n\t{\n\t\tget\n\t\t{\n\t\t\tif (EverTransmitsPower)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tif (comps[i].compClass == typeof(CompPowerBattery))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (comps[i].compClass == typeof(CompPowerTrader))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool CoexistsWithFloors\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!neverOverlapFloors)\n\t\t\t{\n\t\t\t\treturn !coversFloor;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic FillCategory Fillage\n\t{\n\t\tget\n\t\t{\n\t\t\tif (fillPercent < 0.01f)\n\t\t\t{\n\t\t\t\treturn FillCategory.None;\n\t\t\t}\n\t\t\tif (fillPercent > 0.99f)\n\t\t\t{\n\t\t\t\treturn FillCategory.Full;\n\t\t\t}\n\t\t\treturn FillCategory.Partial;\n\t\t}\n\t}\n\n\tpublic bool MakeFog => Fillage == FillCategory.Full;\n\n\tpublic bool CanOverlapZones\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null && building.SupportsPlants)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (passability == Traversability.Impassable && category != ThingCategory.Plant && !HasComp(typeof(CompTransporter)))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((int)surfaceType >= 1)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (typeof(ISlotGroupParent).IsAssignableFrom(thingClass))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!canOverlapZones)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ((IsBlueprint || IsFrame) && entityDefToBuild is ThingDef thingDef)\n\t\t\t{\n\t\t\t\treturn thingDef.CanOverlapZones;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool CountAsResource => resourceReadoutPriority != ResourceCountPriority.Uncounted;\n\n\tpublic List Verbs\n\t{\n\t\tget\n\t\t{\n\t\t\tif (verbs != null)\n\t\t\t{\n\t\t\t\treturn verbs;\n\t\t\t}\n\t\t\treturn EmptyVerbPropertiesList;\n\t\t}\n\t}\n\n\tpublic bool CanHaveFaction\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsBlueprint || IsFrame)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn category switch\n\t\t\t{\n\t\t\t\tThingCategory.Pawn => true, \n\t\t\t\tThingCategory.Building => true, \n\t\t\t\t_ => false, \n\t\t\t};\n\t\t}\n\t}\n\n\tpublic bool Claimable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null && building.claimable)\n\t\t\t{\n\t\t\t\treturn !building.isNaturalRock;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic ThingCategoryDef FirstThingCategory\n\t{\n\t\tget\n\t\t{\n\t\t\tif (thingCategories.NullOrEmpty())\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn thingCategories[0];\n\t\t}\n\t}\n\n\tpublic float MedicineTendXpGainFactor => Mathf.Clamp(this.GetStatValueAbstract(StatDefOf.MedicalPotency) * 0.7f, 0.5f, 1f);\n\n\tpublic bool CanEverDeteriorate\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!useHitPoints)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (category != ThingCategory.Item)\n\t\t\t{\n\t\t\t\tif (plant != null)\n\t\t\t\t{\n\t\t\t\t\treturn plant.canDeteriorate;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool CanInteractThroughCorners\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category != ThingCategory.Building)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!holdsRoof)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (building != null && building.isNaturalRock && !IsSmoothed)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool AffectsRegions\n\t{\n\t\tget\n\t\t{\n\t\t\tif (passability != Traversability.Impassable && !IsDoor)\n\t\t\t{\n\t\t\t\treturn IsFence;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool AffectsReachability\n\t{\n\t\tget\n\t\t{\n\t\t\tif (AffectsRegions)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (passability == Traversability.Impassable || IsDoor)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (TouchPathEndModeUtility.MakesOccupiedCellsAlwaysReachableDiagonally(this))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic string DescriptionDetailed\n\t{\n\t\tget\n\t\t{\n\t\t\tif (descriptionDetailedCached == null)\n\t\t\t{\n\t\t\t\tStringBuilder stringBuilder = new StringBuilder();\n\t\t\t\tstringBuilder.Append(description);\n\t\t\t\tif (IsApparel)\n\t\t\t\t{\n\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\tstringBuilder.AppendLine(string.Format(\"{0}: {1}\", \"Layer\".Translate(), apparel.GetLayersString()));\n\t\t\t\t\tstringBuilder.Append(string.Format(\"{0}: {1}\", \"Covers\".Translate(), apparel.GetCoveredOuterPartsString(BodyDefOf.Human)));\n\t\t\t\t\tif (equippedStatOffsets != null && equippedStatOffsets.Count > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tfor (int i = 0; i < equippedStatOffsets.Count; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (i > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tStatModifier statModifier = equippedStatOffsets[i];\n\t\t\t\t\t\t\tstringBuilder.Append($\"{statModifier.stat.LabelCap}: {statModifier.ValueToStringAsOffset}\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescriptionDetailedCached = stringBuilder.ToString();\n\t\t\t}\n\t\t\treturn descriptionDetailedCached;\n\t\t}\n\t}\n\n\tpublic bool CanBenefitFromCover\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Pawn)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (building != null && building.IsTurret)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool PotentiallySmeltable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!smeltable)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (base.MadeFromStuff)\n\t\t\t{\n\t\t\t\tforeach (ThingDef item in GenStuff.AllowedStuffsFor(this))\n\t\t\t\t{\n\t\t\t\t\tif (item.smeltable)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool HasSingleOrMultipleInteractionCells\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!hasInteractionCell)\n\t\t\t{\n\t\t\t\treturn !multipleInteractionCellOffsets.NullOrEmpty();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool IsApparel => apparel != null;\n\n\tpublic bool IsBed => typeof(Building_Bed).IsAssignableFrom(thingClass);\n\n\tpublic bool IsWall\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null)\n\t\t\t{\n\t\t\t\treturn building.isWall;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCorpse => typeof(Corpse).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFrame => isFrameInt;\n\n\tpublic bool IsBlueprint\n\t{\n\t\tget\n\t\t{\n\t\t\tif (entityDefToBuild != null)\n\t\t\t{\n\t\t\t\treturn category == ThingCategory.Ethereal;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsStuff => stuffProps != null;\n\n\tpublic bool IsMedicine => statBases.StatListContains(StatDefOf.MedicalPotency);\n\n\tpublic bool IsDoor => typeof(Building_Door).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFence\n\t{\n\t\tget\n\t\t{\n\t\t\tif (building != null)\n\t\t\t{\n\t\t\t\treturn building.isFence;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsFilth => filth != null;\n\n\tpublic bool IsIngestible => ingestible != null;\n\n\tpublic bool IsNutritionGivingIngestible\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsIngestible)\n\t\t\t{\n\t\t\t\treturn ingestible.CachedNutrition > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNutritionGivingIngestibleForHumanlikeBabies\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsNutritionGivingIngestible && ingestible.HumanEdible)\n\t\t\t{\n\t\t\t\treturn ingestible.babiesCanIngest;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && (!verbs.NullOrEmpty() || !tools.NullOrEmpty()))\n\t\t\t{\n\t\t\t\treturn !IsApparel;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCommsConsole => typeof(Building_CommsConsole).IsAssignableFrom(thingClass);\n\n\tpublic bool IsOrbitalTradeBeacon => typeof(Building_OrbitalTradeBeacon).IsAssignableFrom(thingClass);\n\n\tpublic bool IsFoodDispenser => typeof(Building_NutrientPasteDispenser).IsAssignableFrom(thingClass);\n\n\tpublic bool IsDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.drugCategory != DrugCategory.None;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsPleasureDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsDrug)\n\t\t\t{\n\t\t\t\treturn ingestible.joy > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNonMedicalDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsDrug)\n\t\t\t{\n\t\t\t\treturn ingestible.drugCategory != DrugCategory.Medical;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsTable\n\t{\n\t\tget\n\t\t{\n\t\t\tif (surfaceType == SurfaceType.Eat)\n\t\t\t{\n\t\t\t\treturn HasComp(typeof(CompGatherSpot));\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWorkTable => typeof(Building_WorkTable).IsAssignableFrom(thingClass);\n\n\tpublic bool IsShell => projectileWhenLoaded != null;\n\n\tpublic bool IsArt => IsWithinCategory(ThingCategoryDefOf.BuildingsArt);\n\n\tpublic bool IsSmoothable => building?.smoothedThing != null;\n\n\tpublic bool IsSmoothed => building?.unsmoothedThing != null;\n\n\tpublic bool IsMetal\n\t{\n\t\tget\n\t\t{\n\t\t\tif (stuffProps != null)\n\t\t\t{\n\t\t\t\treturn stuffProps.categories.Contains(StuffCategoryDefOf.Metallic);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsCryptosleepCasket => typeof(Building_CryptosleepCasket).IsAssignableFrom(thingClass);\n\n\tpublic bool IsGibbetCage => typeof(Building_GibbetCage).IsAssignableFrom(thingClass);\n\n\tpublic bool IsMechGestator => typeof(Building_MechGestator).IsAssignableFrom(thingClass);\n\n\tpublic bool IsMechRecharger => typeof(Building_MechCharger).IsAssignableFrom(thingClass);\n\n\tpublic bool IsAddictiveDrug\n\t{\n\t\tget\n\t\t{\n\t\t\tCompProperties_Drug compProperties = GetCompProperties();\n\t\t\tif (compProperties != null)\n\t\t\t{\n\t\t\t\treturn compProperties.addictiveness > 0f;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsMeat\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.MeatRaw);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsEgg\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\tif (!thingCategories.Contains(ThingCategoryDefOf.EggsFertilized))\n\t\t\t\t{\n\t\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.EggsUnfertilized);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsLeather\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.Leathers);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWool\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Item && thingCategories != null)\n\t\t\t{\n\t\t\t\treturn thingCategories.Contains(ThingCategoryDefOf.Wools);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsRangedWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!IsWeapon)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!verbs.NullOrEmpty())\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (!verbs[i].IsMeleeAttack)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsMeleeWeapon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsWeapon)\n\t\t\t{\n\t\t\t\treturn !IsRangedWeapon;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsWeaponUsingProjectiles\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!IsWeapon)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!verbs.NullOrEmpty())\n\t\t\t{\n\t\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (verbs[i].LaunchesProjectile)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsShieldThatBlocksRanged\n\t{\n\t\tget\n\t\t{\n\t\t\tif (HasComp(typeof(CompShield)))\n\t\t\t{\n\t\t\t\treturn GetCompProperties().blocksRangedWeapons;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsBuildingArtificial\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Building || IsFrame)\n\t\t\t{\n\t\t\t\tif (building != null)\n\t\t\t\t{\n\t\t\t\t\tif (!building.isNaturalRock)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn !building.isResourceRock;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsNonResourceNaturalRock\n\t{\n\t\tget\n\t\t{\n\t\t\tif (category == ThingCategory.Building && building.isNaturalRock && !building.isResourceRock && !building.mineablePreventNaturalRockOnSurface)\n\t\t\t{\n\t\t\t\treturn !IsSmoothed;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool HasSunShadows\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!hasSunShadowsCached.HasValue)\n\t\t\t{\n\t\t\t\thasSunShadowsCached = typeof(Pawn).IsAssignableFrom(thingClass);\n\t\t\t}\n\t\t\treturn hasSunShadowsCached.Value;\n\t\t}\n\t}\n\n\tpublic bool IsNaturalOrgan\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!isNaturalOrganCached.HasValue)\n\t\t\t{\n\t\t\t\tif (category != ThingCategory.Item)\n\t\t\t\t{\n\t\t\t\t\tisNaturalOrganCached = false;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tList allDefsListForReading = DefDatabase.AllDefsListForReading;\n\t\t\t\t\tisNaturalOrganCached = false;\n\t\t\t\t\tfor (int i = 0; i < allDefsListForReading.Count; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (allDefsListForReading[i].spawnThingOnRemoved == this)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisNaturalOrganCached = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn isNaturalOrganCached.Value;\n\t\t}\n\t}\n\n\tpublic bool IsFungus\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.Fungus);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsAnimalProduct\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.AnimalProduct);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsProcessedFood\n\t{\n\t\tget\n\t\t{\n\t\t\tif (ingestible != null)\n\t\t\t{\n\t\t\t\treturn ingestible.foodType.HasFlag(FoodTypeFlags.Processed);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool CanAffectLinker\n\t{\n\t\tget\n\t\t{\n\t\t\tif (graphicData == null || !graphicData.Linked)\n\t\t\t{\n\t\t\t\treturn IsDoor;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic bool IsNonDeconstructibleAttackableBuilding\n\t{\n\t\tget\n\t\t{\n\t\t\tif (IsBuildingArtificial && !building.IsDeconstructible && destroyable && !mineable && building.isTargetable)\n\t\t\t{\n\t\t\t\treturn building.draftAttackNonDeconstructable;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic bool IsPlant => typeof(Plant).IsAssignableFrom(thingClass);\n\n\tpublic bool IsDeadPlant => typeof(DeadPlant).IsAssignableFrom(thingClass);\n\n\tpublic bool IsStudiable => HasAssignableCompFrom(typeof(CompStudiable));\n\n\tpublic List RelevantStyleCategories\n\t{\n\t\tget\n\t\t{\n\t\t\tif (cachedRelevantStyleCategories == null)\n\t\t\t{\n\t\t\t\tcachedRelevantStyleCategories = new List();\n\t\t\t\tforeach (StyleCategoryDef allDef in DefDatabase.AllDefs)\n\t\t\t\t{\n\t\t\t\t\tif (allDef.thingDefStyles.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tforeach (ThingDefStyle thingDefStyle in allDef.thingDefStyles)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (thingDefStyle.ThingDef == this)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcachedRelevantStyleCategories.Add(allDef);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cachedRelevantStyleCategories;\n\t\t}\n\t}\n\n\tpublic string LabelAsStuff\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!stuffProps.stuffAdjective.NullOrEmpty())\n\t\t\t{\n\t\t\t\treturn stuffProps.stuffAdjective;\n\t\t\t}\n\t\t\treturn label;\n\t\t}\n\t}\n\n\tpublic bool BlocksPlanting(bool canWipePlants = false)\n\t{\n\t\tif (building != null && building.SupportsPlants)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (building != null && building.isAttachment)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (blockPlants)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (!canWipePlants && category == ThingCategory.Plant)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif ((int)Fillage > 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (this.IsEdifice())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic virtual bool CanSpawnAt(IntVec3 pos, Rot4 rot, Map map)\n\t{\n\t\treturn true;\n\t}\n\n\tpublic bool EverStorable(bool willMinifyIfPossible)\n\t{\n\t\tif (typeof(MinifiedThing).IsAssignableFrom(thingClass))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (!thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tif (category == ThingCategory.Item)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (willMinifyIfPossible && Minifiable)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic Thing GetConcreteExample(ThingDef stuff = null)\n\t{\n\t\tif (concreteExamplesInt == null)\n\t\t{\n\t\t\tconcreteExamplesInt = new Dictionary();\n\t\t}\n\t\tif (stuff == null)\n\t\t{\n\t\t\tstuff = ThingDefOf.Steel;\n\t\t}\n\t\tif (!concreteExamplesInt.ContainsKey(stuff))\n\t\t{\n\t\t\tif (race == null)\n\t\t\t{\n\t\t\t\tconcreteExamplesInt[stuff] = ThingMaker.MakeThing(this, base.MadeFromStuff ? stuff : null);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconcreteExamplesInt[stuff] = PawnGenerator.GeneratePawn(DefDatabase.AllDefsListForReading.FirstOrDefault((PawnKindDef pkd) => pkd.race == this));\n\t\t\t}\n\t\t}\n\t\treturn concreteExamplesInt[stuff];\n\t}\n\n\tpublic CompProperties CompDefFor() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == typeof(T))\n\t\t\t{\n\t\t\t\treturn comps[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic CompProperties CompDefForAssignableFrom() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (typeof(T).IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn comps[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic bool HasComp(Type compType)\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == compType)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic bool HasComp() where T : ThingComp\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i].compClass == typeof(T) || typeof(T).IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic bool HasAssignableCompFrom(Type compType)\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (compType.IsAssignableFrom(comps[i].compClass))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic T GetCompProperties() where T : CompProperties\n\t{\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tif (comps[i] is T result)\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic override void PostLoad()\n\t{\n\t\tif (graphicData != null)\n\t\t{\n\t\t\tLongEventHandler.ExecuteWhenFinished(delegate\n\t\t\t{\n\t\t\t\tGraphicData graphicData = this.graphicData;\n\t\t\t\tif (graphicData.shaderType == null)\n\t\t\t\t{\n\t\t\t\t\tgraphicData.shaderType = ShaderTypeDefOf.Cutout;\n\t\t\t\t}\n\t\t\t\tContentFinderRequester.requester = this;\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tgraphic = this.graphicData.Graphic;\n\t\t\t\t\tif (drawerType != DrawerType.RealtimeOnly)\n\t\t\t\t\t{\n\t\t\t\t\t\tTextureAtlasGroup textureAtlasGroup = category.ToAtlasGroup();\n\t\t\t\t\t\tgraphic.TryInsertIntoAtlas(textureAtlasGroup);\n\t\t\t\t\t\tif (textureAtlasGroup == TextureAtlasGroup.Building && Minifiable)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgraphic.TryInsertIntoAtlas(TextureAtlasGroup.Item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfinally\n\t\t\t\t{\n\t\t\t\t\tContentFinderRequester.requester = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (tools != null)\n\t\t{\n\t\t\tfor (int i = 0; i < tools.Count; i++)\n\t\t\t{\n\t\t\t\ttools[i].id = i.ToString();\n\t\t\t}\n\t\t}\n\t\tif (verbs != null && verbs.Count == 1 && verbs[0].label.NullOrEmpty())\n\t\t{\n\t\t\tverbs[0].label = label;\n\t\t}\n\t\tbase.PostLoad();\n\t\tif (category == ThingCategory.Building && building == null)\n\t\t{\n\t\t\tbuilding = new BuildingProperties();\n\t\t}\n\t\tbuilding?.PostLoadSpecial(this);\n\t\tapparel?.PostLoadSpecial(this);\n\t\tplant?.PostLoadSpecial(this);\n\t\tif (comps == null)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tforeach (CompProperties comp in comps)\n\t\t{\n\t\t\tcomp.PostLoadSpecial(this);\n\t\t}\n\t}\n\n\tprotected override void ResolveIcon()\n\t{\n\t\tbase.ResolveIcon();\n\t\tif (category == ThingCategory.Pawn)\n\t\t{\n\t\t\tif (!uiIconPath.NullOrEmpty())\n\t\t\t{\n\t\t\t\tuiIcon = ContentFinder.Get(uiIconPath);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (race.Humanlike)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tPawnKindDef anyPawnKind = race.AnyPawnKind;\n\t\t\t\tif (anyPawnKind != null)\n\t\t\t\t{\n\t\t\t\t\tMaterial material = ((ModsConfig.BiotechActive && anyPawnKind.RaceProps.IsMechanoid) ? anyPawnKind.lifeStages.First() : anyPawnKind.lifeStages.Last()).bodyGraphicData.Graphic.MatAt(Rot4.East);\n\t\t\t\t\tuiIcon = (Texture2D)material.mainTexture;\n\t\t\t\t\tuiIconColor = material.color;\n\t\t\t\t\tif (ShaderDatabase.TryGetUIShader(material.shader, out var uiShader) && MaterialPool.TryGetRequestForMat(material, out var request))\n\t\t\t\t\t{\n\t\t\t\t\t\trequest.shader = uiShader;\n\t\t\t\t\t\tuiIconMaterial = MaterialPool.MatFrom(request);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tThingDef thingDef = GenStuff.DefaultStuffFor(this);\n\t\t\tif (colorGenerator != null && (thingDef == null || thingDef.stuffProps.allowColorGenerators))\n\t\t\t{\n\t\t\t\tuiIconColor = colorGenerator.ExemplaryColor;\n\t\t\t}\n\t\t\telse if (thingDef != null)\n\t\t\t{\n\t\t\t\tuiIconColor = GetColorForStuff(thingDef);\n\t\t\t}\n\t\t\telse if (graphicData != null)\n\t\t\t{\n\t\t\t\tuiIconColor = graphicData.color;\n\t\t\t}\n\t\t\tif (rotatable && graphic != null && graphic != BaseContent.BadGraphic && graphic.ShouldDrawRotated && defaultPlacingRot == Rot4.South)\n\t\t\t{\n\t\t\t\tuiIconAngle = 180f + graphic.DrawRotatedExtraAngleOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override void ResolveReferences()\n\t{\n\t\tbase.ResolveReferences();\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tingestible.parent = this;\n\t\t}\n\t\tif (stuffProps != null)\n\t\t{\n\t\t\tstuffProps.parent = this;\n\t\t}\n\t\tbuilding?.ResolveReferencesSpecial();\n\t\tgraphicData?.ResolveReferencesSpecial();\n\t\trace?.ResolveReferencesSpecial();\n\t\tstuffProps?.ResolveReferencesSpecial();\n\t\tapparel?.ResolveReferencesSpecial();\n\t\tif (soundImpactDefault == null)\n\t\t{\n\t\t\tsoundImpactDefault = SoundDefOf.BulletImpact_Ground;\n\t\t}\n\t\tif (soundDrop == null)\n\t\t{\n\t\t\tsoundDrop = SoundDefOf.Standard_Drop;\n\t\t}\n\t\tif (soundPickup == null)\n\t\t{\n\t\t\tsoundPickup = SoundDefOf.Standard_Pickup;\n\t\t}\n\t\tif (soundInteract == null)\n\t\t{\n\t\t\tsoundInteract = SoundDefOf.Standard_Pickup;\n\t\t}\n\t\tif (inspectorTabs != null && inspectorTabs.Any())\n\t\t{\n\t\t\tinspectorTabsResolved = new List();\n\t\t\tfor (int i = 0; i < inspectorTabs.Count; i++)\n\t\t\t{\n\t\t\t\ttry\n\t\t\t\t{\n\t\t\t\t\tinspectorTabsResolved.Add(InspectTabManager.GetSharedInstance(inspectorTabs[i]));\n\t\t\t\t}\n\t\t\t\tcatch (Exception ex)\n\t\t\t\t{\n\t\t\t\t\tLog.Error(\"Could not instantiate inspector tab of type \" + inspectorTabs[i]?.ToString() + \": \" + ex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int j = 0; j < comps.Count; j++)\n\t\t\t{\n\t\t\t\tcomps[j].ResolveReferences(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override IEnumerable ConfigErrors()\n\t{\n\t\tforeach (string item in base.ConfigErrors())\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (category != ThingCategory.Ethereal && label.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"no label\";\n\t\t}\n\t\tif (category == ThingCategory.Building && !IsFrame && building.IsDeconstructible && thingClass != null && typeof(Building).IsSubclassOf(thingClass))\n\t\t{\n\t\t\tyield return \"has building category and is marked as deconstructible, but thing class is not a subclass of building (\" + thingClass.Name + \")\";\n\t\t}\n\t\tif (graphicData != null)\n\t\t{\n\t\t\tforeach (string item2 in graphicData.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item2;\n\t\t\t}\n\t\t}\n\t\tif (projectile != null)\n\t\t{\n\t\t\tforeach (string item3 in projectile.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item3;\n\t\t\t}\n\t\t}\n\t\tif (statBases != null)\n\t\t{\n\t\t\tforeach (StatModifier statBase in statBases)\n\t\t\t{\n\t\t\t\tif (statBases.Count((StatModifier st) => st.stat == statBase.stat) > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return \"defines the stat base \" + statBase.stat?.ToString() + \" more than once.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!BeautyUtility.BeautyRelevant(category) && this.StatBaseDefined(StatDefOf.Beauty))\n\t\t{\n\t\t\tyield return \"Beauty stat base is defined, but Things of category \" + category.ToString() + \" cannot have beauty.\";\n\t\t}\n\t\tif (!BeautyUtility.BeautyRelevant(category) && this.StatBaseDefined(StatDefOf.BeautyOutdoors))\n\t\t{\n\t\t\tyield return \"BeautyOutdoors stat base is defined, but Things of category \" + category.ToString() + \" cannot have beauty.\";\n\t\t}\n\t\tif (char.IsNumber(defName[defName.Length - 1]))\n\t\t{\n\t\t\tyield return \"ends with a numerical digit, which is not allowed on ThingDefs.\";\n\t\t}\n\t\tif (thingClass == null)\n\t\t{\n\t\t\tyield return \"has null thingClass.\";\n\t\t}\n\t\tif (comps.Count > 0 && !typeof(ThingWithComps).IsAssignableFrom(thingClass))\n\t\t{\n\t\t\tyield return \"has components but it's thingClass is not a ThingWithComps\";\n\t\t}\n\t\tif (ConnectToPower && drawerType == DrawerType.RealtimeOnly && IsFrame)\n\t\t{\n\t\t\tyield return \"connects to power but does not add to map mesh. Will not create wire meshes.\";\n\t\t}\n\t\tif (costList != null)\n\t\t{\n\t\t\tforeach (ThingDefCountClass cost in costList)\n\t\t\t{\n\t\t\t\tif (cost.count == 0)\n\t\t\t\t{\n\t\t\t\t\tyield return \"cost in \" + cost.thingDef?.ToString() + \" is zero.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tThingCategoryDef thingCategoryDef = thingCategories?.FirstOrDefault((ThingCategoryDef cat) => thingCategories.Count((ThingCategoryDef c) => c == cat) > 1);\n\t\tif (thingCategoryDef != null)\n\t\t{\n\t\t\tyield return \"has duplicate thingCategory \" + thingCategoryDef?.ToString() + \".\";\n\t\t}\n\t\tif (Fillage == FillCategory.Full && category != ThingCategory.Building)\n\t\t{\n\t\t\tyield return \"gives full cover but is not a building.\";\n\t\t}\n\t\tif (equipmentType != 0)\n\t\t{\n\t\t\tif (techLevel == TechLevel.Undefined && !destroyOnDrop)\n\t\t\t{\n\t\t\t\tyield return \"is equipment but has no tech level.\";\n\t\t\t}\n\t\t\tif (!comps.Any((CompProperties c) => typeof(CompEquippable).IsAssignableFrom(c.compClass)))\n\t\t\t{\n\t\t\t\tyield return \"is equipment but has no CompEquippable\";\n\t\t\t}\n\t\t}\n\t\tif (thingClass == typeof(Bullet) && projectile.damageDef == null)\n\t\t{\n\t\t\tyield return \" is a bullet but has no damageDef.\";\n\t\t}\n\t\tif (destroyOnDrop && tradeability != 0)\n\t\t{\n\t\t\tyield return \"destroyOnDrop but tradeability is \" + tradeability;\n\t\t}\n\t\tif (stackLimit > 1 && !drawGUIOverlay)\n\t\t{\n\t\t\tyield return \"has stackLimit > 1 but also has drawGUIOverlay = false.\";\n\t\t}\n\t\tif (damageMultipliers != null)\n\t\t{\n\t\t\tforeach (DamageMultiplier mult in damageMultipliers)\n\t\t\t{\n\t\t\t\tif (damageMultipliers.Count((DamageMultiplier m) => m.damageDef == mult.damageDef) > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return \"has multiple damage multipliers for damageDef \" + mult.damageDef;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (Fillage == FillCategory.Full && !this.IsEdifice())\n\t\t{\n\t\t\tyield return \"fillPercent is 1.00 but is not edifice\";\n\t\t}\n\t\tif (base.MadeFromStuff && constructEffect != null)\n\t\t{\n\t\t\tyield return \"madeFromStuff but has a defined constructEffect (which will always be overridden by stuff's construct animation).\";\n\t\t}\n\t\tif (base.MadeFromStuff && stuffCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"madeFromStuff but has no stuffCategories.\";\n\t\t}\n\t\tif (costList.NullOrEmpty() && costStuffCount <= 0 && recipeMaker != null)\n\t\t{\n\t\t\tyield return \"has a recipeMaker but no costList or costStuffCount.\";\n\t\t}\n\t\tif (costStuffCount > 0 && stuffCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"has costStuffCount but no stuffCategories.\";\n\t\t}\n\t\tif (this.GetStatValueAbstract(StatDefOf.DeteriorationRate) > 1E-05f && !CanEverDeteriorate && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"has >0 DeteriorationRate but can't deteriorate.\";\n\t\t}\n\t\tif (smeltProducts != null && !smeltable)\n\t\t{\n\t\t\tyield return \"has smeltProducts but has smeltable=false\";\n\t\t}\n\t\tif (smeltable && smeltProducts.NullOrEmpty() && base.CostList.NullOrEmpty() && !IsStuff && !base.MadeFromStuff && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"is smeltable but does not give anything for smelting.\";\n\t\t}\n\t\tif (equipmentType != 0 && verbs.NullOrEmpty() && tools.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is equipment but has no verbs or tools\";\n\t\t}\n\t\tif (Minifiable && thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is minifiable but not in any thing category\";\n\t\t}\n\t\tif (category == ThingCategory.Building && !Minifiable && !thingCategories.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"is not minifiable yet has thing categories (could be confusing in thing filters because it can't be moved/stored anyway)\";\n\t\t}\n\t\tif (!destroyOnDrop && !typeof(MinifiedThing).IsAssignableFrom(thingClass) && (EverHaulable || Minifiable) && (statBases.NullOrEmpty() || !statBases.Any((StatModifier s) => s.stat == StatDefOf.Mass)))\n\t\t{\n\t\t\tyield return \"is haulable, but does not have an authored mass value\";\n\t\t}\n\t\tif (ingestible == null && this.GetStatValueAbstract(StatDefOf.Nutrition) != 0f)\n\t\t{\n\t\t\tyield return \"has nutrition but ingestible properties are null\";\n\t\t}\n\t\tif (BaseFlammability != 0f && !useHitPoints && category != ThingCategory.Pawn && !destroyOnDrop)\n\t\t{\n\t\t\tyield return \"flammable but has no hitpoints (will burn indefinitely)\";\n\t\t}\n\t\tif (graphicData?.shadowData != null && staticSunShadowHeight > 0f)\n\t\t{\n\t\t\tyield return \"graphicData defines a shadowInfo but staticSunShadowHeight > 0\";\n\t\t}\n\t\tif (saveCompressible && Claimable)\n\t\t{\n\t\t\tyield return \"claimable item is compressible; faction will be unset after load\";\n\t\t}\n\t\tif (deepCommonality > 0f != deepLumpSizeRange.TrueMax > 0)\n\t\t{\n\t\t\tyield return \"if deepCommonality or deepLumpSizeRange is set, the other also must be set\";\n\t\t}\n\t\tif (deepCommonality > 0f && deepCountPerPortion <= 0)\n\t\t{\n\t\t\tyield return \"deepCommonality > 0 but deepCountPerPortion is not set\";\n\t\t}\n\t\tif (verbs != null)\n\t\t{\n\t\t\tfor (int i = 0; i < verbs.Count; i++)\n\t\t\t{\n\t\t\t\tforeach (string item4 in verbs[i].ConfigErrors(this))\n\t\t\t\t{\n\t\t\t\t\tyield return $\"verb {i}: {item4}\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tforeach (string item5 in building.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item5;\n\t\t\t}\n\t\t\tif ((building.isAirtight || building.isStuffableAirtight) && Fillage != FillCategory.Full)\n\t\t\t{\n\t\t\t\tyield return \"is airtight but Fillage is not Full\";\n\t\t\t}\n\t\t}\n\t\tif (apparel != null)\n\t\t{\n\t\t\tforeach (string item6 in apparel.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item6;\n\t\t\t}\n\t\t}\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tforeach (string item7 in comps[i].ConfigErrors(this))\n\t\t\t\t{\n\t\t\t\t\tyield return item7;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (race != null)\n\t\t{\n\t\t\tforeach (string item8 in race.ConfigErrors(this))\n\t\t\t{\n\t\t\t\tyield return item8;\n\t\t\t}\n\t\t\tif (race.body != null && race != null && tools != null)\n\t\t\t{\n\t\t\t\tint i;\n\t\t\t\tfor (i = 0; i < tools.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tif (tools[i].linkedBodyPartsGroup != null && !race.body.AllParts.Any((BodyPartRecord part) => part.groups.Contains(tools[i].linkedBodyPartsGroup)))\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return \"has tool with linkedBodyPartsGroup \" + tools[i].linkedBodyPartsGroup?.ToString() + \" but body \" + race.body?.ToString() + \" has no parts with that group.\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (race.Animal && this.GetStatValueAbstract(StatDefOf.Wildness) < 0f)\n\t\t\t{\n\t\t\t\tyield return \"is animal but wildness is not defined\";\n\t\t\t}\n\t\t}\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tforeach (string item9 in ingestible.ConfigErrors())\n\t\t\t{\n\t\t\t\tyield return item9;\n\t\t\t}\n\t\t}\n\t\tif (plant != null)\n\t\t{\n\t\t\tforeach (string item10 in plant.ConfigErrors())\n\t\t\t{\n\t\t\t\tyield return item10;\n\t\t\t}\n\t\t}\n\t\tif (tools != null)\n\t\t{\n\t\t\tTool tool = tools.SelectMany((Tool lhs) => tools.Where((Tool rhs) => lhs != rhs && lhs.id == rhs.id)).FirstOrDefault();\n\t\t\tif (tool != null)\n\t\t\t{\n\t\t\t\tyield return \"duplicate thingdef tool id \" + tool.id;\n\t\t\t}\n\t\t\tforeach (Tool tool2 in tools)\n\t\t\t{\n\t\t\t\tforeach (string item11 in tool2.ConfigErrors())\n\t\t\t\t{\n\t\t\t\t\tyield return item11;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!randomStyle.NullOrEmpty())\n\t\t{\n\t\t\tforeach (ThingStyleChance item12 in randomStyle)\n\t\t\t{\n\t\t\t\tif (item12.Chance <= 0f)\n\t\t\t\t{\n\t\t\t\t\tyield return \"style chance <= 0.\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!comps.Any((CompProperties c) => c.compClass == typeof(CompStyleable)))\n\t\t\t{\n\t\t\t\tyield return \"random style assigned, but missing CompStyleable!\";\n\t\t\t}\n\t\t}\n\t\tif (relicChance > 0f && category != ThingCategory.Item)\n\t\t{\n\t\t\tyield return \"relic chance > 0 but category != item\";\n\t\t}\n\t\tif (hasInteractionCell && !multipleInteractionCellOffsets.NullOrEmpty())\n\t\t{\n\t\t\tyield return \"both single and multiple interaction cells are defined, it should be one or the other\";\n\t\t}\n\t\tif (Fillage != FillCategory.Full && passability == Traversability.Impassable && !IsDoor && base.BuildableByPlayer && !disableImpassableShotOverConfigError)\n\t\t{\n\t\t\tyield return \"impassable, player-buildable building that can be shot/seen over.\";\n\t\t}\n\t}\n\n\tpublic static ThingDef Named(string defName)\n\t{\n\t\treturn DefDatabase.GetNamed(defName);\n\t}\n\n\tpublic bool IsWithinCategory(ThingCategoryDef category)\n\t{\n\t\tif (thingCategories == null)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (int i = 0; i < thingCategories.Count; i++)\n\t\t{\n\t\t\tfor (ThingCategoryDef thingCategoryDef = thingCategories[i]; thingCategoryDef != null; thingCategoryDef = thingCategoryDef.parent)\n\t\t\t{\n\t\t\t\tif (thingCategoryDef == category)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic void Notify_UnlockedByResearch()\n\t{\n\t\tif (comps != null)\n\t\t{\n\t\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t\t{\n\t\t\t\tcomps[i].Notify_PostUnlockedByResearch(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override IEnumerable SpecialDisplayStats(StatRequest req)\n\t{\n\t\tforeach (StatDrawEntry item in base.SpecialDisplayStats(req))\n\t\t{\n\t\t\tyield return item;\n\t\t}\n\t\tif (apparel != null)\n\t\t{\n\t\t\tstring coveredOuterPartsString = apparel.GetCoveredOuterPartsString(BodyDefOf.Human);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Covers\".Translate(), coveredOuterPartsString, \"Stat_Thing_Apparel_Covers_Desc\".Translate(), 2750);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Layer\".Translate(), apparel.GetLayersString(), \"Stat_Thing_Apparel_Layer_Desc\".Translate(), 2751);\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_CountsAsClothingNudity_Name\".Translate(), apparel.countsAsClothingForNudity ? \"Yes\".Translate() : \"No\".Translate(), \"Stat_Thing_Apparel_CountsAsClothingNudity_Desc\".Translate(), 2753);\n\t\t\tif (ModsConfig.BiotechActive)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_ValidLifestage\".Translate(), apparel.developmentalStageFilter.ToCommaList().CapitalizeFirst(), \"Stat_Thing_Apparel_ValidLifestage_Desc\".Translate(), 2748);\n\t\t\t}\n\t\t\tif (apparel.gender != 0)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Apparel, \"Stat_Thing_Apparel_Gender\".Translate(), apparel.gender.GetLabel().CapitalizeFirst(), \"Stat_Thing_Apparel_Gender_Desc\".Translate(), 2749);\n\t\t\t}\n\t\t}\n\t\tif (IsMedicine && MedicineTendXpGainFactor != 1f)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"MedicineXpGainFactor\".Translate(), MedicineTendXpGainFactor.ToStringPercent(), \"Stat_Thing_Drug_MedicineXpGainFactor_Desc\".Translate(), 1000);\n\t\t}\n\t\tif (fillPercent > 0f && (category == ThingCategory.Item || category == ThingCategory.Building || category == ThingCategory.Plant))\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"CoverEffectiveness\".Translate(), this.BaseBlockChance().ToStringPercent(), \"CoverEffectivenessExplanation\".Translate(), 2000);\n\t\t}\n\t\tif (constructionSkillPrerequisite > 0)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"SkillRequiredToBuild\".Translate(SkillDefOf.Construction.LabelCap), constructionSkillPrerequisite.ToString(), \"SkillRequiredToBuildExplanation\".Translate(SkillDefOf.Construction.LabelCap), 1100);\n\t\t}\n\t\tif (artisticSkillPrerequisite > 0)\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"SkillRequiredToBuild\".Translate(SkillDefOf.Artistic.LabelCap), artisticSkillPrerequisite.ToString(), \"SkillRequiredToBuildExplanation\".Translate(SkillDefOf.Artistic.LabelCap), 1100);\n\t\t}\n\t\tIEnumerable recipes = DefDatabase.AllDefsListForReading.Where((RecipeDef r) => r.products.Count == 1 && r.products.Any((ThingDefCountClass p) => p.thingDef == this) && !r.IsSurgery);\n\t\tif (recipes.Any())\n\t\t{\n\t\t\tIEnumerable enumerable = (from u in recipes.Where((RecipeDef x) => x.recipeUsers != null).SelectMany((RecipeDef r) => r.recipeUsers)\n\t\t\t\tselect u.label).Concat(from x in DefDatabase.AllDefsListForReading\n\t\t\t\twhere x.recipes != null && x.recipes.Any((RecipeDef y) => y.products.Any((ThingDefCountClass z) => z.thingDef == this))\n\t\t\t\tselect x.label).Distinct();\n\t\t\tif (enumerable.Any())\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"CreatedAt\".Translate(), enumerable.ToCommaList().CapitalizeFirst(), \"Stat_Thing_CreatedAt_Desc\".Translate(), 1103);\n\t\t\t}\n\t\t\tRecipeDef recipeDef = recipes.FirstOrDefault();\n\t\t\tif (recipeDef != null && !recipeDef.ingredients.NullOrEmpty())\n\t\t\t{\n\t\t\t\tBuildableDef.tmpCostList.Clear();\n\t\t\t\tBuildableDef.tmpHyperlinks.Clear();\n\t\t\t\tfor (int j = 0; j < recipeDef.ingredients.Count; j++)\n\t\t\t\t{\n\t\t\t\t\tIngredientCount ingredientCount = recipeDef.ingredients[j];\n\t\t\t\t\tif (ingredientCount.filter.Summary.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tIEnumerable allowedThingDefs = ingredientCount.filter.AllowedThingDefs;\n\t\t\t\t\tif (allowedThingDefs.Any())\n\t\t\t\t\t{\n\t\t\t\t\t\tforeach (ThingDef p in allowedThingDefs)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!BuildableDef.tmpHyperlinks.Any((Dialog_InfoCard.Hyperlink x) => x.def == p))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tBuildableDef.tmpHyperlinks.Add(new Dialog_InfoCard.Hyperlink(p));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tBuildableDef.tmpCostList.Add(recipeDef.IngredientValueGetter.BillRequirementsDescription(recipeDef, ingredientCount));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (BuildableDef.tmpCostList.Any())\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"Ingredients\".Translate(), BuildableDef.tmpCostList.ToCommaList(), \"Stat_Thing_Ingredients\".Translate(), 1102, null, BuildableDef.tmpHyperlinks);\n\t\t\t}\n\t\t}\n\t\tif (thingClass != null && typeof(Building_Bed).IsAssignableFrom(thingClass) && !statBases.StatListContains(StatDefOf.BedRestEffectiveness))\n\t\t{\n\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Building, StatDefOf.BedRestEffectiveness, StatDefOf.BedRestEffectiveness.valueIfMissing, StatRequest.ForEmpty());\n\t\t}\n\t\tif (!verbs.NullOrEmpty())\n\t\t{\n\t\t\tVerbProperties verb = verbs.First((VerbProperties x) => x.isPrimary);\n\t\t\tStatCategoryDef verbStatCategory = ((category == ThingCategory.Pawn) ? StatCategoryDefOf.PawnCombat : null);\n\t\t\tfloat num = verb.warmupTime;\n\t\t\tStringBuilder stringBuilder = new StringBuilder(\"Stat_Thing_Weapon_RangedWarmupTime_Desc\".Translate());\n\t\t\tstringBuilder.AppendLine();\n\t\t\tstringBuilder.AppendLine();\n\t\t\tstringBuilder.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate());\n\t\t\tif (num > 0f)\n\t\t\t{\n\t\t\t\tif (req.HasThing)\n\t\t\t\t{\n\t\t\t\t\tfloat statValue = req.Thing.GetStatValue(StatDefOf.RangedWeapon_WarmupMultiplier);\n\t\t\t\t\tnum *= statValue;\n\t\t\t\t\tif (!Mathf.Approximately(statValue, 1f))\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\t\t\tstringBuilder.AppendLine(\"Stat_Thing_Weapon_WarmupTime_Multiplier\".Translate() + \": x\" + statValue.ToStringPercent());\n\t\t\t\t\t\tstringBuilder.Append(StatUtility.GetOffsetsAndFactorsFor(StatDefOf.RangedWeapon_WarmupMultiplier, req.Thing));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder.AppendLine();\n\t\t\t\tstringBuilder.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate());\n\t\t\t\tyield return new StatDrawEntry(verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged, \"RangedWarmupTime\".Translate(), num.ToString(\"0.##\") + \" \" + \"LetterSecond\".Translate(), stringBuilder.ToString(), 3555);\n\t\t\t}\n\t\t\tif (verb.defaultProjectile?.projectile.damageDef != null && verb.defaultProjectile.projectile.damageDef.harmsHealth)\n\t\t\t{\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tStringBuilder stringBuilder2 = new StringBuilder();\n\t\t\t\tstringBuilder2.AppendLine(\"Stat_Thing_Damage_Desc\".Translate());\n\t\t\t\tstringBuilder2.AppendLine();\n\t\t\t\tfloat num2 = verb.defaultProjectile.projectile.GetDamageAmount(req.Thing, stringBuilder2);\n\t\t\t\tyield return new StatDrawEntry(statCat, \"Damage\".Translate(), num2.ToString(), stringBuilder2.ToString(), 5500);\n\t\t\t\tif (verb.defaultProjectile.projectile.damageDef.armorCategory != null)\n\t\t\t\t{\n\t\t\t\t\tStringBuilder stringBuilder3 = new StringBuilder();\n\t\t\t\t\tfloat armorPenetration = verb.defaultProjectile.projectile.GetArmorPenetration(req.Thing, stringBuilder3);\n\t\t\t\t\tTaggedString taggedString = \"ArmorPenetrationExplanation\".Translate();\n\t\t\t\t\tif (stringBuilder3.Length != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\ttaggedString += \"\\n\\n\" + stringBuilder3;\n\t\t\t\t\t}\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"ArmorPenetration\".Translate(), armorPenetration.ToStringPercent(), taggedString, 5400);\n\t\t\t\t}\n\t\t\t\tfloat buildingDamageFactor = verb.defaultProjectile.projectile.damageDef.buildingDamageFactor;\n\t\t\t\tfloat dmgBuildingsImpassable = verb.defaultProjectile.projectile.damageDef.buildingDamageFactorImpassable;\n\t\t\t\tfloat dmgBuildingsPassable = verb.defaultProjectile.projectile.damageDef.buildingDamageFactorPassable;\n\t\t\t\tif (buildingDamageFactor != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactor\".Translate(), buildingDamageFactor.ToStringPercent(), \"BuildingDamageFactorExplanation\".Translate(), 5410);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsImpassable != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactorImpassable\".Translate(), dmgBuildingsImpassable.ToStringPercent(), \"BuildingDamageFactorImpassableExplanation\".Translate(), 5420);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsPassable != 1f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BuildingDamageFactorPassable\".Translate(), dmgBuildingsPassable.ToStringPercent(), \"BuildingDamageFactorPassableExplanation\".Translate(), 5430);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verb.defaultProjectile == null && verb.beamDamageDef != null)\n\t\t\t{\n\t\t\t\tyield return new StatDrawEntry(verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged, \"ArmorPenetration\".Translate(), verb.beamDamageDef.defaultArmorPenetration.ToStringPercent(), \"ArmorPenetrationExplanation\".Translate(), 5400);\n\t\t\t}\n\t\t\tif (verb.Ranged)\n\t\t\t{\n\t\t\t\tfloat num3 = verb.burstShotCount;\n\t\t\t\tfloat num4 = verb.ticksBetweenBurstShots;\n\t\t\t\tfloat dmgBuildingsPassable = (verb?.defaultProjectile?.projectile?.stoppingPower).GetValueOrDefault();\n\t\t\t\tStringBuilder stringBuilder4 = new StringBuilder(\"Stat_Thing_Weapon_BurstShotFireRate_Desc\".Translate());\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + verb.burstShotCount.ToString());\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tStringBuilder ticksBetweenBurstShotsExplanation = new StringBuilder(\"Stat_Thing_Weapon_BurstShotFireRate_Desc\".Translate());\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + (60f / verb.ticksBetweenBurstShots.TicksToSeconds()).ToString(\"0.##\") + \" rpm\");\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tStringBuilder stoppingPowerExplanation = new StringBuilder(\"StoppingPowerExplanation\".Translate());\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + dmgBuildingsPassable.ToString(\"F1\"));\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tif (req.HasThing && req.Thing.TryGetComp(out CompUniqueWeapon comp))\n\t\t\t\t{\n\t\t\t\t\tbool flag = false;\n\t\t\t\t\tbool flag2 = false;\n\t\t\t\t\tbool flag3 = false;\n\t\t\t\t\tforeach (WeaponTraitDef item2 in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.burstShotCountMultiplier, 1f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum3 *= item2.burstShotCountMultiplier;\n\t\t\t\t\t\t\tstringBuilder4.AppendLine(\" \" + item2.LabelCap + \": \" + item2.burstShotCountMultiplier.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.burstShotSpeedMultiplier, 1f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag2)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag2 = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnum4 /= item2.burstShotSpeedMultiplier;\n\t\t\t\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\" \" + item2.LabelCap + \": \" + item2.burstShotSpeedMultiplier.ToStringByStyle(ToStringStyle.PercentOne, ToStringNumberSense.Factor));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!Mathf.Approximately(item2.additionalStoppingPower, 0f))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!flag3)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_WeaponTraits\".Translate() + \":\");\n\t\t\t\t\t\t\t\tflag3 = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdmgBuildingsPassable += item2.additionalStoppingPower;\n\t\t\t\t\t\t\tstoppingPowerExplanation.AppendLine(\" \" + item2.LabelCap + \": \" + item2.additionalStoppingPower.ToStringByStyle(ToStringStyle.FloatOne, ToStringNumberSense.Offset));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder4.AppendLine();\n\t\t\t\tstringBuilder4.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + Mathf.CeilToInt(num3).ToString());\n\t\t\t\tfloat dmgBuildingsImpassable = 60f / ((int)num4).TicksToSeconds();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine();\n\t\t\t\tticksBetweenBurstShotsExplanation.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + dmgBuildingsImpassable.ToString(\"0.##\") + \" rpm\");\n\t\t\t\tstoppingPowerExplanation.AppendLine();\n\t\t\t\tstoppingPowerExplanation.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + dmgBuildingsPassable.ToString(\"F1\"));\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tif (verb.showBurstShotStats && verb.burstShotCount > 1)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BurstShotCount\".Translate(), Mathf.CeilToInt(num3).ToString(), stringBuilder4.ToString(), 5391);\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"BurstShotFireRate\".Translate(), dmgBuildingsImpassable.ToString(\"0.##\") + \" rpm\", ticksBetweenBurstShotsExplanation.ToString(), 5395);\n\t\t\t\t}\n\t\t\t\tif (dmgBuildingsPassable > 0f)\n\t\t\t\t{\n\t\t\t\t\tyield return new StatDrawEntry(statCat, \"StoppingPower\".Translate(), dmgBuildingsPassable.ToString(\"F1\"), stoppingPowerExplanation.ToString(), 5402);\n\t\t\t\t}\n\t\t\t\tfloat num5 = verb.range;\n\t\t\t\tStringBuilder stringBuilder5 = new StringBuilder(\"Stat_Thing_Weapon_Range_Desc\".Translate());\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + num5.ToString(\"F0\"));\n\t\t\t\tif (req.HasThing)\n\t\t\t\t{\n\t\t\t\t\tfloat statValue2 = req.Thing.GetStatValue(StatDefOf.RangedWeapon_RangeMultiplier);\n\t\t\t\t\tnum5 *= statValue2;\n\t\t\t\t\tif (!Mathf.Approximately(statValue2, 1f))\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\t\t\tstringBuilder5.AppendLine(\"Stat_Thing_Weapon_Range_Multiplier\".Translate() + \": x\" + statValue2.ToStringPercent());\n\t\t\t\t\t\tstringBuilder5.Append(StatUtility.GetOffsetsAndFactorsFor(StatDefOf.RangedWeapon_RangeMultiplier, req.Thing));\n\t\t\t\t\t}\n\t\t\t\t\tMap obj = req.Thing.Map ?? req.Thing.MapHeld;\n\t\t\t\t\tif (obj != null && obj.weatherManager.CurWeatherMaxRangeCap >= 0f)\n\t\t\t\t\t{\n\t\t\t\t\t\tWeatherManager weatherManager = (req.Thing.Map ?? req.Thing.MapHeld).weatherManager;\n\t\t\t\t\t\tbool num6 = num5 > weatherManager.CurWeatherMaxRangeCap;\n\t\t\t\t\t\tfloat num7 = num5;\n\t\t\t\t\t\tnum5 = Mathf.Min(num5, weatherManager.CurWeatherMaxRangeCap);\n\t\t\t\t\t\tif (num6)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\t\t\t\tstringBuilder5.AppendLine(\" \" + \"Stat_Thing_Weapon_Range_Clamped\".Translate(num5.ToString(\"F0\").Named(\"CAP\"), num7.ToString(\"F0\").Named(\"ORIGINAL\")));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstringBuilder5.AppendLine();\n\t\t\t\tstringBuilder5.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + num5.ToString(\"F0\"));\n\t\t\t\tyield return new StatDrawEntry(statCat, \"Range\".Translate(), num5.ToString(\"F0\"), stringBuilder5.ToString(), 5390);\n\t\t\t}\n\t\t\tif (verb.ForcedMissRadius > 0f)\n\t\t\t{\n\t\t\t\tStatCategoryDef statCat = verbStatCategory ?? StatCategoryDefOf.Weapon_Ranged;\n\t\t\t\tyield return new StatDrawEntry(statCat, \"MissRadius\".Translate(), verb.ForcedMissRadius.ToString(\"0.#\"), \"Stat_Thing_Weapon_MissRadius_Desc\".Translate(), 3557);\n\t\t\t\tyield return new StatDrawEntry(statCat, \"DirectHitChance\".Translate(), (1f / (float)GenRadial.NumCellsInRadius(verb.ForcedMissRadius)).ToStringPercent(), \"Stat_Thing_Weapon_DirectHitChance_Desc\".Translate(), 3560);\n\t\t\t}\n\t\t}\n\t\tif (plant != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item3 in plant.SpecialDisplayStats())\n\t\t\t{\n\t\t\t\tyield return item3;\n\t\t\t}\n\t\t}\n\t\tif (ingestible != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item4 in ingestible.SpecialDisplayStats())\n\t\t\t{\n\t\t\t\tyield return item4;\n\t\t\t}\n\t\t}\n\t\tif (race != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item5 in race.SpecialDisplayStats(this, req))\n\t\t\t{\n\t\t\t\tyield return item5;\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tforeach (StatDrawEntry item6 in building.SpecialDisplayStats(this, req))\n\t\t\t{\n\t\t\t\tyield return item6;\n\t\t\t}\n\t\t}\n\t\tif (isTechHediff)\n\t\t{\n\t\t\tIEnumerable enumerable2 = DefDatabase.AllDefs.Where((RecipeDef x) => x.addsHediff != null && x.IsIngredient(this));\n\t\t\tforeach (StatDrawEntry medicalStatsFromRecipeDef in MedicalRecipesUtility.GetMedicalStatsFromRecipeDefs(enumerable2))\n\t\t\t{\n\t\t\t\tyield return medicalStatsFromRecipeDef;\n\t\t\t}\n\t\t}\n\t\tfor (int i = 0; i < comps.Count; i++)\n\t\t{\n\t\t\tforeach (StatDrawEntry item7 in comps[i].SpecialDisplayStats(req))\n\t\t\t{\n\t\t\t\tyield return item7;\n\t\t\t}\n\t\t}\n\t\tif (building != null)\n\t\t{\n\t\t\tif (building.mineableThing != null)\n\t\t\t{\n\t\t\t\tDialog_InfoCard.Hyperlink[] hyperlinks = new Dialog_InfoCard.Hyperlink[1]\n\t\t\t\t{\n\t\t\t\t\tnew Dialog_InfoCard.Hyperlink(building.mineableThing)\n\t\t\t\t};\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.BasicsImportant, \"Stat_MineableThing_Name\".Translate(), building.mineableThing.LabelCap, \"Stat_MineableThing_Desc\".Translate(), 2200, null, hyperlinks);\n\t\t\t\tStringBuilder stringBuilder6 = new StringBuilder();\n\t\t\t\tstringBuilder6.AppendLine(\"Stat_MiningYield_Desc\".Translate());\n\t\t\t\tstringBuilder6.AppendLine();\n\t\t\t\tstringBuilder6.AppendLine(\"StatsReport_DifficultyMultiplier\".Translate(Find.Storyteller.difficultyDef.label) + \": \" + Find.Storyteller.difficulty.mineYieldFactor.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Basics, \"Stat_MiningYield_Name\".Translate(), Mathf.CeilToInt(building.EffectiveMineableYield).ToString(\"F0\"), stringBuilder6.ToString(), 2200, null, hyperlinks);\n\t\t\t}\n\t\t\tif (building.IsTurret)\n\t\t\t{\n\t\t\t\tThingDef turret = building.turretGunDef;\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.BasicsImportant, \"Stat_Weapon_Name\".Translate(), turret.LabelCap, \"Stat_Weapon_Desc\".Translate(), 5389, null, new Dialog_InfoCard.Hyperlink[1]\n\t\t\t\t{\n\t\t\t\t\tnew Dialog_InfoCard.Hyperlink(turret)\n\t\t\t\t});\n\t\t\t\tStatRequest request = StatRequest.For(turret, null);\n\t\t\t\tforeach (StatDrawEntry item8 in turret.SpecialDisplayStats(request))\n\t\t\t\t{\n\t\t\t\t\tif (item8.category == StatCategoryDefOf.Weapon_Ranged)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return item8;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (int i = 0; i < turret.statBases.Count; i++)\n\t\t\t\t{\n\t\t\t\t\tStatModifier statModifier = turret.statBases[i];\n\t\t\t\t\tif (statModifier.stat.category == StatCategoryDefOf.Weapon_Ranged)\n\t\t\t\t\t{\n\t\t\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Weapon_Ranged, statModifier.stat, statModifier.value, request);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ModsConfig.OdysseyActive && Fillage == FillCategory.Full)\n\t\t\t{\n\t\t\t\tbool b = building.isAirtight || (building.isStuffableAirtight && req.StuffDef.stuffProps.isAirtight);\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.Building, \"Stat_Airtight\".Translate(), b.ToStringYesNo(), \"Stat_Airtight_Desc\".Translate(), 6100);\n\t\t\t}\n\t\t}\n\t\tif (IsMeat)\n\t\t{\n\t\t\tList list = new List();\n\t\t\tbool flag4 = false;\n\t\t\tforeach (ThingDef allDef in DefDatabase.AllDefs)\n\t\t\t{\n\t\t\t\tif (allDef.race != null && allDef.race.meatDef == this && !allDef.IsCorpse)\n\t\t\t\t{\n\t\t\t\t\tif (!Find.HiddenItemsManager.Hidden(allDef))\n\t\t\t\t\t{\n\t\t\t\t\t\tflag4 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlist.Add(allDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield return new StatDrawEntry(valueString: (!flag4) ? string.Format(\"({0})\", \"NotYetDiscovered\".Translate()) : string.Join(\", \", (from x in list\n\t\t\t\twhere !Find.HiddenItemsManager.Hidden(x)\n\t\t\t\tselect x into p\n\t\t\t\tselect p.label).ToArray()).CapitalizeFirst(), category: StatCategoryDefOf.BasicsPawn, label: \"Stat_SourceSpecies_Name\".Translate(), reportText: \"Stat_SourceSpecies_Desc\".Translate(), displayPriorityWithinCategory: 1200, overrideReportTitle: null, hyperlinks: Dialog_InfoCard.DefsToHyperlinks(list));\n\t\t}\n\t\tif (IsLeather)\n\t\t{\n\t\t\tList list2 = new List();\n\t\t\tbool flag5 = false;\n\t\t\tforeach (ThingDef allDef2 in DefDatabase.AllDefs)\n\t\t\t{\n\t\t\t\tif (allDef2.race != null && allDef2.race.leatherDef == this && !allDef2.IsCorpse)\n\t\t\t\t{\n\t\t\t\t\tif (!Find.HiddenItemsManager.Hidden(allDef2))\n\t\t\t\t\t{\n\t\t\t\t\t\tflag5 = true;\n\t\t\t\t\t}\n\t\t\t\t\tlist2.Add(allDef2);\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield return new StatDrawEntry(valueString: (!flag5) ? string.Format(\"({0})\", \"NotYetDiscovered\".Translate()) : string.Join(\", \", (from x in list2\n\t\t\t\twhere !Find.HiddenItemsManager.Hidden(x)\n\t\t\t\tselect x into p\n\t\t\t\tselect p.label).ToArray()).CapitalizeFirst(), category: StatCategoryDefOf.BasicsPawn, label: \"Stat_SourceSpecies_Name\".Translate(), reportText: \"Stat_SourceSpecies_Desc\".Translate(), displayPriorityWithinCategory: 1200, overrideReportTitle: null, hyperlinks: Dialog_InfoCard.DefsToHyperlinks(list2));\n\t\t}\n\t\tif (!equippedStatOffsets.NullOrEmpty())\n\t\t{\n\t\t\tfor (int i = 0; i < equippedStatOffsets.Count; i++)\n\t\t\t{\n\t\t\t\tStatDef stat = equippedStatOffsets[i].stat;\n\t\t\t\tfloat num8 = equippedStatOffsets[i].value;\n\t\t\t\tStringBuilder stringBuilder7 = new StringBuilder(stat.description);\n\t\t\t\tif (req.HasThing && stat.Worker != null)\n\t\t\t\t{\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine(\"StatsReport_BaseValue\".Translate() + \": \" + stat.ValueToString(num8, ToStringNumberSense.Offset, stat.finalizeEquippedStatOffset));\n\t\t\t\t\tnum8 = StatWorker.StatOffsetFromGear(req.Thing, stat);\n\t\t\t\t\tif (!stat.parts.NullOrEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\t\tfor (int k = 0; k < stat.parts.Count; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstring text = stat.parts[k].ExplanationPart(req);\n\t\t\t\t\t\t\tif (!text.NullOrEmpty())\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstringBuilder7.AppendLine(text);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstringBuilder7.AppendLine();\n\t\t\t\t\tstringBuilder7.AppendLine(\"StatsReport_FinalValue\".Translate() + \": \" + stat.ValueToString(num8, ToStringNumberSense.Offset, !stat.formatString.NullOrEmpty()));\n\t\t\t\t}\n\t\t\t\tyield return new StatDrawEntry(StatCategoryDefOf.EquippedStatOffsets, equippedStatOffsets[i].stat, num8, StatRequest.ForEmpty(), ToStringNumberSense.Offset, null, forceUnfinalizedMode: true).SetReportText(stringBuilder7.ToString());\n\t\t\t}\n\t\t}\n\t\tif (!IsDrug)\n\t\t{\n\t\t\tyield break;\n\t\t}\n\t\tforeach (StatDrawEntry item9 in DrugStatsUtility.SpecialDisplayStats(this))\n\t\t{\n\t\t\tyield return item9;\n\t\t}\n\t}\n}\n\n", "timestamp": "2025-08-22 16:02:42,858" + }, + "Verb": { + "keywords": [ + "Verb" + ], + "question": "RimWorld Verb class", + "embedding": [ + 0.012549128383398056, + 0.016916820779442787, + 0.039827682077884674, + -0.02038256824016571, + -0.001290777581743896, + -0.029686110094189644, + 0.012442599050700665, + 0.04221393167972565, + -0.019828617572784424, + 0.13590273261070251, + 0.002286824630573392, + -0.06681505590677261, + -0.029203178361058235, + 0.007662993390113115, + 0.07187163084745407, + 0.024743160232901573, + 0.03704372048377991, + -0.07857586443424225, + 0.0009427825571037829, + 0.012641453184187412, + -0.019530335441231728, + 0.045026302337646484, + 0.0015970488311722875, + 0.046048980206251144, + -0.03443020582199097, + -0.0618152879178524, + 0.016604335978627205, + -0.025538576766848564, + 0.005994037259370089, + 2.4773564291535877e-05, + -0.060849424451589584, + 0.04832160100340843, + 0.0074996487237513065, + -0.023819906637072563, + -0.021731937304139137, + 0.036731235682964325, + -0.03573696315288544, + 0.006693578790873289, + -0.035708554089069366, + -0.023422198370099068, + -0.014601589180529118, + 0.010944089852273464, + -0.004520385060459375, + -0.047128476202487946, + -0.03193032369017601, + 0.03687327355146408, + 0.01205909438431263, + -0.06715594232082367, + -0.02813788689672947, + 0.02934521622955799, + -0.010603196918964386, + -0.008380289189517498, + -0.06130394712090492, + -0.017058860510587692, + -0.023152325302362442, + 0.025879470631480217, + -0.004435161594301462, + 0.05613373592495918, + -0.04545241594314575, + -0.0027413489297032356, + 0.02025473304092884, + -0.01712987944483757, + -0.009374560788273811, + -0.030169041827321053, + -0.021490471437573433, + -0.012911327183246613, + 0.024643732234835625, + 0.06380382925271988, + -0.0018944424809888005, + -0.07289431244134903, + -0.0180815402418375, + 0.03664601221680641, + 0.027072595432400703, + 0.008302167989313602, + -0.012904224917292595, + 0.03650397062301636, + -0.03156102076172829, + 0.022910859435796738, + -0.05780979245901108, + 0.04354909807443619, + 0.010837560519576073, + -0.043463874608278275, + 0.006473418325185776, + -0.004420957528054714, + 0.022356906905770302, + 0.056957561522722244, + 0.03397568315267563, + -0.019445111975073814, + 0.009466886520385742, + 0.10488145053386688, + -0.031191721558570862, + -0.0038101908285170794, + 0.03576537221670151, + -0.041106030344963074, + 0.0009223644738085568, + 0.0022530904971063137, + -0.05863361805677414, + -0.0010990252485498786, + 0.0008038508240133524, + -0.023166527971625328, + 0.04315138980746269, + -0.09329108893871307, + -0.05834953859448433, + 0.059258587658405304, + -0.014353021048009396, + 0.014587384648621082, + -0.02749871276319027, + -0.011533550918102264, + -0.0008256005239672959, + 0.0008424676489084959, + 0.03582218661904335, + -0.03190191462635994, + -0.035935815423727036, + 0.047355737537145615, + 0.0354812927544117, + 0.02514086849987507, + -0.013657030649483204, + 0.019516130909323692, + -0.00015357945812866092, + -0.014999297447502613, + 0.04070832207798958, + 0.0036131120286881924, + -0.04150373861193657, + -0.036702826619148254, + 0.019516130909323692, + -0.048122745007276535, + 0.013323239982128143, + 0.026206159964203835, + 0.03133375942707062, + 0.011668487451970577, + -0.00816723145544529, + 0.00759197399020195, + 0.034685876220464706, + -0.0006884442991577089, + -0.019544539973139763, + 0.03923111781477928, + -0.035964224487543106, + 0.003160363296046853, + -0.05144645273685455, + -0.017939500510692596, + -0.018394025042653084, + 0.013884292915463448, + 0.024601120501756668, + 0.019800208508968353, + 0.022981878370046616, + -0.010375934652984142, + -0.06363338232040405, + 0.033890459686517715, + 0.019090015441179276, + 0.01840822957456112, + -0.0374414287507534, + -0.02038256824016571, + -0.012066196650266647, + 0.0507078543305397, + -0.002214029897004366, + -0.028350945562124252, + 0.015098724514245987, + 0.008465512655675411, + 0.03244166076183319, + -0.008018090389668941, + -0.022016014903783798, + 0.037725504487752914, + -0.01531178317964077, + -0.01904740370810032, + 0.005994037259370089, + -0.047071658074855804, + -0.010042143054306507, + 0.03886181488633156, + -0.025368129834532738, + -0.05897451192140579, + 0.0066509670577943325, + 0.02552437223494053, + -0.006974105257540941, + -0.01649070531129837, + 0.03269733116030693, + -0.008330576121807098, + -0.03374841809272766, + 0.03403249755501747, + 0.08760953694581985, + 0.01057478878647089, + 0.012016482651233673, + 0.004499079193919897, + 0.03326548635959625, + 0.03579377755522728, + 0.005397474393248558, + -0.03934474661946297, + 0.013642827048897743, + 0.023720480501651764, + 0.006672272924333811, + 0.034344982355833054, + -0.008046498522162437, + 0.08613233268260956, + -0.030027002096176147, + 0.014828851446509361, + -0.023677868768572807, + -0.02271200530230999, + -0.04352068901062012, + 0.047867078334093094, + -0.023677868768572807, + -0.015468025580048561, + -0.039060670882463455, + -0.029629293829202652, + -0.04729892313480377, + -0.017499180510640144, + 0.014942482113838196, + 0.014196778647601604, + -0.041674185544252396, + -0.032043952494859695, + 0.03482791408896446, + -0.005156008526682854, + 0.03707212582230568, + -0.0037640281952917576, + -0.03894703835248947, + -0.015070317313075066, + 0.03479950502514839, + 0.017499180510640144, + 0.018734918907284737, + 0.006146728992462158, + 0.015354394912719727, + -0.0023986801970750093, + -0.05758253112435341, + 0.012108808383345604, + -0.00415463512763381, + 0.04744096100330353, + 0.02580844983458519, + 0.01712987944483757, + 0.003478175261989236, + -0.00925382785499096, + -0.01025520171970129, + 0.02391933463513851, + -0.006189340725541115, + 0.014139962382614613, + -0.05610532686114311, + -0.026745906099677086, + 0.047923892736434937, + -0.03996971994638443, + -0.04434451460838318, + -0.012627249583601952, + -0.025155071169137955, + 0.04724210500717163, + -0.02207282930612564, + 0.03758346661925316, + -0.007670095190405846, + 0.02988496422767639, + 0.003057385329157114, + -0.007151653524488211, + -0.014530569314956665, + 0.0024732507299631834, + 0.029771333560347557, + -0.026262974366545677, + 0.005855549592524767, + -0.03735620528459549, + -0.022129645571112633, + -0.002796388929709792, + -0.01007765345275402, + 0.03965723514556885, + -0.024956217035651207, + -0.006498275324702263, + -0.020524606108665466, + 0.00700251292437315, + -0.042696863412857056, + 0.011846035718917847, + 0.014615792781114578, + 0.022527353838086128, + -0.030936051160097122, + 0.021220596507191658, + -0.006427255924791098, + -0.022087033838033676, + -0.009367459453642368, + 0.02734247036278248, + -0.014239390380680561, + 0.06522421538829803, + 0.04042424261569977, + -0.04121965914964676, + -0.026007303968071938, + -0.0199990626424551, + 0.005535962525755167, + -0.02373468317091465, + -0.013053365983068943, + 0.010276507586240768, + 0.006398848257958889, + 0.01738554984331131, + -0.018891161307692528, + -0.022229071706533432, + 0.016675354912877083, + 0.012641453184187412, + 0.02734247036278248, + 0.012627249583601952, + 0.016888413578271866, + 0.026518644765019417, + -0.005404576659202576, + -0.011512245051562786, + 0.01585153117775917, + 0.03820843622088432, + -0.024515897035598755, + 0.0015659778146073222, + -0.004523935727775097, + 0.05891769379377365, + -0.04437292367219925, + 0.01311018131673336, + 0.045821718871593475, + -0.002782185096293688, + -0.024544304236769676, + 0.007662993390113115, + 0.03326548635959625, + -0.014161268249154091, + -0.004570098593831062, + -0.055622395128011703, + 0.006675823591649532, + -0.06198573485016823, + -0.016220830380916595, + -0.026589663699269295, + 0.05445767566561699, + -0.020169509574770927, + -0.03553810715675354, + 0.02714361436665058, + -0.04246960207819939, + -0.009324847720563412, + 0.002819470129907131, + 0.052298687398433685, + -0.06119031459093094, + -0.018550267443060875, + -0.047355737537145615, + 0.0032011994626373053, + 0.016348665580153465, + -0.00980777945369482, + 0.021902384236454964, + -0.03863455355167389, + 0.007020267657935619, + 0.022513151168823242, + -0.029913371428847313, + 0.0020844193641096354, + 0.03210077062249184, + 0.060565344989299774, + 0.01651911251246929, + 0.022527353838086128, + 0.011185555718839169, + -0.0004367693327367306, + 0.016448093578219414, + -0.027981644496321678, + -0.0365607887506485, + -0.05519627779722214, + -0.047128476202487946, + -0.04178781434893608, + 0.07130347937345505, + -0.0137351518496871, + 0.03008381836116314, + 0.017683830112218857, + 0.04067991301417351, + 0.001658302964642644, + 0.0023454157635569572, + 0.018962180241942406, + -0.009516599588096142, + -0.003746273461729288, + -0.00037817831616848707, + 0.020297344774007797, + 0.015837326645851135, + 0.03110649809241295, + -0.048179563134908676, + 0.008728284388780594, + 0.0031745671294629574, + 0.015254967845976353, + -0.0016236810479313135, + 0.04229915514588356, + 0.007691401056945324, + -0.004935848526656628, + -0.04261163994669914, + 0.04229915514588356, + -0.02816629409790039, + 0.018763326108455658, + 0.010915681719779968, + -0.06414472311735153, + 0.021490471437573433, + 0.02414659596979618, + -0.03471428155899048, + 0.035964224487543106, + 0.0068107605911791325, + -0.01958715170621872, + -0.01401922944933176, + 0.02140524797141552, + 0.09812040627002716, + -0.01843663677573204, + 0.02178875170648098, + -0.020041674375534058, + 0.015368598513305187, + 0.024672139436006546, + 0.08016669750213623, + 0.002002747030928731, + 0.05235550180077553, + -0.028748653829097748, + 0.05246913433074951, + -0.013635724782943726, + -0.014253593981266022, + -0.006693578790873289, + 0.029430439695715904, + 0.02156149037182331, + -0.020553015172481537, + 0.023677868768572807, + 0.0014088473981246352, + -0.014203879982233047, + -0.023720480501651764, + 0.007840542122721672, + -0.07522375136613846, + -0.022285887971520424, + -0.007691401056945324, + -0.0071694087237119675, + 0.0045807515271008015, + -0.02391933463513851, + -0.020979130640625954, + 0.009417172521352768, + -0.06817862391471863, + 0.029742924496531487, + 0.03110649809241295, + -0.003096445929259062, + -0.020425179973244667, + -0.012314763851463795, + 0.032782554626464844, + -0.010070551186800003, + 0.03210077062249184, + 0.006462765391916037, + -0.014139962382614613, + 0.06596282124519348, + -0.0071694087237119675, + -0.00925382785499096, + -0.02721463516354561, + 0.004009045194834471, + 0.00993561465293169, + 0.024799974635243416, + 0.03664601221680641, + 0.03874818608164787, + -0.040339019149541855, + -0.04170259088277817, + -0.03039630316197872, + 0.0572984516620636, + 0.030424712225794792, + -0.03496995195746422, + -0.014644200913608074, + 0.031191721558570862, + -0.01613560877740383, + 0.0011585039319470525, + -0.02829412929713726, + -0.0273708775639534, + 0.004477773327380419, + 0.01943090744316578, + -0.049202241003513336, + -0.008373187854886055, + 0.024459082633256912, + -0.025226091966032982, + 0.013323239982128143, + -0.008259556256234646, + -0.008380289189517498, + 0.004513282794505358, + 0.03769709914922714, + 0.017840074375271797, + -0.017442364245653152, + 0.027967439964413643, + 0.0044422633945941925, + 0.0013431544648483396, + -0.023138120770454407, + 0.000963200640399009, + 0.03329389542341232, + -0.018649695441126823, + -0.03403249755501747, + 0.04181622341275215, + 0.019757596775889397, + 0.008060702122747898, + -0.01030491478741169, + -0.006846270523965359, + 0.019090015441179276, + -0.05786660686135292, + -0.005106294993311167, + 0.05545194819569588, + -0.04096399247646332, + -0.011249473318457603, + 0.017328733578324318, + -0.06619007885456085, + -0.004783156793564558, + 0.066246896982193, + 0.02660386823117733, + 0.02350742183625698, + -0.017328733578324318, + 0.03843570128083229, + -0.022016014903783798, + -0.01789688877761364, + -0.09783633053302765, + -0.08124619722366333, + -0.03582218661904335, + 0.02785380929708481, + 0.039287932217121124, + -0.04593534767627716, + 0.005425882060080767, + -0.008351881988346577, + -0.022285887971520424, + 0.03352115675806999, + -0.0053193531930446625, + 0.017598608508706093, + 0.012321866117417812, + 0.022030217573046684, + -0.00882060918956995, + -0.03604944795370102, + -0.027981644496321678, + 0.04261163994669914, + -0.04923065006732941, + -0.010780745185911655, + -0.014502162113785744, + -0.008351881988346577, + -0.005596328992396593, + 0.00016467623936478049, + -0.06687186658382416, + -0.0027715321630239487, + 0.008231149055063725, + -0.013301934115588665, + 0.048747718334198, + -0.021547285839915276, + -0.02896171249449253, + 0.0035332152619957924, + -0.012584637850522995, + -0.022087033838033676, + 0.027868013828992844, + 0.03556651622056961, + 0.019018996506929398, + -0.01207329798489809, + 0.04306616634130478, + 0.00848681852221489, + -0.008089110255241394, + 0.005571471992880106, + 0.028308333829045296, + -0.0037817831616848707, + 0.02389092743396759, + -0.02245633490383625, + -0.061417579650878906, + -0.006647415924817324, + 0.056417811661958694, + 0.00835898332297802, + 0.042412787675857544, + 0.0014399184146896005, + 0.008792201988399029, + 0.017627015709877014, + -0.002150112297385931, + 0.09834766387939453, + 0.028975915163755417, + 0.03198713809251785, + 0.01846504397690296, + 0.02012689784169197, + 0.05633258819580078, + 0.06346293538808823, + 0.03522562235593796, + -0.026390809565782547, + 0.018337208777666092, + -0.0632924884557724, + 0.017967907711863518, + 0.04158896207809448, + -0.016916820779442787, + -0.03707212582230568, + -0.001284563448280096, + 0.008344779722392559, + -0.03113490529358387, + 0.051474861800670624, + -0.008905832655727863, + 0.009417172521352768, + 0.009495293721556664, + 0.01532598678022623, + 0.024956217035651207, + -0.020837092772126198, + -0.01825198531150818, + -0.0038243946619331837, + -0.0034692976623773575, + 0.0071552046574652195, + -0.0011727078817784786, + -0.0008420237572863698, + 0.029970187693834305, + -0.004864829126745462, + -0.04289571940898895, + -0.035964224487543106, + 0.03889022395014763, + -0.015411210246384144, + 0.025084052234888077, + 0.040395837277173996, + 0.006246156524866819, + -5.6815522839315236e-05, + -0.011377308517694473, + -2.5328403353341855e-05, + -0.004101370461285114, + 0.015496433712542057, + -0.013479482382535934, + 0.02232849970459938, + -0.006895984057337046, + -0.013117283582687378, + 0.07590553909540176, + 0.03218599408864975, + 0.027427691966295242, + 0.006171585991978645, + -0.053577035665512085, + -0.017016248777508736, + -0.043691135942935944, + 0.03661760315299034, + 0.007961275056004524, + 0.004236307460814714, + 0.0669286847114563, + 0.03340752795338631, + -0.0023294363636523485, + -0.07278068363666534, + -0.03318026289343834, + -0.002489230129867792, + 0.052497539669275284, + -0.011441225185990334, + 0.0072794887237250805, + 0.034373391419649124, + 0.0034000538289546967, + 0.0013396034482866526, + -0.017172491177916527, + 0.07658731937408447, + 0.039060670882463455, + -0.0006959901074878871, + 0.039799273014068604, + -0.05610532686114311, + -0.016391277313232422, + 0.028052663430571556, + 0.0028301230631768703, + -0.046844396740198135, + -0.06198573485016823, + -0.007201367523521185, + 0.012911327183246613, + -0.03766869008541107, + -0.046560321003198624, + -0.012897123582661152, + -0.025467557832598686, + -0.00048115645768120885, + -0.07249660789966583, + -0.043435465544462204, + 0.014871462248265743, + 0.017428161576390266, + -0.02153308317065239, + 0.03195872902870178, + 0.057752978056669235, + -0.012009380385279655, + -0.002327660797163844, + 0.019146829843521118, + -0.06920130550861359, + 0.01751338504254818, + -0.0027342468965798616, + 0.02826572209596634, + -0.004392549861222506, + 0.0017310979310423136, + -0.0030786909628659487, + -0.04468540847301483, + -0.005763224326074123, + -0.050736259669065475, + 0.002107500797137618, + -0.005908814258873463, + -0.016888413578271866, + 0.0029384277295321226, + 0.025126663967967033, + 0.003043181262910366, + -0.025155071169137955, + 0.021320024505257607, + -0.0010928109986707568, + 0.005500452592968941, + -0.007187163457274437, + -0.023649461567401886, + 0.003432012628763914, + -0.06817862391471863, + -0.037782322615385056, + 0.029458846896886826, + 0.0071552046574652195, + 0.05394633859395981, + 0.013443972915410995, + 0.003220729762688279, + -0.0035847043618559837, + 0.005638940259814262, + -0.05604851245880127, + -0.047895483672618866, + 0.012691167183220387, + -0.013294831849634647, + 0.02535392716526985, + 0.035140398889780045, + -0.010134468786418438, + -0.04391839727759361, + 0.013408462516963482, + -0.003735620528459549, + -0.024189207702875137, + 0.01569528691470623, + -0.042725272476673126, + -0.0329245962202549, + -0.003739171428605914, + 0.016391277313232422, + -0.006274564191699028, + 0.010106060653924942, + -0.044486552476882935, + 0.007329202257096767, + 0.0365607887506485, + -0.08130300790071487, + 0.0169026181101799, + 0.04360591247677803, + -0.014388530515134335, + -0.015567452646791935, + -0.05869043245911598, + -0.027285654097795486, + 0.04437292367219925, + 0.02634819783270359, + -0.015155539847910404, + -0.03170306235551834, + -0.08783679455518723, + 0.001508274581283331, + 0.0035900308284908533, + 0.0005526196910068393, + 0.006036648992449045, + -0.03795276954770088, + 0.006370440125465393, + -0.04136170074343681, + -0.022356906905770302, + 0.04121965914964676, + 0.009516599588096142, + -0.010823356918990612, + -0.008706978522241116, + 0.011142943985760212, + 0.008550736121833324, + 0.002150112297385931, + -0.05065103620290756, + 0.007854745723307133, + -0.04099239781498909, + 0.006544437725096941, + -0.03792436048388481, + -0.015397006645798683, + -0.053065694868564606, + 0.014395632781088352, + -0.010148672387003899, + 0.01071682758629322, + -0.030424712225794792, + 0.03394727408885956, + -0.043435465544462204, + -0.04752618446946144, + 0.011270779184997082, + -0.03158942982554436, + 0.018323006108403206, + -0.00024768017465248704, + -0.0061822389252483845, + -0.007854745723307133, + 0.03525403141975403, + -0.007183612324297428, + -0.019516130909323692, + -0.00853653158992529, + -0.01997065544128418, + -0.07141710817813873, + 0.08942762762308121, + 0.007847643457353115, + -0.002357844030484557, + -0.006615457125008106, + 0.05295206606388092, + 0.016419686377048492, + -0.010084754787385464, + 0.013720948249101639, + 0.03960041701793671, + -0.030481526628136635, + -0.04420247673988342, + 0.05502583086490631, + -0.003835047595202923, + 0.014218084514141083, + 0.017627015709877014, + 0.018351413309574127, + -0.06312204152345657, + 0.007148102857172489, + 0.027285654097795486, + 0.007471241056919098, + -0.010645808652043343, + 0.03377682715654373, + -0.007670095190405846, + -0.018422432243824005, + -0.052043016999959946, + 0.0011425246484577656, + -0.022697800770401955, + 0.004584302194416523, + -0.03718575835227966, + 0.0485488623380661, + 0.04158896207809448, + -0.014345918782055378, + -0.0021110516972839832, + -0.008103313855826855, + -0.024444878101348877, + -0.006317175924777985, + 0.014956685714423656, + -0.01840822957456112, + 0.023592645302414894, + -0.00686757592484355, + 0.01815255917608738, + 0.032299622893333435, + -0.04479903727769852, + 0.022882450371980667, + -0.011100332252681255, + -0.019786005839705467, + 0.002501658396795392, + 0.031191721558570862, + 0.040566280484199524, + 0.006619008257985115, + 0.015084520913660526, + -0.008877425454556942, + 0.017271919175982475, + 0.022953471168875694, + 0.029458846896886826, + 0.0350835844874382, + -0.005986935459077358, + -0.07721229642629623, + -0.07959854602813721, + -0.022513151168823242, + 0.013266423717141151, + -0.0058839572593569756, + -0.004942950326949358, + 0.012556229718029499, + -0.015752103179693222, + -0.0342029444873333, + 0.00535131199285388, + 0.004065860528498888, + 0.014871462248265743, + 0.0012321865651756525, + 0.032526884227991104, + -0.033350709825754166, + -0.0290895476937294, + -0.008941343054175377, + 0.011561958119273186, + 0.03863455355167389, + -0.01728612184524536, + 0.04335024207830429, + 0.010354628786444664, + -0.0018713612807914615, + 0.011412817984819412, + -0.017783258110284805, + -0.005862651392817497, + -0.040140166878700256, + -0.009736759588122368, + 0.01651911251246929, + 0.032328031957149506, + -0.003980637528002262, + -0.0021447858307510614, + 0.030225858092308044, + 0.0021998260635882616, + -0.009701250120997429, + 0.016277646645903587, + 0.008841915056109428, + -0.012421293184161186, + 0.02504144050180912, + -0.0399981252849102, + 0.015539045445621014, + 0.02957247942686081, + -0.007975478656589985, + 0.035396069288253784, + 0.0026135139632970095, + -0.022981878370046616, + -0.010212589986622334, + -0.029657702893018723, + -0.026262974366545677, + -0.014701016247272491, + 0.02424602396786213, + -0.024544304236769676, + -0.011618774384260178, + 0.04417406767606735, + 0.003739171428605914, + 0.04357750341296196, + 0.04667394980788231, + -0.010063448920845985, + 0.0485488623380661, + -0.02578004263341427, + -0.04028220474720001, + -0.022498946636915207, + 0.033890459686517715, + -0.035651739686727524, + 0.012499414384365082, + 0.013337443582713604, + 0.00909048318862915, + 0.01643388904631138, + -0.014558977447450161, + 0.035708554089069366, + 0.11169931292533875, + 0.025510169565677643, + 0.05445767566561699, + 0.035197217017412186, + -0.0014905197313055396, + -0.014828851446509361, + 0.02345060557126999, + -0.022626781836152077, + 0.0436343215405941, + 0.03496995195746422, + -0.002812368329614401, + -0.002892265096306801, + -0.02194499410688877, + -0.015240763314068317, + -0.0029153465293347836, + -0.005880406592041254, + -0.000893068965524435, + -0.04070832207798958, + -0.0009951593820005655, + 0.06698550283908844, + 0.013131487183272839, + 0.037270981818437576, + 0.07971217483282089, + 0.03996971994638443, + 0.03471428155899048, + -0.050736259669065475, + 0.019501928240060806, + 0.034629061818122864, + 0.017399752512574196, + 0.01409735158085823, + -0.03110649809241295, + 0.049486320465803146, + 0.006409501191228628, + -0.0463898740708828, + -0.009147298522293568, + 0.022825635969638824, + -0.018095742911100388, + -0.05471334606409073, + 0.00032646729960106313, + -0.007854745723307133, + 0.011696895584464073, + 0.020055878907442093, + -0.03693008795380592, + -0.03917430341243744, + 0.007662993390113115, + -0.02176034450531006, + 0.11084707826375961, + 0.044770631939172745, + 0.0018766876310110092, + -0.004758299794048071, + -0.04252641648054123, + 0.01735714077949524, + -0.02670329436659813, + -0.005315802060067654, + -0.00786184798926115, + -0.02386251837015152, + 0.037526652216911316, + -0.029203178361058235, + 1.5299687220249325e-05, + 0.031191721558570862, + 0.03158942982554436, + 0.031248535960912704, + 0.006001139525324106, + -0.02281143143773079, + -0.0059336707927286625, + -0.020695053040981293, + -0.0211779847741127, + -0.04312298074364662, + -0.015539045445621014, + -0.010787847451865673, + -0.04286731034517288, + 0.0181809663772583, + 0.016575928777456284, + 0.05323614180088043, + -0.012534924782812595, + 0.02519768290221691, + -0.006249707192182541, + 0.0340040884912014, + 0.019828617572784424, + -0.016405481845140457, + 0.018479248508810997, + -0.017811665311455727, + -0.006207095459103584, + 0.0019406051142141223, + -0.0425548255443573, + 0.014118657447397709, + -0.04124806821346283, + 0.005024622660130262, + -0.028109479695558548, + 0.05840635672211647, + -0.01387719064950943, + -0.043463874608278275, + -0.028095275163650513, + -0.011952565051615238, + -0.007101939991116524, + -0.017016248777508736, + 0.011391512118279934, + -0.004847073927521706, + -0.0012277478817850351, + -0.010319119319319725, + 0.017328733578324318, + -0.008870323188602924, + -0.03343593329191208, + -0.0014834176981821656, + -0.00727238692343235, + -0.037555061280727386, + -0.05209983140230179, + -0.11493779718875885, + 0.005848447792232037, + -0.0027999398298561573, + 0.019146829843521118, + -0.016959432512521744, + -0.0026774313300848007, + -0.010709725320339203, + 0.010773642919957638, + 0.034089311957359314, + 0.004612710326910019, + 0.00848681852221489, + -0.00311775179579854, + -0.008302167989313602, + -0.028379352763295174, + 0.001398194464854896, + 0.03377682715654373, + 0.019899636507034302, + -0.016249239444732666, + -0.009381663054227829, + 0.0016414358979091048, + 0.012961041182279587, + 0.03366319462656975, + -0.041901446878910065, + 0.012577535584568977, + -0.01738554984331131, + -0.017527587711811066, + -0.009722555987536907, + -0.00877089612185955, + -0.06744002550840378, + 0.03684486448764801, + -0.015482229180634022, + -0.012016482651233673, + 0.05886087939143181, + -0.03786754608154297, + 0.053804297000169754, + -0.021220596507191658, + 0.02239951863884926, + -0.0018323005642741919, + -0.006082811858505011, + 0.012179827317595482, + 0.04752618446946144, + -0.02176034450531006, + -0.0007803256739862263, + -0.0024732507299631834, + -0.004612710326910019, + -0.0033183814957737923 + ], + "result": "--- 结果 1 (相似度: 1.000) ---\n文件路径: C:\\Steam\\steamapps\\common\\RimWorld\\Data\\dll1.6\\Verse\\Verb.txt\n\npublic abstract class Verb : ITargetingSource, IExposable, ILoadReferenceable\n{\n\tpublic VerbProperties verbProps;\n\n\tpublic VerbTracker verbTracker;\n\n\tpublic ManeuverDef maneuver;\n\n\tpublic Tool tool;\n\n\tpublic Thing caster;\n\n\tpublic MechanitorControlGroup controlGroup;\n\n\tpublic string loadID;\n\n\tpublic VerbState state;\n\n\tprotected LocalTargetInfo currentTarget;\n\n\tprotected LocalTargetInfo currentDestination;\n\n\tprotected int burstShotsLeft;\n\n\tprotected int ticksToNextBurstShot;\n\n\tprotected int lastShotTick = -999999;\n\n\tprotected bool surpriseAttack;\n\n\tprotected bool canHitNonTargetPawnsNow = true;\n\n\tpublic bool preventFriendlyFire;\n\n\tprotected bool nonInterruptingSelfCast;\n\n\tpublic Action castCompleteCallback;\n\n\tprivate Texture2D commandIconCached;\n\n\tprivate readonly List> maintainedEffecters = new List>();\n\n\tprivate int? cachedTicksBetweenBurstShots;\n\n\tprivate int? cachedBurstShotCount;\n\n\tprivate static readonly List tempLeanShootSources = new List();\n\n\tprivate static readonly List tempDestList = new List();\n\n\tpublic IVerbOwner DirectOwner => verbTracker.directOwner;\n\n\tpublic ImplementOwnerTypeDef ImplementOwnerType => verbTracker.directOwner.ImplementOwnerTypeDef;\n\n\tpublic CompEquippable EquipmentCompSource => DirectOwner as CompEquippable;\n\n\tpublic CompApparelReloadable ReloadableCompSource => DirectOwner as CompApparelReloadable;\n\n\tpublic CompApparelVerbOwner_Charged VerbOwner_ChargedCompSource => DirectOwner as CompApparelVerbOwner_Charged;\n\n\tpublic ThingWithComps EquipmentSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (EquipmentCompSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentCompSource.parent;\n\t\t\t}\n\t\t\tif (ReloadableCompSource != null)\n\t\t\t{\n\t\t\t\treturn ReloadableCompSource.parent;\n\t\t\t}\n\t\t\tif (VerbOwner_ChargedCompSource != null)\n\t\t\t{\n\t\t\t\treturn VerbOwner_ChargedCompSource.parent;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic HediffComp_VerbGiver HediffCompSource => DirectOwner as HediffComp_VerbGiver;\n\n\tpublic Hediff HediffSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (HediffCompSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn HediffCompSource.parent;\n\t\t}\n\t}\n\n\tpublic Pawn_MeleeVerbs_TerrainSource TerrainSource => DirectOwner as Pawn_MeleeVerbs_TerrainSource;\n\n\tpublic TerrainDef TerrainDefSource\n\t{\n\t\tget\n\t\t{\n\t\t\tif (TerrainSource == null)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn TerrainSource.def;\n\t\t}\n\t}\n\n\tpublic virtual Thing Caster => caster;\n\n\tpublic virtual Pawn CasterPawn => caster as Pawn;\n\n\tpublic virtual Verb GetVerb => this;\n\n\tpublic virtual bool CasterIsPawn => caster is Pawn;\n\n\tpublic virtual bool Targetable => verbProps.targetable;\n\n\tpublic virtual bool MultiSelect => false;\n\n\tpublic virtual bool HidePawnTooltips => false;\n\n\tpublic LocalTargetInfo CurrentTarget => currentTarget;\n\n\tpublic LocalTargetInfo CurrentDestination => currentDestination;\n\n\tpublic int LastShotTick => lastShotTick;\n\n\tpublic virtual TargetingParameters targetParams => verbProps.targetParams;\n\n\tpublic virtual ITargetingSource DestinationSelector => null;\n\n\tprotected virtual int ShotsPerBurst => 1;\n\n\tpublic virtual Texture2D UIIcon\n\t{\n\t\tget\n\t\t{\n\t\t\tif (verbProps.commandIcon != null)\n\t\t\t{\n\t\t\t\tif (commandIconCached == null)\n\t\t\t\t{\n\t\t\t\t\tcommandIconCached = ContentFinder.Get(verbProps.commandIcon);\n\t\t\t\t}\n\t\t\t\treturn commandIconCached;\n\t\t\t}\n\t\t\tif (EquipmentSource != null)\n\t\t\t{\n\t\t\t\treturn EquipmentSource.def.uiIcon;\n\t\t\t}\n\t\t\treturn BaseContent.BadTex;\n\t\t}\n\t}\n\n\tpublic bool Bursting => burstShotsLeft > 0;\n\n\tpublic virtual bool IsMeleeAttack => verbProps.IsMeleeAttack;\n\n\tpublic bool BuggedAfterLoading => verbProps == null;\n\n\tpublic bool WarmingUp => WarmupStance != null;\n\n\tpublic Stance_Warmup WarmupStance\n\t{\n\t\tget\n\t\t{\n\t\t\tif (CasterPawn == null || !CasterPawn.Spawned)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!(CasterPawn.stances.curStance is Stance_Warmup stance_Warmup) || stance_Warmup.verb != this)\n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn stance_Warmup;\n\t\t}\n\t}\n\n\tpublic int WarmupTicksLeft\n\t{\n\t\tget\n\t\t{\n\t\t\tif (WarmupStance == null)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn WarmupStance.ticksLeft;\n\t\t}\n\t}\n\n\tpublic float WarmupProgress => 1f - WarmupTicksLeft.TicksToSeconds() / verbProps.warmupTime;\n\n\tpublic virtual string ReportLabel => verbProps.label;\n\n\tpublic virtual float EffectiveRange => verbProps.AdjustedRange(this, Caster);\n\n\tpublic virtual float? AimAngleOverride => null;\n\n\tpublic bool NonInterruptingSelfCast\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!verbProps.nonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\treturn nonInterruptingSelfCast;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic int TicksBetweenBurstShots\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedTicksBetweenBurstShots.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.ticksBetweenBurstShots;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum /= item.burstShotSpeedMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedTicksBetweenBurstShots = Mathf.RoundToInt(num);\n\t\t\t}\n\t\t\treturn cachedTicksBetweenBurstShots.Value;\n\t\t}\n\t}\n\n\tpublic int BurstShotCount\n\t{\n\t\tget\n\t\t{\n\t\t\tif (!cachedBurstShotCount.HasValue)\n\t\t\t{\n\t\t\t\tfloat num = verbProps.burstShotCount;\n\t\t\t\tif (EquipmentSource != null && EquipmentSource.TryGetComp(out var comp))\n\t\t\t\t{\n\t\t\t\t\tforeach (WeaponTraitDef item in comp.TraitsListForReading)\n\t\t\t\t\t{\n\t\t\t\t\t\tnum *= item.burstShotCountMultiplier;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcachedBurstShotCount = Mathf.CeilToInt(num);\n\t\t\t}\n\t\t\treturn cachedBurstShotCount.Value;\n\t\t}\n\t}\n\n\tpublic bool IsStillUsableBy(Pawn pawn)\n\t{\n\t\tif (!Available())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!DirectOwner.VerbsStillUsableBy(pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.GetDamageFactorFor(this, pawn) == 0f)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (pawn.IsSubhuman && verbProps.category == VerbCategory.Ignite)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool IsUsableOn(Thing target)\n\t{\n\t\treturn true;\n\t}\n\n\tpublic virtual void ExposeData()\n\t{\n\t\tScribe_Values.Look(ref loadID, \"loadID\");\n\t\tScribe_Values.Look(ref state, \"state\", VerbState.Idle);\n\t\tScribe_TargetInfo.Look(ref currentTarget, \"currentTarget\");\n\t\tScribe_TargetInfo.Look(ref currentDestination, \"currentDestination\");\n\t\tScribe_Values.Look(ref burstShotsLeft, \"burstShotsLeft\", 0);\n\t\tScribe_Values.Look(ref ticksToNextBurstShot, \"ticksToNextBurstShot\", 0);\n\t\tScribe_Values.Look(ref lastShotTick, \"lastShotTick\", 0);\n\t\tScribe_Values.Look(ref surpriseAttack, \"surpriseAttack\", defaultValue: false);\n\t\tScribe_Values.Look(ref canHitNonTargetPawnsNow, \"canHitNonTargetPawnsNow\", defaultValue: false);\n\t\tScribe_Values.Look(ref preventFriendlyFire, \"preventFriendlyFire\", defaultValue: false);\n\t\tScribe_Values.Look(ref nonInterruptingSelfCast, \"nonInterruptingSelfCast\", defaultValue: false);\n\t}\n\n\tpublic string GetUniqueLoadID()\n\t{\n\t\treturn \"Verb_\" + loadID;\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, Tool tool, ManeuverDef maneuver)\n\t{\n\t\treturn string.Format(\"{0}_{1}_{2}\", owner.UniqueVerbOwnerID(), (tool != null) ? tool.id : \"NT\", (maneuver != null) ? maneuver.defName : \"NM\");\n\t}\n\n\tpublic static string CalculateUniqueLoadID(IVerbOwner owner, int index)\n\t{\n\t\treturn $\"{owner.UniqueVerbOwnerID()}_{index}\";\n\t}\n\n\tpublic bool TryStartCastOn(LocalTargetInfo castTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\treturn TryStartCastOn(castTarg, LocalTargetInfo.Invalid, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast);\n\t}\n\n\tpublic virtual bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false)\n\t{\n\t\tif (caster == null)\n\t\t{\n\t\t\tLog.Error(\"Verb \" + GetUniqueLoadID() + \" needs caster to work (possibly lost during saving/loading).\");\n\t\t\treturn false;\n\t\t}\n\t\tif (!caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (state == VerbState.Bursting || !CanHitTarget(castTarg))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CausesTimeSlowdown(castTarg))\n\t\t{\n\t\t\tFind.TickManager.slower.SignalForceNormalSpeed();\n\t\t}\n\t\tthis.surpriseAttack = surpriseAttack;\n\t\tcanHitNonTargetPawnsNow = canHitNonTargetPawns;\n\t\tthis.preventFriendlyFire = preventFriendlyFire;\n\t\tthis.nonInterruptingSelfCast = nonInterruptingSelfCast;\n\t\tcurrentTarget = castTarg;\n\t\tcurrentDestination = destTarg;\n\t\tif (CasterIsPawn && verbProps.warmupTime > 0f)\n\t\t{\n\t\t\tif (!TryFindShootLineFromTo(caster.Position, castTarg, out var resultingLine))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tCasterPawn.Drawer.Notify_WarmingCastAlongLine(resultingLine, caster.Position);\n\t\t\tfloat statValue = CasterPawn.GetStatValue(StatDefOf.AimingDelayFactor);\n\t\t\tint ticks = (verbProps.warmupTime * statValue).SecondsToTicks();\n\t\t\tCasterPawn.stances.SetStance(new Stance_Warmup(ticks, castTarg, this));\n\t\t\tif (verbProps.stunTargetOnCastStart && castTarg.Pawn != null)\n\t\t\t{\n\t\t\t\tcastTarg.Pawn.stances.stunner.StunFor(ticks, null, addBattleLog: false);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (verbTracker.directOwner is Ability ability)\n\t\t\t{\n\t\t\t\tability.lastCastTick = Find.TickManager.TicksGame;\n\t\t\t}\n\t\t\tWarmupComplete();\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void WarmupComplete()\n\t{\n\t\tburstShotsLeft = ShotsPerBurst;\n\t\tstate = VerbState.Bursting;\n\t\tTryCastNextBurstShot();\n\t}\n\n\tpublic void VerbTick()\n\t{\n\t\tif (state == VerbState.Bursting)\n\t\t{\n\t\t\tif (!caster.Spawned || (caster is Pawn pawn && pawn.stances.stunner.Stunned))\n\t\t\t{\n\t\t\t\tReset();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tticksToNextBurstShot--;\n\t\t\t\tif (ticksToNextBurstShot <= 0)\n\t\t\t\t{\n\t\t\t\t\tTryCastNextBurstShot();\n\t\t\t\t}\n\t\t\t\tBurstingTick();\n\t\t\t}\n\t\t}\n\t\tfor (int num = maintainedEffecters.Count - 1; num >= 0; num--)\n\t\t{\n\t\t\tEffecter item = maintainedEffecters[num].Item1;\n\t\t\tif (item.ticksLeft > 0)\n\t\t\t{\n\t\t\t\tTargetInfo item2 = maintainedEffecters[num].Item2;\n\t\t\t\tTargetInfo item3 = maintainedEffecters[num].Item3;\n\t\t\t\titem.EffectTick(item2, item3);\n\t\t\t\titem.ticksLeft--;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titem.Cleanup();\n\t\t\t\tmaintainedEffecters.RemoveAt(num);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual void BurstingTick()\n\t{\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 pos, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo targetInfo = new TargetInfo(pos, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, targetInfo, targetInfo));\n\t}\n\n\tpublic void AddEffecterToMaintain(Effecter eff, IntVec3 posA, IntVec3 posB, int ticks, Map map = null)\n\t{\n\t\teff.ticksLeft = ticks;\n\t\tTargetInfo item = new TargetInfo(posA, map ?? caster.Map);\n\t\tTargetInfo item2 = new TargetInfo(posB, map ?? caster.Map);\n\t\tmaintainedEffecters.Add(new Tuple(eff, item, item2));\n\t}\n\n\tpublic virtual bool Available()\n\t{\n\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t{\n\t\t\tCompRefuelable compRefuelable = caster.TryGetComp();\n\t\t\tif (compRefuelable != null && compRefuelable.Fuel < verbProps.consumeFuelPerShot)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tCompApparelVerbOwner compApparelVerbOwner = EquipmentSource?.GetComp();\n\t\tif (compApparelVerbOwner != null && !compApparelVerbOwner.CanBeUsed(out var reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && EquipmentSource != null && EquipmentUtility.RolePreventsFromUsing(CasterPawn, EquipmentSource, out reason))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected void TryCastNextBurstShot()\n\t{\n\t\tLocalTargetInfo localTargetInfo = currentTarget;\n\t\tif (Available() && TryCastShot())\n\t\t{\n\t\t\tif (verbProps.muzzleFlashScale > 0.01f)\n\t\t\t{\n\t\t\t\tFleckMaker.Static(caster.Position, caster.Map, FleckDefOf.ShotFlash, verbProps.muzzleFlashScale);\n\t\t\t}\n\t\t\tif (verbProps.soundCast != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCast.PlayOneShot(new TargetInfo(caster.Position, caster.MapHeld));\n\t\t\t}\n\t\t\tif (verbProps.soundCastTail != null)\n\t\t\t{\n\t\t\t\tverbProps.soundCastTail.PlayOneShotOnCamera(caster.Map);\n\t\t\t}\n\t\t\tif (CasterIsPawn)\n\t\t\t{\n\t\t\t\tCasterPawn.Notify_UsedVerb(CasterPawn, this);\n\t\t\t\tif (CasterPawn.thinker != null && localTargetInfo == CasterPawn.mindState.enemyTarget)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_EngagedTarget();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.mindState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.mindState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.MentalState != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.MentalState.Notify_AttackedTarget(localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (TerrainDefSource != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.meleeVerbs.Notify_UsedTerrainBasedVerb();\n\t\t\t\t}\n\t\t\t\tif (CasterPawn.health != null)\n\t\t\t\t{\n\t\t\t\t\tCasterPawn.health.Notify_UsedVerb(this, localTargetInfo);\n\t\t\t\t}\n\t\t\t\tif (EquipmentSource != null)\n\t\t\t\t{\n\t\t\t\t\tEquipmentSource.Notify_UsedWeapon(CasterPawn);\n\t\t\t\t}\n\t\t\t\tif (!CasterPawn.Spawned)\n\t\t\t\t{\n\t\t\t\t\tReset();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (verbProps.consumeFuelPerShot > 0f)\n\t\t\t{\n\t\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerShot);\n\t\t\t}\n\t\t\tburstShotsLeft--;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tburstShotsLeft = 0;\n\t\t}\n\t\tif (burstShotsLeft > 0)\n\t\t{\n\t\t\tticksToNextBurstShot = TicksBetweenBurstShots;\n\t\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t\t{\n\t\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(TicksBetweenBurstShots + 1, currentTarget, this));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tstate = VerbState.Idle;\n\t\tif (CasterIsPawn && !NonInterruptingSelfCast)\n\t\t{\n\t\t\tCasterPawn.stances.SetStance(new Stance_Cooldown(verbProps.AdjustedCooldownTicks(this, CasterPawn), currentTarget, this));\n\t\t}\n\t\tif (castCompleteCallback != null)\n\t\t{\n\t\t\tcastCompleteCallback();\n\t\t}\n\t\tif (verbProps.consumeFuelPerBurst > 0f)\n\t\t{\n\t\t\tcaster.TryGetComp()?.ConsumeFuel(verbProps.consumeFuelPerBurst);\n\t\t}\n\t}\n\n\tpublic virtual void OrderForceTarget(LocalTargetInfo target)\n\t{\n\t\tif (verbProps.IsMeleeAttack)\n\t\t{\n\t\t\tJob job = JobMaker.MakeJob(JobDefOf.AttackMelee, target);\n\t\t\tjob.playerForced = true;\n\t\t\tif (target.Thing is Pawn pawn)\n\t\t\t{\n\t\t\t\tjob.killIncappedTarget = pawn.Downed;\n\t\t\t}\n\t\t\tCasterPawn.jobs.TryTakeOrderedJob(job, JobTag.Misc);\n\t\t\treturn;\n\t\t}\n\t\tfloat num = verbProps.EffectiveMinRange(target, CasterPawn);\n\t\tif ((float)CasterPawn.Position.DistanceToSquared(target.Cell) < num * num && CasterPawn.Position.AdjacentTo8WayOrInside(target.Cell))\n\t\t{\n\t\t\tMessages.Message(\"MessageCantShootInMelee\".Translate(), CasterPawn, MessageTypeDefOf.RejectInput, historical: false);\n\t\t\treturn;\n\t\t}\n\t\tJob job2 = JobMaker.MakeJob(verbProps.ai_IsWeapon ? JobDefOf.AttackStatic : JobDefOf.UseVerbOnThing);\n\t\tjob2.verbToUse = this;\n\t\tjob2.targetA = target;\n\t\tjob2.endIfCantShootInMelee = true;\n\t\tCasterPawn.jobs.TryTakeOrderedJob(job2, JobTag.Misc);\n\t}\n\n\tprotected abstract bool TryCastShot();\n\n\tpublic void Notify_PickedUp()\n\t{\n\t\tReset();\n\t}\n\n\tpublic virtual void Reset()\n\t{\n\t\tstate = VerbState.Idle;\n\t\tcurrentTarget = null;\n\t\tcurrentDestination = null;\n\t\tburstShotsLeft = 0;\n\t\tticksToNextBurstShot = 0;\n\t\tcastCompleteCallback = null;\n\t\tsurpriseAttack = false;\n\t\tpreventFriendlyFire = false;\n\t}\n\n\tpublic virtual void Notify_EquipmentLost()\n\t{\n\t\tif (!CasterIsPawn)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tPawn casterPawn = CasterPawn;\n\t\tif (casterPawn.Spawned)\n\t\t{\n\t\t\tif (casterPawn.stances.curStance is Stance_Warmup stance_Warmup && stance_Warmup.verb == this)\n\t\t\t{\n\t\t\t\tcasterPawn.stances.CancelBusyStanceSoft();\n\t\t\t}\n\t\t\tif (casterPawn.CurJob != null && casterPawn.CurJob.def == JobDefOf.AttackStatic)\n\t\t\t{\n\t\t\t\tcasterPawn.jobs.EndCurrentJob(JobCondition.Incompletable);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic virtual float HighlightFieldRadiusAroundTarget(out bool needLOSToCenter)\n\t{\n\t\tneedLOSToCenter = false;\n\t\treturn 0f;\n\t}\n\n\tprivate bool CausesTimeSlowdown(LocalTargetInfo castTarg)\n\t{\n\t\tif (!verbProps.CausesTimeSlowdown)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!castTarg.HasThing)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tThing thing = castTarg.Thing;\n\t\tif (thing.def.category != ThingCategory.Pawn && (thing.def.building == null || !thing.def.building.IsTurret))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tPawn pawn = thing as Pawn;\n\t\tbool flag = pawn?.Downed ?? false;\n\t\tif ((CasterPawn != null && CasterPawn.Faction == Faction.OfPlayer && CasterPawn.IsShambler) || (pawn != null && pawn.Faction == Faction.OfPlayer && pawn.IsShambler))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (thing.Faction != Faction.OfPlayer || !caster.HostileTo(Faction.OfPlayer))\n\t\t{\n\t\t\tif (caster.Faction == Faction.OfPlayer && thing.HostileTo(Faction.OfPlayer))\n\t\t\t{\n\t\t\t\treturn !flag;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual bool CanHitTarget(LocalTargetInfo targ)\n\t{\n\t\tif (caster == null || !caster.Spawned)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (targ == caster)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn CanHitTargetFrom(caster.Position, targ);\n\t}\n\n\tpublic virtual bool ValidateTarget(LocalTargetInfo target, bool showMessages = true)\n\t{\n\t\tif (CasterIsPawn && target.Thing is Pawn p && (p.InSameExtraFaction(caster as Pawn, ExtraFactionType.HomeFaction) || p.InSameExtraFaction(caster as Pawn, ExtraFactionType.MiniFaction)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn victim && HistoryEventUtility.IsKillingInnocentAnimal(CasterPawn, victim) && !new HistoryEvent(HistoryEventDefOf.KilledInnocentAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (CasterIsPawn && target.Thing is Pawn pawn && CasterPawn.Ideo != null && CasterPawn.Ideo.IsVeneratedAnimal(pawn) && !new HistoryEvent(HistoryEventDefOf.HuntedVeneratedAnimal, CasterPawn.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic virtual void DrawHighlight(LocalTargetInfo target)\n\t{\n\t\tverbProps.DrawRadiusRing(caster.Position, this);\n\t\tif (target.IsValid)\n\t\t{\n\t\t\tGenDraw.DrawTargetHighlight(target);\n\t\t\tDrawHighlightFieldRadiusAroundTarget(target);\n\t\t}\n\t}\n\n\tprotected void DrawHighlightFieldRadiusAroundTarget(LocalTargetInfo target)\n\t{\n\t\tbool needLOSToCenter;\n\t\tfloat num = HighlightFieldRadiusAroundTarget(out needLOSToCenter);\n\t\tif (!(num > 0.2f) || !TryFindShootLineFromTo(caster.Position, target, out var resultingLine))\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tif (needLOSToCenter)\n\t\t{\n\t\t\tGenExplosion.RenderPredictedAreaOfEffect(resultingLine.Dest, num, verbProps.explosionRadiusRingColor);\n\t\t\treturn;\n\t\t}\n\t\tGenDraw.DrawFieldEdges((from x in GenRadial.RadialCellsAround(resultingLine.Dest, num, useCenter: true)\n\t\t\twhere x.InBounds(Find.CurrentMap)\n\t\t\tselect x).ToList(), verbProps.explosionRadiusRingColor);\n\t}\n\n\tpublic virtual void OnGUI(LocalTargetInfo target)\n\t{\n\t\tTexture2D icon = ((!target.IsValid) ? TexCommand.CannotShoot : ((!(UIIcon != BaseContent.BadTex)) ? TexCommand.Attack : UIIcon));\n\t\tGenUI.DrawMouseAttachment(icon);\n\t}\n\n\tpublic virtual bool CanHitTargetFrom(IntVec3 root, LocalTargetInfo targ)\n\t{\n\t\tif (targ.Thing != null && targ.Thing == caster)\n\t\t{\n\t\t\treturn targetParams.canTargetSelf;\n\t\t}\n\t\tif (targ.Pawn != null && targ.Pawn.IsPsychologicallyInvisible() && caster.HostileTo(targ.Pawn))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (ApparelPreventsShooting())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tShootLine resultingLine;\n\t\treturn TryFindShootLineFromTo(root, targ, out resultingLine);\n\t}\n\n\tpublic bool ApparelPreventsShooting()\n\t{\n\t\treturn FirstApparelPreventingShooting() != null;\n\t}\n\n\tpublic Apparel FirstApparelPreventingShooting()\n\t{\n\t\tif (CasterIsPawn && CasterPawn.apparel != null)\n\t\t{\n\t\t\tList wornApparel = CasterPawn.apparel.WornApparel;\n\t\t\tfor (int i = 0; i < wornApparel.Count; i++)\n\t\t\t{\n\t\t\t\tif (!wornApparel[i].AllowVerbCast(this))\n\t\t\t\t{\n\t\t\t\t\treturn wornApparel[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tpublic bool TryFindShootLineFromTo(IntVec3 root, LocalTargetInfo targ, out ShootLine resultingLine, bool ignoreRange = false)\n\t{\n\t\tif (targ.HasThing && targ.Thing.Map != caster.Map)\n\t\t{\n\t\t\tresultingLine = default(ShootLine);\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.IsMeleeAttack || EffectiveRange <= 1.42f)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn ReachabilityImmediate.CanReachImmediate(root, targ, caster.Map, PathEndMode.Touch, null);\n\t\t}\n\t\tCellRect occupiedRect = (targ.HasThing ? targ.Thing.OccupiedRect() : CellRect.SingleCell(targ.Cell));\n\t\tif (!ignoreRange && OutOfRange(root, targ, occupiedRect))\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn false;\n\t\t}\n\t\tif (!verbProps.requireLineOfSight)\n\t\t{\n\t\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\t\treturn true;\n\t\t}\n\t\tIntVec3 goodDest;\n\t\tif (CasterIsPawn)\n\t\t{\n\t\t\tif (CanHitFromCellIgnoringRange(root, targ, out goodDest))\n\t\t\t{\n\t\t\t\tresultingLine = new ShootLine(root, goodDest);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tShootLeanUtility.LeanShootingSourcesFromTo(root, occupiedRect.ClosestCellTo(root), caster.Map, tempLeanShootSources);\n\t\t\tfor (int i = 0; i < tempLeanShootSources.Count; i++)\n\t\t\t{\n\t\t\t\tIntVec3 intVec = tempLeanShootSources[i];\n\t\t\t\tif (CanHitFromCellIgnoringRange(intVec, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(intVec, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tforeach (IntVec3 item in caster.OccupiedRect())\n\t\t\t{\n\t\t\t\tif (CanHitFromCellIgnoringRange(item, targ, out goodDest))\n\t\t\t\t{\n\t\t\t\t\tresultingLine = new ShootLine(item, goodDest);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tresultingLine = new ShootLine(root, targ.Cell);\n\t\treturn false;\n\t}\n\n\tpublic bool OutOfRange(IntVec3 root, LocalTargetInfo targ, CellRect occupiedRect)\n\t{\n\t\tfloat num = verbProps.EffectiveMinRange(targ, caster);\n\t\tfloat num2 = occupiedRect.ClosestDistSquaredTo(root);\n\t\tif (num2 > EffectiveRange * EffectiveRange || num2 < num * num)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitFromCellIgnoringRange(IntVec3 sourceCell, LocalTargetInfo targ, out IntVec3 goodDest)\n\t{\n\t\tif (targ.Thing != null)\n\t\t{\n\t\t\tif (targ.Thing.Map != caster.Map)\n\t\t\t{\n\t\t\t\tgoodDest = IntVec3.Invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tShootLeanUtility.CalcShootableCellsOf(tempDestList, targ.Thing, sourceCell);\n\t\t\tfor (int i = 0; i < tempDestList.Count; i++)\n\t\t\t{\n\t\t\t\tif (CanHitCellFromCellIgnoringRange(sourceCell, tempDestList[i], targ.Thing.def.Fillage == FillCategory.Full))\n\t\t\t\t{\n\t\t\t\t\tgoodDest = tempDestList[i];\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (CanHitCellFromCellIgnoringRange(sourceCell, targ.Cell))\n\t\t{\n\t\t\tgoodDest = targ.Cell;\n\t\t\treturn true;\n\t\t}\n\t\tgoodDest = IntVec3.Invalid;\n\t\treturn false;\n\t}\n\n\tprivate bool CanHitCellFromCellIgnoringRange(IntVec3 sourceSq, IntVec3 targetLoc, bool includeCorners = false)\n\t{\n\t\tif (verbProps.mustCastOnOpenGround && (!targetLoc.Standable(caster.Map) || caster.Map.thingGrid.CellContains(targetLoc, ThingCategory.Pawn)))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (verbProps.requireLineOfSight)\n\t\t{\n\t\t\tif (!includeCorners)\n\t\t\t{\n\t\t\t\tif (!GenSight.LineOfSight(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!GenSight.LineOfSightToEdges(sourceSq, targetLoc, caster.Map, skipFirstCell: true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic override string ToString()\n\t{\n\t\tstring text = ((verbProps == null) ? \"null\" : ((!verbProps.label.NullOrEmpty()) ? verbProps.label : ((HediffCompSource != null) ? HediffCompSource.Def.label : ((EquipmentSource != null) ? EquipmentSource.def.label : ((verbProps.AdjustedLinkedBodyPartsGroup(tool) == null) ? \"unknown\" : verbProps.AdjustedLinkedBodyPartsGroup(tool).defName)))));\n\t\tif (tool != null)\n\t\t{\n\t\t\ttext = text + \"/\" + loadID;\n\t\t}\n\t\treturn $\"{GetType()}({text})\";\n\t}\n}\n\n", + "timestamp": "2025-08-22 19:48:28,843" } } \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Verb/Verb_ShootMeltBeam.cs b/Source/WulaFallenEmpire/Verb/Verb_ShootMeltBeam.cs new file mode 100644 index 00000000..2e37ea1e --- /dev/null +++ b/Source/WulaFallenEmpire/Verb/Verb_ShootMeltBeam.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.Sound; +using WulaFallenEmpire; + +namespace WulaFallenEmpire +{ + // 我们让它继承自我们自己的 Verb_ShootBeamExplosive 以便复用爆炸逻辑 + public class Verb_ShootMeltBeam : Verb + { + // --- 从 Verb_ShootBeamExplosive 复制过来的字段 --- + private int explosionShotCounter = 0; + private int mirroredExplosionShotCounter = 0; + // --------------------------------------------- + + protected override int ShotsPerBurst + { + get + { + return this.verbProps.burstShotCount; + } + } + + public float ShotProgress + { + get + { + return (float)this.ticksToNextPathStep / (float)this.verbProps.ticksBetweenBurstShots; + } + } + + public Vector3 InterpolatedPosition + { + get + { + Vector3 b = base.CurrentTarget.CenterVector3 - this.initialTargetPosition; + return Vector3.Lerp(this.path[this.burstShotsLeft], this.path[Mathf.Min(this.burstShotsLeft + 1, this.path.Count - 1)], this.ShotProgress) + b; + } + } + + // 为镜像光束添加一个计算位置的属性 + public Vector3 MirroredInterpolatedPosition + { + get + { + Vector3 b = base.CurrentTarget.CenterVector3 - this.initialTargetPosition; + return Vector3.Lerp(this.mirroredPath[this.burstShotsLeft], this.mirroredPath[Mathf.Min(this.burstShotsLeft + 1, this.mirroredPath.Count - 1)], this.ShotProgress) + b; + } + } + + public override float? AimAngleOverride + { + get + { + return (this.state != VerbState.Bursting) ? null : new float?((this.InterpolatedPosition - this.caster.DrawPos).AngleFlat()); + } + } + + public override void DrawHighlight(LocalTargetInfo target) + { + base.DrawHighlight(target); + this.CalculatePath(target.CenterVector3, this.tmpPath, this.tmpPathCells, false); + foreach (IntVec3 tmpPathCell in this.tmpPathCells) + { + ShootLine resultingLine; + bool flag = this.TryFindShootLineFromTo(this.caster.Position, target, out resultingLine); + if ((this.verbProps.stopBurstWithoutLos && !flag) || !this.TryGetHitCell(resultingLine.Source, tmpPathCell, out var hitCell)) + { + continue; + } + this.tmpHighlightCells.Add(hitCell); + if (!this.verbProps.beamHitsNeighborCells) + { + continue; + } + foreach (IntVec3 beamHitNeighbourCell in this.GetBeamHitNeighbourCells(resultingLine.Source, hitCell)) + { + if (!this.tmpHighlightCells.Contains(beamHitNeighbourCell)) + { + this.tmpSecondaryHighlightCells.Add(beamHitNeighbourCell); + } + } + } + this.tmpSecondaryHighlightCells.RemoveWhere((IntVec3 x) => this.tmpHighlightCells.Contains(x)); + if (this.tmpHighlightCells.Any()) + { + GenDraw.DrawFieldEdges(this.tmpHighlightCells.ToList(), this.verbProps.highlightColor ?? Color.white); + } + if (this.tmpSecondaryHighlightCells.Any()) + { + GenDraw.DrawFieldEdges(this.tmpSecondaryHighlightCells.ToList(), this.verbProps.secondaryHighlightColor ?? Color.white); + } + this.tmpHighlightCells.Clear(); + this.tmpSecondaryHighlightCells.Clear(); + } + + protected override bool TryCastShot() + { + bool flag = this.currentTarget.HasThing && this.currentTarget.Thing.Map != this.caster.Map; + bool result; + if (flag) + { + result = false; + } + else + { + ShootLine shootLine; + bool flag2 = base.TryFindShootLineFromTo(this.caster.Position, this.currentTarget, out shootLine, false); + bool flag3 = this.verbProps.stopBurstWithoutLos && !flag2; + if (flag3) + { + result = false; + } + else + { + bool flag4 = base.EquipmentSource != null; + if (flag4) + { + CompChangeableProjectile comp = base.EquipmentSource.GetComp(); + if (comp != null) + { + comp.Notify_ProjectileLaunched(); + } + CompApparelReloadable comp2 = base.EquipmentSource.GetComp(); + if (comp2 != null) + { + comp2.UsedOnce(); + } + } + this.lastShotTick = Find.TickManager.TicksGame; + this.ticksToNextPathStep = this.verbProps.ticksBetweenBurstShots; + IntVec3 targetCell = this.InterpolatedPosition.Yto0().ToIntVec3(); + IntVec3 intVec; + bool flag5 = !this.TryGetHitCell(shootLine.Source, targetCell, out intVec); + if (flag5) + { + result = true; + } + else + { + this.HitCell(intVec, shootLine.Source, 1f); + bool beamHitsNeighborCells = this.verbProps.beamHitsNeighborCells; + if (beamHitsNeighborCells) + { + this.hitCells.Add(intVec); + foreach (IntVec3 intVec2 in this.GetBeamHitNeighbourCells(shootLine.Source, intVec)) + { + bool flag6 = !this.hitCells.Contains(intVec2); + if (flag6) + { + float damageFactor = this.pathCells.Contains(intVec2) ? 1f : 0.5f; + this.HitCell(intVec2, shootLine.Source, damageFactor); + this.hitCells.Add(intVec2); + } + } + } + IntVec3 targetCell2 = this.mirroredPath[Mathf.Min(this.burstShotsLeft, this.mirroredPath.Count - 1)].ToIntVec3(); + IntVec3 intVec3; + bool flag7 = this.TryGetHitCell(shootLine.Source, targetCell2, out intVec3); + if (flag7) + { + this.HitCell(intVec3, shootLine.Source, 1f); + this.mirroredHitCells.Add(intVec3); + bool beamHitsNeighborCells2 = this.verbProps.beamHitsNeighborCells; + if (beamHitsNeighborCells2) + { + foreach (IntVec3 intVec4 in this.GetBeamHitNeighbourCells(shootLine.Source, intVec3)) + { + bool flag8 = !this.mirroredHitCells.Contains(intVec4); + if (flag8) + { + float damageFactor2 = this.mirroredPathCells.Contains(intVec4) ? 1f : 0.5f; + this.HitCell(intVec4, shootLine.Source, damageFactor2); + this.mirroredHitCells.Add(intVec4); + } + } + } + } + + // --- 添加爆炸逻辑 --- + if (verbProps is VerbPropertiesExplosiveBeam explosiveProps && explosiveProps.enableExplosion) + { + explosionShotCounter++; + mirroredExplosionShotCounter++; + + if (explosionShotCounter >= explosiveProps.explosionShotInterval) + { + explosionShotCounter = 0; + TriggerExplosion(explosiveProps, InterpolatedPosition); + } + if (mirroredExplosionShotCounter >= explosiveProps.explosionShotInterval) + { + mirroredExplosionShotCounter = 0; + TriggerExplosion(explosiveProps, MirroredInterpolatedPosition); + } + } + // --------------------- + + result = true; + } + } + } + return result; + } + + // --- 从 Verb_ShootBeamExplosive 复制过来的方法 --- + private void TriggerExplosion(VerbPropertiesExplosiveBeam explosiveProps, Vector3 position) + { + IntVec3 explosionCell = position.ToIntVec3(); + + if (!explosionCell.InBounds(caster.Map)) + return; + + // 播放爆炸音效 + if (explosiveProps.explosionSound != null) + { + explosiveProps.explosionSound.PlayOneShot(new TargetInfo(explosionCell, caster.Map)); + } + + // 生成爆炸 + GenExplosion.DoExplosion( + center: explosionCell, + map: caster.Map, + radius: explosiveProps.explosionRadius, + damType: explosiveProps.explosionDamageDef ?? DamageDefOf.Bomb, + instigator: caster, + damAmount: explosiveProps.explosionDamage > 0 ? explosiveProps.explosionDamage : verbProps.defaultProjectile?.projectile?.GetDamageAmount(EquipmentSource) ?? 20, + armorPenetration: explosiveProps.explosionArmorPenetration >= 0 ? explosiveProps.explosionArmorPenetration : verbProps.defaultProjectile?.projectile?.GetArmorPenetration(EquipmentSource) ?? 0.3f, + explosionSound: null, // 我们已经手动播放了音效 + weapon: base.EquipmentSource?.def, + projectile: null, + intendedTarget: currentTarget.Thing, + postExplosionSpawnThingDef: explosiveProps.postExplosionSpawnThingDef, + postExplosionSpawnChance: explosiveProps.postExplosionSpawnChance, + postExplosionSpawnThingCount: explosiveProps.postExplosionSpawnThingCount, + postExplosionGasType: explosiveProps.postExplosionGasType, + applyDamageToExplosionCellsNeighbors: explosiveProps.applyDamageToExplosionCellsNeighbors, + preExplosionSpawnThingDef: explosiveProps.preExplosionSpawnThingDef, + preExplosionSpawnChance: explosiveProps.preExplosionSpawnChance, + preExplosionSpawnThingCount: explosiveProps.preExplosionSpawnThingCount, + chanceToStartFire: explosiveProps.chanceToStartFire, + damageFalloff: explosiveProps.damageFalloff, + direction: null, + ignoredThings: null, + affectedAngle: null, + doVisualEffects: true, + propagationSpeed: 0.6f, + excludeRadius: 0f, + doSoundEffects: false, // 我们手动处理音效 + screenShakeFactor: explosiveProps.screenShakeFactor // 新增:屏幕震动因子 + ); + + // 生成额外的视觉效果 + if (explosiveProps.explosionEffecter != null) + { + Effecter effecter = explosiveProps.explosionEffecter.Spawn(explosionCell, caster.Map); + effecter.Trigger(new TargetInfo(explosionCell, caster.Map), TargetInfo.Invalid); + effecter.Cleanup(); + } + } + // --------------------------------------------- + + + protected bool TryGetHitCell(IntVec3 source, IntVec3 targetCell, out IntVec3 hitCell) + { + IntVec3 intVec = GenSight.LastPointOnLineOfSight(source, targetCell, (IntVec3 c) => c.InBounds(this.caster.Map) && c.CanBeSeenOverFast(this.caster.Map), true); + bool flag = this.verbProps.beamCantHitWithinMinRange && (double)intVec.DistanceTo(source) < (double)this.verbProps.minRange; + bool result; + if (flag) + { + hitCell = default(IntVec3); + result = false; + } + else + { + hitCell = (intVec.IsValid ? intVec : targetCell); + result = intVec.IsValid; + } + return result; + } + + protected IntVec3 GetHitCell(IntVec3 source, IntVec3 targetCell) + { + IntVec3 result; + this.TryGetHitCell(source, targetCell, out result); + return result; + } + + protected IEnumerable GetBeamHitNeighbourCells(IntVec3 source, IntVec3 pos) + { + // 重写反编译的迭代器方法以修复编译错误 + for (int i = 0; i < GenAdj.AdjacentCells.Length; i++) + { + IntVec3 cell = pos + GenAdj.AdjacentCells[i]; + if (cell.InBounds(this.caster.Map)) + { + yield return cell; + } + } + } + + public override bool TryStartCastOn(LocalTargetInfo castTarg, LocalTargetInfo destTarg, bool surpriseAttack = false, bool canHitNonTargetPawns = true, bool preventFriendlyFire = false, bool nonInterruptingSelfCast = false) + { + return base.TryStartCastOn(this.verbProps.beamTargetsGround ? castTarg.Cell : castTarg, destTarg, surpriseAttack, canHitNonTargetPawns, preventFriendlyFire, nonInterruptingSelfCast); + } + + private void UpdateBeamVisuals(List path, MoteDualAttached mote, ref Effecter endEffecter, Vector3 casterPos, IntVec3 casterCell, bool isMirrored = false) + { + Vector3 vector = path[Mathf.Min(this.burstShotsLeft, path.Count - 1)]; + Vector3 v = (vector - casterPos).Yto0(); + float num = v.MagnitudeHorizontal(); + Vector3 normalized = v.normalized; + IntVec3 intVec = vector.ToIntVec3(); + IntVec3 b = GenSight.LastPointOnLineOfSight(casterCell, intVec, (IntVec3 c) => c.CanBeSeenOverFast(this.caster.Map), true); + bool isValid = b.IsValid; + if (isValid) + { + num -= (intVec - b).LengthHorizontal; + vector = casterCell.ToVector3Shifted() + normalized * num; + intVec = vector.ToIntVec3(); + } + Vector3 offsetA = normalized * this.verbProps.beamStartOffset; + Vector3 vector2 = vector - intVec.ToVector3Shifted(); + if (mote != null) + { + mote.UpdateTargets(new TargetInfo(casterCell, this.caster.Map, false), new TargetInfo(intVec, this.caster.Map, false), offsetA, vector2); + } + if (mote != null) + { + mote.Maintain(); + } + bool flag = this.verbProps.beamGroundFleckDef != null && Rand.Chance(this.verbProps.beamFleckChancePerTick); + if (flag) + { + FleckMaker.Static(vector, this.caster.Map, this.verbProps.beamGroundFleckDef, 1f); + } + bool flag2 = endEffecter == null && this.verbProps.beamEndEffecterDef != null; + if (flag2) + { + endEffecter = this.verbProps.beamEndEffecterDef.Spawn(intVec, this.caster.Map, vector2, 1f); + } + bool flag3 = endEffecter != null; + if (flag3) + { + endEffecter.offset = vector2; + endEffecter.EffectTick(new TargetInfo(intVec, this.caster.Map, false), TargetInfo.Invalid); + endEffecter.ticksLeft--; + } + bool flag4 = this.verbProps.beamLineFleckDef != null; + if (flag4) + { + float num2 = num; + int num3 = 0; + while ((float)num3 < num2) + { + bool flag5 = Rand.Chance(this.verbProps.beamLineFleckChanceCurve.Evaluate((float)num3 / num2)); + if (flag5) + { + Vector3 loc = casterPos + (float)num3 * normalized - normalized * Rand.Value + normalized / 2f; + FleckMaker.Static(loc, this.caster.Map, this.verbProps.beamLineFleckDef, 1f); + } + num3++; + } + } + } + + public override void BurstingTick() + { + this.ticksToNextPathStep--; + this.UpdateBeamVisuals(this.path, this.mote, ref this.endEffecter, this.caster.Position.ToVector3Shifted(), this.caster.Position, false); + this.UpdateBeamVisuals(this.mirroredPath, this.mirroredMote, ref this.mirroredEndEffecter, this.caster.Position.ToVector3Shifted(), this.caster.Position, true); + Sustainer sustainer = this.sustainer; + if (sustainer != null) + { + sustainer.Maintain(); + } + } + + public override void WarmupComplete() + { + this.burstShotsLeft = this.ShotsPerBurst; + this.state = VerbState.Bursting; + this.initialTargetPosition = this.currentTarget.CenterVector3; + this.CalculatePath(this.currentTarget.CenterVector3, this.path, this.pathCells, true); + Vector3 normalized = (this.currentTarget.CenterVector3 - this.caster.Position.ToVector3Shifted()).Yto0().normalized; + float angle = 3f; + Vector3 a = normalized.RotatedBy(angle); + float magnitude = (this.currentTarget.CenterVector3 - this.caster.Position.ToVector3Shifted()).magnitude; + Vector3 target = this.caster.Position.ToVector3Shifted() + a * magnitude; + this.CalculatePath(target, this.mirroredPath, this.mirroredPathCells, true); + this.mirroredPath.Reverse(); + this.hitCells.Clear(); + this.mirroredHitCells.Clear(); + bool flag = this.verbProps.beamMoteDef != null; + if (flag) + { + this.mote = MoteMaker.MakeInteractionOverlay(this.verbProps.beamMoteDef, this.caster, new TargetInfo(this.path[0].ToIntVec3(), this.caster.Map, false)); + } + bool flag2 = this.verbProps.beamMoteDef != null; + if (flag2) + { + this.mirroredMote = MoteMaker.MakeInteractionOverlay(this.verbProps.beamMoteDef, this.caster, new TargetInfo(this.mirroredPath[0].ToIntVec3(), this.caster.Map, false)); + } + base.TryCastNextBurstShot(); + this.ticksToNextPathStep = this.verbProps.ticksBetweenBurstShots; + Effecter effecter = this.endEffecter; + if (effecter != null) + { + effecter.Cleanup(); + } + Effecter effecter2 = this.mirroredEndEffecter; + if (effecter2 != null) + { + effecter2.Cleanup(); + } + bool flag3 = this.verbProps.soundCastBeam == null; + if (!flag3) + { + this.sustainer = this.verbProps.soundCastBeam.TrySpawnSustainer(SoundInfo.InMap(this.caster, MaintenanceType.PerTick)); + } + } + + private void CalculatePath(Vector3 target, List pathList, HashSet pathCellsList, bool addRandomOffset = true) + { + pathList.Clear(); + Vector3 vector = (target - this.caster.Position.ToVector3Shifted()).Yto0(); + float magnitude = vector.magnitude; + Vector3 normalized = vector.normalized; + Vector3 a = normalized.RotatedBy(-90f); + float num = ((double)this.verbProps.beamFullWidthRange > 0.0) ? Mathf.Min(magnitude / this.verbProps.beamFullWidthRange, 1f) : 1f; + float d = (this.verbProps.beamWidth + 1f) * num / (float)this.ShotsPerBurst; + Vector3 vector2 = target.Yto0() - a * this.verbProps.beamWidth / 2f * num; + pathList.Add(vector2); + for (int i = 0; i < this.ShotsPerBurst; i++) + { + Vector3 a2 = normalized * (Rand.Value * this.verbProps.beamMaxDeviation) - normalized / 2f; + Vector3 vector3 = Mathf.Sin((float)(((double)i / (double)this.ShotsPerBurst + 0.5) * 3.1415927410125732 * 57.295780181884766)) * this.verbProps.beamCurvature * -normalized - normalized * this.verbProps.beamMaxDeviation / 2f; + if (addRandomOffset) + { + pathList.Add(vector2 + (a2 + vector3) * num); + } + else + { + pathList.Add(vector2 + vector3 * num); + } + vector2 += a * d; + } + pathCellsList.Clear(); + foreach (Vector3 vect in pathList) + { + pathCellsList.Add(vect.ToIntVec3()); + } + } + + private bool CanHit(Thing thing) + { + return thing.Spawned && !CoverUtility.ThingCovered(thing, this.caster.Map); + } + + private void HitCell(IntVec3 cell, IntVec3 sourceCell, float damageFactor = 1f) + { + bool flag = !cell.InBounds(this.caster.Map); + if (!flag) + { + this.ApplyDamage(VerbUtility.ThingsToHit(cell, this.caster.Map, new Func(this.CanHit)).RandomElementWithFallback(null), sourceCell, damageFactor); + bool flag2 = !this.verbProps.beamSetsGroundOnFire || !Rand.Chance(this.verbProps.beamChanceToStartFire); + if (!flag2) + { + FireUtility.TryStartFireIn(cell, this.caster.Map, 1f, this.caster, null); + } + } + } + + private void ApplyDamage(Thing thing, IntVec3 sourceCell, float damageFactor = 1f) + { + IntVec3 intVec = this.InterpolatedPosition.Yto0().ToIntVec3(); + IntVec3 intVec2 = GenSight.LastPointOnLineOfSight(sourceCell, intVec, (IntVec3 c) => c.InBounds(this.caster.Map) && c.CanBeSeenOverFast(this.caster.Map), true); + bool isValid = intVec2.IsValid; + if (isValid) + { + intVec = intVec2; + } + Map map = this.caster.Map; + bool flag = thing == null || this.verbProps.beamDamageDef == null; + if (!flag) + { + Pawn pawn = thing as Pawn; + bool flag2 = pawn != null && pawn.Faction == this.Caster.Faction; + if (!flag2) + { + float angleFlat = (this.currentTarget.Cell - this.caster.Position).AngleFlat; + BattleLogEntry_RangedImpact log = new BattleLogEntry_RangedImpact(this.caster, thing, this.currentTarget.Thing, base.EquipmentSource.def, null, null); + DamageInfo dinfo = ((double)this.verbProps.beamTotalDamage <= 0.0) ? new DamageInfo(this.verbProps.beamDamageDef, (float)this.verbProps.beamDamageDef.defaultDamage * damageFactor, this.verbProps.beamDamageDef.defaultArmorPenetration, angleFlat, this.caster, null, base.EquipmentSource.def, DamageInfo.SourceCategory.ThingOrUnknown, this.currentTarget.Thing, true, true, QualityCategory.Normal, true, false) : new DamageInfo(this.verbProps.beamDamageDef, this.verbProps.beamTotalDamage / (float)this.pathCells.Count * damageFactor, this.verbProps.beamDamageDef.defaultArmorPenetration, angleFlat, this.caster, null, base.EquipmentSource.def, DamageInfo.SourceCategory.ThingOrUnknown, this.currentTarget.Thing, true, true, QualityCategory.Normal, true, false); + thing.TakeDamage(dinfo).AssociateWithLog(log); + bool flag3 = thing.CanEverAttachFire(); + if (flag3) + { + bool flag4 = !Rand.Chance((this.verbProps.flammabilityAttachFireChanceCurve == null) ? this.verbProps.beamChanceToAttachFire : this.verbProps.flammabilityAttachFireChanceCurve.Evaluate(thing.GetStatValue(StatDefOf.Flammability, true, -1))); + if (flag4) + { + return; + } + thing.TryAttachFire(this.verbProps.beamFireSizeRange.RandomInRange, this.caster); + } + else + { + bool flag5 = !Rand.Chance(this.verbProps.beamChanceToStartFire); + if (flag5) + { + return; + } + FireUtility.TryStartFireIn(intVec, map, this.verbProps.beamFireSizeRange.RandomInRange, this.caster, this.verbProps.flammabilityAttachFireChanceCurve); + } + // 移除了热射病和蒸发逻辑 + } + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Collections.Look(ref this.path, "path", LookMode.Value, Array.Empty()); + Scribe_Values.Look(ref this.ticksToNextPathStep, "ticksToNextPathStep", 0, false); + Scribe_Values.Look(ref this.initialTargetPosition, "initialTargetPosition", default(Vector3), false); + Scribe_Collections.Look(ref this.mirroredPath, "mirroredPath", LookMode.Value, Array.Empty()); + // --- 添加爆炸计数器的保存 --- + Scribe_Values.Look(ref explosionShotCounter, "explosionShotCounter", 0); + Scribe_Values.Look(ref mirroredExplosionShotCounter, "mirroredExplosionShotCounter", 0); + // ------------------------- + bool flag = Scribe.mode == LoadSaveMode.PostLoadInit; + if (flag) + { + bool flag2 = this.path == null; + if (flag2) + { + this.path = new List(); + } + bool flag3 = this.mirroredPath == null; + if (flag3) + { + this.mirroredPath = new List(); + } + } + } + + private List path = new List(); + + private List tmpPath = new List(); + + private int ticksToNextPathStep; + + private Vector3 initialTargetPosition; + + private MoteDualAttached mote; + + private Effecter endEffecter; + + + private Sustainer sustainer; + + private HashSet pathCells = new HashSet(); + + private HashSet tmpPathCells = new HashSet(); + + private HashSet tmpHighlightCells = new HashSet(); + + private HashSet tmpSecondaryHighlightCells = new HashSet(); + + private HashSet hitCells = new HashSet(); + + private const int NumSubdivisionsPerUnitLength = 1; + + private List mirroredPath = new List(); + + private HashSet mirroredPathCells = new HashSet(); + + private HashSet mirroredHitCells = new HashSet(); + + private MoteDualAttached mirroredMote; + + private Effecter mirroredEndEffecter; + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 594ee04f..90b1d75a 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -176,6 +176,7 @@ +