From 17f3ec7301cd360d0ec11ced60669fa1871294bd Mon Sep 17 00:00:00 2001 From: Regalis Date: Sun, 10 Jan 2016 17:10:22 +0200 Subject: [PATCH] Fabricator, deconstructor, itemspawner & itemremover syncing, fixed placing hulls in editor, misc cleanup --- .../Content/Items/Fabricators/fabricators.xml | 4 +- Subsurface/Data/SavedSubs/Aegir Mark II.sub | Bin 10997 -> 11380 bytes Subsurface/Data/SavedSubs/TutorialSub.sub | Bin 8482 -> 8326 bytes Subsurface/Data/SavedSubs/Vellamo.sub | Bin 9634 -> 9963 bytes Subsurface/Source/Characters/AICharacter.cs | 2 +- Subsurface/Source/Characters/Character.cs | 5 - Subsurface/Source/DebugConsole.cs | 27 ---- Subsurface/Source/GUI/GUIProgressBar.cs | 1 + .../Components/Machines/Deconstructor.cs | 52 ++++++- .../Items/Components/Machines/Engine.cs | 8 +- .../Items/Components/Machines/Fabricator.cs | 140 +++++++++++++++--- .../Source/Items/Components/Machines/Pump.cs | 14 +- Subsurface/Source/Items/FixRequirement.cs | 2 +- Subsurface/Source/Items/Item.cs | 2 +- Subsurface/Source/Items/ItemSpawner.cs | 130 +++++++++++++++- Subsurface/Source/Map/Hull.cs | 6 + Subsurface/Source/Map/Levels/Level.cs | 3 + Subsurface/Source/Networking/GameClient.cs | 8 +- Subsurface/Source/Networking/GameServer.cs | 34 +++-- Subsurface/Source/Networking/NetworkEvent.cs | 2 +- Subsurface/Source/Networking/NetworkMember.cs | 2 + Subsurface_Solution.v12.suo | Bin 839168 -> 837120 bytes 22 files changed, 343 insertions(+), 99 deletions(-) diff --git a/Subsurface/Content/Items/Fabricators/fabricators.xml b/Subsurface/Content/Items/Fabricators/fabricators.xml index d770f503e..88b3c0739 100644 --- a/Subsurface/Content/Items/Fabricators/fabricators.xml +++ b/Subsurface/Content/Items/Fabricators/fabricators.xml @@ -38,8 +38,8 @@ - - + + VQ*%ZI1W_wjnZOeV|t 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 literal 10997 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 jOw))I|m%9M~Ui>x< diff --git a/Subsurface/Data/SavedSubs/TutorialSub.sub b/Subsurface/Data/SavedSubs/TutorialSub.sub index 4383dcf0a316ea5cb2a04f4ac1a7893e147f62e3..bf964b1ff30c22b51ea17c090fba3b7fcb6140c1 100644 GIT binary patch literal 8326 zcmV;1AbH;(iwFP!000040PQ_%a~nsF->>Ta152MralgB#6mQkWb~d?6vaZ;Bsk$$z zF*T96p-3G?#q$07YxF!CGn`kG9Eze@i4$4mpfLa%Km%yt+YgVQ?vmAPkxmxLUHbZB z{kUGPX36~F@zcfR?pod^54W!`#2fYI@88k4`g{3Seg7_|(tM}B|4zIknhPn}#ozw( zKPHoJe@ni+U(Ocm$&YVeUnp}id3t@p*~R3`>kG>4Umxz1&x_X=KRn(gi;KzZdYY`R z*U8Pp>x*=86TO!glYcKiy}tN4o!%yk+4N%astIn4;c~lp2i)oME_yE_3qFVaCb?fH zvqcH|$8~y_zxsE{dY!JmT)0&XxtOfd>H77>B_pwnghPKdTc^|Ie7UkO6uE!0H@AS^ zFF&WNH_HV;Pgj$>>-)1XMfpsKCT|qVtxCdeP&@7nk^UalSMku ze{DZlrT_alTcy`CkK%{vD*b%DvS3yhll7N-`>S{MOZWHbwdK~s&Fc#f*g}{sECTtX z_kiC;`I-H6K3n`b`E2nsqVm)$_gI16t7iNh;r#1P^PjFQy=dhAElKa!{Sh< z@bq!Da&K*sdw9INht**7d}9ccv3_?c<&SzZQHS zW;csu{yS-Zqx>7R_ZzJD8;AhSf;U*0xHhFU2_qxJ;;%}WxNH*)K~(D}aoZ=toW96V zs*nOACX#xPi9H#aVXgdU7}KhpX%;SLlzj!##7gg2Gh*$b5G}$q$=vYbRPpZ|)F%t+ zMCFXP89D)OR`VxnE2GtD8EM-hQi$+Hj!W#A@Q!O7v*?nmL8r1460SC1iSbq?rrK3i ztEe)vFM(vd%~mtsrje!CVm}<0sB$R_Q5950hJIbvmdiHL;<8PI+r2s-w+Xip@iv0` z!mO>*6}3kx`>KSAiB@4!t%5Zqmi%W3u=&Prvx+C!SuFljZ&LL9dc==kr${4m~_*YDcJYgJoY(?SnEibwmrK4mE+3F zE^2g;l?5pcmZ1k-xAfeUI3T43DP=o0(ZTr3B$8^S4l32$OEsm+9C9}cgLX58u)Fiv z53_bm(Av^!646=^v(4Hc)~m*jWWs=Srt&8T#|R+TDVb6iR|^GOO22pJ54LOicv4HqH`10|vhLM9;d^p8S5bT!_=jOmq+4Ix8rrIRwz55ql;-i6oRg}c{?7%|6Ne=6jg)5bT60hWV)S+3ItCZc$aVp)U%rmeca1R>^C21!kEG4 zA8xe;_xm578}NLCfKX&Fc`hJS4X`iXZhL>)QgmCTE=x+<6W98CexZhS zdLK}e5q9vxc|QKSh{m-4IYF788>AhNMN0y^KPgC(0V{GAmlM$U(bVJ`O95^hZpWtD1 zxx3ZVKS~v`g3N$Mmt0mMP@=0?IBx>NZNp;_l$a_EC)UJ@Vo(%<5~O^=@Hio4nbHdj zlGS3mL#4S6MpnTTTB8HZrZ3CTF6A_jg)%eXr5fYyC@7joXmcaGRrKCekI}_pr2|%@ zM_LN9p~K9>M%<@}v?4nZgDdFHv2cnB2Zch}j%od%s(!AiX?)8vV}^$)P=ta?OH=T( z!(yCBTiNaC$f{NMp4!kcID_s&9Qm10Y$GnF60FRkE>4vDfHg$;q>lkpV#yM_xJ$%z zkNe&Ts@(3N`vyR2ks0ar7zDHc5Ny^CK}Y;p5b@+mF76;id#6nH0jMB8OA zS*@0ze=6NjfjuVX41@inx*$xGPqW1XLPKJG3Q12Zy`~?DUwzU-;unE4E4VD3NLXij zzMTGvvA|BfOTD^NXBBOKTnY|hO5>@r~!{dCOS2MUS9?su!jXW;lTc2mwYiKtDKi{T6CpbRY zuYOL}>FV``xA>KoAPh9vliOtQWoQe+Rd2fymbV0Xmy1~m8&yL5wn`V%+am3U+#)Gx z#30rfRs-?Fa(>-ke^FT#ySa?>=#oKQ?C8s4Z(qwex^y)lV=Vh&ou>228<6X?NEtKi zeL!-8_mz0|_G}pXFBdZZNic7@hNF%`z>E`aO<>>c{Jo)${@n&~d>EpDcwhbhksvOS zs7eh$MBB#f#hhtyeT>J*lEQ9uHXim0`3Oq6+tgdjI+Hpw+DS2y5d@oNR2K+RS)s8gKPmohzYTRq z_65^u5hM_M_>!rN1D%XiHv6aoDYY=_)aH#9c5e8>~iZN~{6}H2^tm*rnE^WwBME zR_Fz|3E*qnztb&bUc^4jPIjWd1U*lb{i6r5fYLbP(DN(S!+3yiuw;&*z>c9D(=psw z8c(U&e|VMPwTV_l*Ouq%sIto#4v%EteJq#k68;2VLamFqB6XZd8&yI(eA4 zW|eA3s68L+0MxKHF6f2m^Js^!x3j-yi<`;M$wPUX#*U%38;!MkB&}=zmL@B-c9$k` z_bNhBM8SFJDs?GzTVK0J75fhqaGvU zR~jU1vX2kDG8{nRF4}QnXZ^_nJL^Uq9JMkUNFm$vlvk3w0Gsrh+5h;a^n7@nmBqWrAJNVMm3^nT5yTlIB(Xh`&yNr;k=F7s6sm;A1;VR@e}o~w0wrv_?ke@k^o5BuZbjK2W^ zF`|n4(LLP)@>DWxV14T6-Ul0g>R8*i!?A+%eOtjk|^-9bN?>gNS;U00#uc9Ee|>64q_) zN|`w--vn&|d=*gDwm@sJ|5zEoO&bGv*QBcFWB|wAX0)nq0Zw`%eCRO6j+QG(4{vZq z9V=H%g)6nl!;4c)q|G~IowgB|6YNft; zL`W;~qveUvt~A2F2P)82YS2rTS$|;+2XI|-0lhsntWru z@XbcpuDbZp`@*5|`)tv?Gvx5#P1gofVW-`!Yj}5t=stya>-feRZcnY}>0fYvYbzD# zC4iyykh|}jRl}C?y57iy6M;YG%g^_g=jkF71J|E$s9X%|rG9)OR2!HzM1;Dyx_8lN z#<@f6w-zDf-Kz}&>K!cl6${Yt#LDpqQ1CS5UIF4Le-pd@3{?s0X%k)KsP6&b30S6p z6wh-=#da1as{_it4qX2Z?VaMjvrhJO#y+bi{#aT~ku^NLOP=z-u|{2RRIIHHo$mD( z+?zEENmpS*5MzEyuCL1yeS9+pS`{c5`;{F`JNc6VDO}Cwg?^qbWBQ#TUg*u1UtXH#}8;e>iw3v24+lrSzEt7I*YTw_7knFNo znLO+(h3lyO?7Med79c|_pC{K8G0SCv`pFNRPN;^JAIDib&YAatwa31en(%4~w9>4l z1R7Fi9Yxti-v}rb$sieDOig11$#p$!eH*HZ^FPlEV>R(9KB{`Fq4OCT|41!gl69Fc z!qqGW`tNeYZ3bOR2y;!an1t?#aU?l(#MkzZa@`Uo>&t0mE0+s5=+!K3IZUx;-+i^E zyd8-y-k7?+wJ!eU5n7O~CcmbZcqLa+YfqPiYOP?cd9|w?N`XlZb#j-^*VoI>3%l+; zwB2mtS0^FAe@y3-UzgVf6$_RXWOSbw&rR0L$;#@a^=&#yb63v$fjLeGVCUv|vsR7F zgbdN|mW;3&9#^$6X5B5jeRO2+bA!9~0i&i*@m7jSR=M9yy%hlE1^wRZ8=XYt8xa#4 ztFRk|_BXK3WU;(XADogUHd75!bV-IHDUj4)>3vkSYvEbpMzs=wqSk z9_ZeXb2caWJJj;OE^ZT+7d;4tpjesZsh#O;I?%NLb;9du|~vWaGTj30~9o7OH!hW z!WcS9xyj<=&@$Glpe5iPMoV-h*7}3c-(}ylvAMV# z(e(olAcQ&^Rqd%hqp5W&!zk*~>!k;yB1-FL$-Ob&sv=P9jF=Fu&QKd&*Q$}#i`({% zU>sz17;e!^p}o>*JICV3X-+{-LQurL*WoJk2)jmKNiNW~p_;^3er|d{lDHKmhojHN z?8g16bGuWdbZ(HPCmNMK0813p1{cGfCHIQuU`%|K0|kF`BO|kK-C`ACpl-oUPC48H z=Bl1|+#gSYpMp4t4CGJH5Jb_iLpN1#G(44cZZkBk*o9*0w=wigzT_K;{QYC8WGF2w zW79Y=eM8-h!F2cEAVkrP7Dj|~dPXxX-sxe4v%qbHM$5+9;>kClhhy?=%?XtBCxs#4=&y;t>4Xb0#3TX zjfNOZf2m$ekY2NS2WuzPjFkXzhNUBHh`b6!G}o1Bv$4)jn6=312FC+XmPlg72qma)PjXlq%Wqiifu zgB)c)C+bpD6S)T1U;E^VWY#bT$>R5n0M|)q{li675IT`ABJDaV#R2rHyo!OwT_VVN^5bYw6R)8 zvk=ULw~A^!%(SyXVVL>*N}k^Lg37Kc%g8$6~=TN^iK)X(h~i24O>7o2y1marTB z#rBS(C1MzcO(je#J{{;;NmT^S{u^QuYyf9KT7*aXD%x$iWr?B0~++)cJ5VNwCExBUl_9 zH_wh!c_b_Q2{slWUK*srL9im@vLH4hDS_1ob#7z2vJJ#jN}_QA=5HkN(H zs>HZ&1P?|L<(7;qr`!Kd7S_+nlJD7`4!{lt8Dq#PHFWddJ;(^b#VtZi0+qN?Y0+bS zC2so{Fg)`faE3WFwl>sMtMgKa}Gx%sAs-bfuzKxo?2UD+0d$KUr0irC3d++&BF{5Ls$~l zSmiLfwn5&ZW#;}XRtg@5x`Jrxv^DwBrK?*RZ!_`@3RT&VQCHukpy&*bL z__?Go@b7Ra^DHI_90@|#hb8#|&Jh;9pi_kJBQM;RoY7pzdPhn(Mwb zT4(`=kf{9&byG3p1|zkv6Q%PpK+U@1fa1qkgA>mQ3sJI_nM@L{(`*b2-B-|>Q7{h> zREO#>a5i0yKa|iHKZ?NWbb%b@*v$&wH`z%mciCiU z#J8(_6dTiJ_C-ddfCmLi%InQKt~41N(!UtJtG`~Fl_aA;i)%%`>+DDSoAWJtnBCWkAMn}XPlp=nX7-L0SYhFz8!WZC4|9yT0tGr8}-^#ya=vuzZB9)+AYrPIo zc|$zsY1bi9CqUhx3c+>r9x507vl#>fo9np|1@O4aTW=3~x-v1#X@aNh%LC_S@qAv^ z&*}6wS(dx|H|5arM!q?z(X@|LM4YZZ0Jej(2_d*2^ z{yY=6nYdJdvgaC^GUB`!KJ z>AsG*A0Jn%bUj%u*9r85na}QKYlzYr61mH9n+=rY@Lo%DA5HAWXw6pXWQRTx)xijz zJrB#CZEdU6Tefwz#>^YGwIWR0LG`zLLT$-Jr88Pg{h>wTUSd66$y|^g!NEPrOu&F= z2!lSk$kj$ivi=rpv}mywtIdH&t~L755!#IAP1*Toi#6HbVhsVx8?-Z)pT;VL5yOwF zl&Rv_OV!3OZU~_VfYLQkcpNv>?xQJG{@VQYTUxFdH*5< z@>5duGj?O+%LuNDnkp@O>|N~~vq~0uS8Q@I>`>EWIofT?bDET9^{n>VTfH{DBCtVj z$=AxoRJi0F?#O)YjCEx($H&;}hP~viBV*5uZQZfM2g)3dvFM(*-Mwd3ybWVDIY!3P zDr24hd}eGLW7|GGAj4RdVJbY_`!zAFc_$8^qjoUH3RZ@B?P(}-y}i$D4PmP*7d$$) z@{+C6?p6~XuspLhc*58r*owxGGjitZHhdi(&^#btQR_D-COKQzV7}6hi14%V6(#V1 zuV*)Ri~Tx$F#G}eiuy{Oxw;Kk_c}XoUtDE~t7jd&1y_$Sh{S#EDkOu?5u{+QlIPv4 zWwwaOTD2<9HMzM`-2&JHVO7fr@l zi}`MSP_Q-bQmD96jY>f`4$Hrl6eF(WOWv%i7D?oR%wiRHI zoAiUs4KN-uLVknQlDb+QRDr z&UU?e+2jSv;{KD)i`<--GraPt@F87cW3Be9S|it8MdsQTI6NfV1k_(chE?g~dcDj` zS2?oRFa{~SA&Z{@+^Koq%R=G6t+NJoa2nm-w@T{F=|)a>*`AleX*6{L_VgBtaVV?B%Vjk; z>J(V5Dx3Pu>gHW-PJz|5va4Mk_c*NPFPGJ>JNe6JHLL9EGpn0feG*<-wMcw4uk6RS zlQ+rgx{=-g`sMHc`uM{?fBo@)-o2gt{mq+qA3nSY32?n{Uc3aL=%OYg`sJr70rV6k zfLC>Z+s)~KSo17&ePy$Xs-BUD~h;l{7JF=yVo0qHaY5o4$ z%j7jmt_wY4g7k&+`V?%t#`_u?UybI+y=Z1LdI}rc&#Hw|J91`ro5enXunWZ{Qm&;Q z9gW+k=(bTUPC*DbQtw)wg&7J~Q`gaA!hC+_OXSqMTLz|IQo z7a{}gro6X|5vO*LkyioRw(5hrT%;qr2oOGvna-G!1eq-(*BDWMBh%SvgbS zPvVXysX+~Onut#Q%?V}g*l?oLlOXz5qwxY}&~b1J(Cj!o*vt*I>KL~6?W+%upYD>C QrRv}Q9|5QJ@5(^|0A)!+4gdfE literal 8482 zcmV+-A>G~|iwFP!000040PQ_%bK6Fe->>Ta152Nw81u%I;;q`Xy-BW;U6<{>RNa>p zEFls%6se=gNWNcx(}Tw}Kn#GP2#TUuYj0$c=xOwOdV0FQ|GfTsn=YsGY%))8v$tof z^=h%4rnCF?*R#p(mAFaoZ{D807y3i|;k|sPnN~7+NBH04_kR_CXPRpMPP{++%YXjI zWb*y5>9>!I>3lW$>HXU?nVd}?-<~mgHu?7Uj8OB>`@8gE{`Tz0^=&#on@q1R)8*AF zy}o~Ymd&rDkK%0d@5R@*XTM~ZH|czOc{X{|23KRaOwca4my6rzBaaOD0`|M~Zk0~w z73iN<*=_Oae@j=ZZ29fXu9C!OlVx_fdV6+GV=W?X(O*ti+2vxkSeh4#?EmsNH-J7a z9BHV*_k@pI)w}f0}i^EZ14NzIo6*GdBxO7xRzlJew82 zHXkgr|6Na)+11pc`1x{~JzOmfnC01I_3h65>Vx^x-CcHNxOIR1_RIk`5T?f+WOEzrr|7LNtVnG^6ts)!IagyvtC>HPk8gF}Mh) ziA)hTokYg4-)EUP=dVC8mNx}2^q8pJ{pN(!YeVtCl^fk_G3(YrHt$2mnF(+J%(cPmBmoZCo`1!B!fwB zMBWj1#oI_zJ7PXzrp)Jmk081twAu$M8k=YzLdjN1o#YAh@;u<*1*oqE(yI!SH8Bd2(zb^Uud`*V%mXC7u6K9KSg8LkZ#0Iaj_D#=`I2-=?z}aMH=p z^zx7N>n!U&`q@~TYnOQ?M40H1d(V=0zIK9gDFpnzP513(ZN?I`woLX(b4G<*TS{r- zoWy4$c24uS%0=iT^5r3RziO4nl|16f{?@IeJ0X$X2XWm$!Eze=ae`{nfdW>o}`?#*KbZ*I2PRLF?A9pMI$ zS-QN=Zp`lG|KI?B_BFjM3F)kZc|J1sI3herBFVk5(&cjT@N@QifewSO7TF{7G-EO% z@W=c7W%_kGzyCS?n#~Fv+_{TAk24Sw)&;?0@X1j`Fn0(nO+*a`H+@JfZg1216~aO= zm$^`a7CHHewLXgomLY4y({Y1gI@ET|P zQQ6>&Adalm$V6h_s22w(8iJr&CX(A4pj)#M4GjBNP<2;VEksM09?b~v(zP|Z-{a^@|1HrzA z0W!ww5+x(v0p#oT9Yp5$1;-E;=3z}NfY_kohp<}QITRSO2Zqx2J;2g2KTT@SQ|GA7 zn&uTiox#@npZ7=%)yOCqnnsdxkQt(ag^%LxfHpR204TpBOA;6LndsiYVMa+iSX3hP zFr8m59?EFhg>W+Gla&}hln#XIu9X^gDZ{!Bj5=UBV-8jr-p-nkt$-=C0|b|Cp)n)S z9ndakSvto`L8(GoL2{g|Y8msu6|!EZ%aT(wwV#AJO=3}R1*xZg8_Q?fZ2E{ zf^9s5xC($!-u+T_T_-WpH4dbOQ`neyYkL!hs>85wAle%a1MLbZyoLm?2X7K5!%d&0 zbv&%77$XP)XSceyNuEY;WnQF0sly6+r5NSCY`|)zhISfuKP)GKlqI>ilk^x zPueXQZBS$#3Q)BNO1`n3Rq=77)=2=Ao^5TN9JF1+yU0a{ z3LRO*tz36n(>hB?+tb_l8|K6lqB#Hsr^Z7Op|bVyp`5L(uHE{Yze;wx&DPjf=(_E; zK}CZHBY4#3Bp0=-e0%^$Nr}CfKo_ zOCIFbcwIoOR}-RB_ZtYf4G=9hs6Fe~t)CS5@ldbK>)EDqvoln_g~WOahED|8J>f!v z+U}@pciV72qQc(>fc>s#13*PSW>nMegL)urm`#rL6W#+D!9c^hqV1*_I(rG3P!{vP z*rd)!+Hhim6gY%M6`~SG9_I}0i3Vy|Bz1mTc}{4jIJMzGF%B{bj!4|G9S8-O+(CKv zMr4HIRhvCZAO$*{7M#`d2w;|2fa_pr*9EUI@Ofll39SfemWMKQ1EMD=!uA;@FF>TW zf#4#u#Q5(45WId|H&W8T4#+!gv!~Le4$JNv2f(Te2vd$eLJkwuWrE*Rxqs7GyhU*nrD6(Kv?}ewbdZZXhN%Ki_149qbUy zS0B<R0( zXn6`$gkB{~_Vz%bMW2!n#VKeT(SKcL^UIskz#thGoJ17%G+~7q4F-5>LTanxOtcc( zuo=#^Mqd`E<|$)F@5M;VeqLqSZ1N5c#IsUODLw^+h?4bPGaD#N{eKu2#ZR2lHqq-w zoolyKGX|=^`r3=Qh(#n~Y5uA~h!dhC1|40r8q_+Y1$kD>QJPrfob}q2e!_Fg%-=e) zoEWFZi~(oH-zVB2Z4jqAqOdRLzy+w(G5>ZqR06~&b{Qo8Bp!rGjy7Rn+-|jV&|wML=O|zlgWM9k-&ATpPmsDyDmJ2U|r+X(u^p zh&54-f17V}D@PP;Pi(}B@GagzBGHl3Uh>-7Pf?+w#Nx@o@WUavBvE2zo0^?A)xyM? zM&y+)Un8;dM1*}?Zk#kv)D~|cP=sN40B_+7Z2I3qK`9lIb4o$9X}ch8{MiC~oYpkn z!o=ZyH$rz7Dm)Q!R42n?K)mm6&2u1*uhr!7D97=r7%?8*SexUpki(W|yr6V*?OK`x zwp)8!o8q-aT%0}a=e1+BW7fuw+Ct2|EX``A95LAH;QIe<364{*2@~Ax@6WX)iBjHJ z@`*USpZ+z>|B&lH0t&3-nGqsds*M`du@ol$rFa62_H)ojmH`hw_Y=~ zftn2ki%1&otQ;D4l@T@jAf6l=cDTtxa)9{ZYJ0f)<=vz{4}ug|)+G>(a^-76`Ait1 zLOXj){8=!p(xe0qAs>tUzfIstIFc^&q>%jS&XYPwk~bjP8jDs)a9Y#>32w4J=4Ufc z0z~126a&g%VKAT{(z_x#Q)M|-kxV9zNcPzh5IQ-jo(AVxf0~N^$2W!O^LkpHU!&MS z+0=pP+xd?m)d(Sc7_P(tAcTtajhczQAXH0@b6T80XxOWMg9_XJ%s3g48UMUm&nG`D zvw3=zl?OB^I*%b!y~S10FE`7@!+=z^J-*MbChr%EGE&7C251u5lNPvn50oOTZ&L_> z9Le|8O?kDrzMf_6O-hu%S#PaV}bi@_1pc*Sd`im^#%a&@o(l=__QXV13(Ka z1gY1A*c&$`D+KLJksKN;M7C)Tf4S|R%~4u{4HT5q~C!JRq|T`LH> z0Ssk4aDeT2L3@+thsO(FpJz(+f%8J*syQV$c+q!Yba=e*wrOuRayvL)FjpE4X_lJX zRy|!8ihK4~23UhR)BD9;Hh-=$30;m|dpr0Me(0>i*+6b=Sk1FDZ))&`aK_sOjHr&; z76-u@j)&;Pab1mgPbZ?X^B}0v!J0VRfu&t<7(H`E{orqsr;Le0kC+ysqL!>{8aYd?Z#(*y_r4aj~J{liXN&$0#)HqPLOL0%q71l!qI9k64|5Xma8e!`g98d&*;+~baLCHm$>E2G1o#!&ael6BPhY=5 z54oVt!N>LOU3uPyD<2`DY!8^LO@HrT3I`lK*!&iD15U!w=Iy~w_aE@ zew)tQgH|y-zuXo3%COU$yp?(PhWIXnckB4Z3hu_OX4#+6ZgDGv=OlokG`6-q(h{7- z_7=i6(mrH6+w*oIla27YS!`9O=uo1 zVW4N8AM4~#4x|h<+ZXy}I-mZMmSIPg6ovLVz3_`?TTB8OZW71=nuOqa_a5SYN~g2y z^?U*~e#^ydR&rFju2sS|Iq4y^d;ZCkihebp?UY=N!G#;@(-_EeKLwoarnEf=5i;y> zwVYmG8`QkeH0gl06)%5Yq?KkW*Y!D$^V`T(F8eUW;liQ>`l~U-Z3<2FV`}@sQUN_kbtD*c zcTwiAv|U~V?aLJAD_0A**wy^la+qPwzx!rOc{>nWyfKSyYg_z}HFTR=PCjLZcokPs z=Tw{8^&Z$acGk-RN{LAUb#j}{R#%IMxmouP8lbiDtCNs_UuUz)r^S`8A&dPS_hVTa zo3y&gCRq{6xxHwC(;nElIdjcxksG7>`s}+QBPhdq*+^qH!?K&TC41jiyh{%#Ndm6V z=591^8$@x*A#|8)Dta8n-*FuiEyHdUn%}@WllkH*ySGL*jxQ9wu#M_3P=}>H90j_P ztQCV9X3dymS2${+F5uG01zb$HI0uaL-*H#TH~?R#m|6f|HiFR|;j4r&=qB=_LVP%q zC@`0rMH~05c12QUm?R zar6Hy=74wNe&q4RIUX<5i$3m|O>CEvT@x2uS`9wIXd$fSe$?ta0dGLR>$?DsyqUY< zqhdCq;f2X27mQw%GBTXBt}lp?#;VB{wW$z%0)4q47fSI9k?@NIZ58_QLx>F>y(>zYiZ%*ocWtXm>CI!?>L+b}4Kr!-9~d_*&;d4=qq}@S{BxV(*eUe~W8&_2 zCLG%EkQT4C6FG3+D*?w#Xn^XYj=(x$QA@q<(>$v|OJAsB;}R0Ipf1BCrXEg?8q_kp z8&yh2qNSRAHykwaPy#j)*r?crV8cUyrqF?9$`dsL2i;CKr_ylZ#5hsRTSLK}Bm-h_br-qgD;;2Hbm*?vNF!=WJhkaz z1IHY#_(H10cosziv;a-E;C8ab?o~8b%)&JbWj9hLfXII$g60W~Dw9!2#PBf4-KgY- z)yjKYY1<42rG}_N18E^;0Z4M5z<&d9tPHi{B2sL}IFt=GtOPO(UC`-zEQH ze1nlo!(_=V%T-+b*O7HNvTiuLq9n4T=*QXh?-Xftw+_0kZnO*A*&(6PC1L&=Gj(Cl z(FS9Prz{%``REuz$~_E46mP;%gpD~JyF`(ZoQU??_fSjfrs}}tDJDib6QqzlGx$N~ zGz>pCtx*F3n}&YJ_}PqP0DcV3|6_6lN3@YMFO2v_k?s$`6z#safWcN{olg-4i56iG zb_~CRG)7?0o{SN?Rr%b&(2cn%M@j&zTk=%9IKSD#8@jom(m0sWFbfaVm>W$=;bw zNk>N!>Ndhqj1d)+@w|vd(Yj%vVu&B13LRv?Bw8^h6)lQD#UKlt@ET;OQv4O`?DTjAX}qu|&(Q>Mm&Qh#02VY*_bQq#3IuV@S0SMK`8xeIwhL zu(h*btRbg~agjczZ^iy(PjBLp+(PXF5JrdaF$am=h?jOodu^?kw1rxXhLvQ|+GJp+ z3~4vAg}aN`g(YKBWVz0HK$?i60mLwJ*Wfu;v965c0!=AoD3&fx5q9pYZ00j}kEMW$ zi!dw^(;0NK9}i8;bbA^RhNx>uMxg$DGIXUr?YNqfCp5 zc{GHX==N&;z|40_lp69TKjimP?3Fq$}X0igI}^tJ<3Y z6!Cly7>BmeQf+s}+*b2jQZgA#N>u0pg$!)h$G@eH(@@`$wO8SO~vaF8&SIi+e|qqIFT#b3*w3)GI2B(S4D>XlC&xo&VwMC{TQ5Wxi517O1xo zXsp!LN}|WTw$PFwWwet=&gn)$&xx1=i76P4uE4Z$89e>-RTA^pY<2}B9&I>~BV{!m z4QjCSJ@{CosyzsBT?Hh9&`7l0#~O2a=4Msf9yWVkp5yH+m2mLr?S4BJ1}Gq;FyO^z zb@#~v+#Qr8a3|%-g`=Supd>mGaE!XqOJZaU(D@#WxqSuTl15+Q{)* zCp%5tCR5Is885IbBM-d6qkEZrzwR64=nVnr+~c&JY!xxEjh;?#|8+hpU`Z#8nxd!g=*v z<-@06?UAdfoD+CVtm$Q=YVw&*!pk7zCtX}%_%Oqt@^IU zx_b-PN{j(ccPWKiNidZ1f_@P3cuV1K-cYi|M_kI;OGd{eALLKVyJnU&L*F~0q4qIgBtCtW6C4y zE&6++M0%FzP5~KxYE$m8rCkF#o_otZu8n6<@Hpa6zQWcP1&Z>%nktIito0vW`BcV` zwy?2L`&F-z>#icR4Gk?Gf^GupuOY*>biGIaSn-Y4b*F>D= zvf3FK(b>jO4COR`xt!)ozI;wIcZ_PdeB!i+(_Qmmy(`I;6>4 zL7ceV&TSeW0k`q!K1NQu?bq#N;CAei!N!9dx4lI+_?3iiJ%{oK$6KP&*f`#A+PE-g!fwWDVPC^hQ1nLM< zbwnX|z_&=@LLltrY4c0bvqw1U5jR(Q_*1BgSzb$;&nO zc8c)JXLbFq<%!kptUdy}&QMo)(CQH@AL&bG^${GiF*iNfYW0cLt*ll@kaS_FS^~6s zw5{1OMr(o|gI%ZfTlFUi2$F!KF!yNmC>=FkXD`>>vtu|_V~o^pq@7sZ&g$eCSS@Q> zeY&aC8pJh6V!TXNi<(xSSlzDG$8h}+^@RbgK3yqpRq7X-MJ=Z`!8E$^Vp_8dhO_42 z`p}#BlW}J8wTzr z^7$s4l{9rD6J(M^T>9qJ`RTVY@^<$)R*8eWA<{wOSVcyO7Ke&sm2Fj89{`S@*LT_S zGQCSLr>jLd6V|oAQcOmwueojYIIYnB2tAG*Mz`r>?v}w{w+-E^-ekn6VqiB+QLClI zpXiPW4nfV2+K5iv>6$clbvV(utI; QRQ=2U1Izc4i@QYu0C60GHvj+t diff --git a/Subsurface/Data/SavedSubs/Vellamo.sub b/Subsurface/Data/SavedSubs/Vellamo.sub index 80d16c5d452c701a2d18d114cda16a28974abac8..750dc63713480c0304699a9a084e7871ba1e1cbe 100644 GIT binary patch literal 9963 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 literal 9634 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 Y?%TK9_Yct;1miFN4;$tdM)iaN0PZ`#`~Uy| diff --git a/Subsurface/Source/Characters/AICharacter.cs b/Subsurface/Source/Characters/AICharacter.cs index 19ce52209..18e4a4a18 100644 --- a/Subsurface/Source/Characters/AICharacter.cs +++ b/Subsurface/Source/Characters/AICharacter.cs @@ -192,7 +192,7 @@ namespace Barotrauma //vel.Y = message.ReadFloat(); } - catch (Exception e) + catch { return; } diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 6680a9d2f..1889b59ef 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -413,11 +413,6 @@ namespace Barotrauma Item item = FindEntityByID(Info.PickedItemIDs[i]) as Item; - if (item==null) - { - int a = 1; - } - System.Diagnostics.Debug.Assert(item != null); if (item == null) continue; diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 56392aa8f..0906250a0 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -128,33 +128,6 @@ namespace Barotrauma { if (!isOpen) return; - int margin = 5; - - //GUI.DrawRectangle(spriteBatch, - // new Vector2(x, y), - // new Vector2(width, height), - // new Color(0.4f, 0.4f, 0.4f, 0.6f), true); - - //GUI.DrawRectangle(spriteBatch, - // new Vector2(x + margin, y + margin), - // new Vector2(width - margin * 2, height - margin * 2), - // new Color(0.0f, 0.0f, 0.0f, 0.6f), true); - - //remove messages that won't fit on the screen - //while (messages.Count() * 20 > height - 70) - //{ - // messages.RemoveAt(0); - //} - - //Vector2 messagePos = new Vector2(x + margin * 2, y + height - 70 - messages.Count()*20); - //foreach (ColoredText message in messages) - //{ - // spriteBatch.DrawString(GUI.Font, message.Text, messagePos, message.Color); - // messagePos.Y += 20; - //} - - //textBox.Draw(spriteBatch); - frame.Draw(spriteBatch); } diff --git a/Subsurface/Source/GUI/GUIProgressBar.cs b/Subsurface/Source/GUI/GUIProgressBar.cs index a0b8dfcb1..858cf30bf 100644 --- a/Subsurface/Source/GUI/GUIProgressBar.cs +++ b/Subsurface/Source/GUI/GUIProgressBar.cs @@ -18,6 +18,7 @@ namespace Barotrauma public bool IsHorizontal { get { return isHorizontal; } + set { isHorizontal = value; } } public float BarSize diff --git a/Subsurface/Source/Items/Components/Machines/Deconstructor.cs b/Subsurface/Source/Items/Components/Machines/Deconstructor.cs index bc325a1cb..c501a069d 100644 --- a/Subsurface/Source/Items/Components/Machines/Deconstructor.cs +++ b/Subsurface/Source/Items/Components/Machines/Deconstructor.cs @@ -17,13 +17,15 @@ namespace Barotrauma.Items.Components ItemContainer container; + private float lastNetworkUpdate; + public Deconstructor(Item item, XElement element) : base(item, element) { progressBar = new GUIProgressBar(new Rectangle(0,0,200,20), Color.Green, 0.0f, Alignment.BottomCenter, GuiFrame); activateButton = new GUIButton(new Rectangle(0, 0, 200, 20), "Deconstruct", Alignment.TopCenter, GUI.Style, GuiFrame); - activateButton.OnClicked = Activate; + activateButton.OnClicked = ToggleActive; } public override void Update(float deltaTime, Camera cam) @@ -73,19 +75,31 @@ namespace Barotrauma.Items.Components public override void DrawHUD(SpriteBatch spriteBatch, Character character) { + GuiFrame.Update((float)Physics.step); GuiFrame.Draw(spriteBatch); } - private bool Activate(GUIButton button, object obj) + private bool ToggleActive(GUIButton button, object obj) + { + SetActive(!IsActive); + + item.NewComponentEvent(this, true, true); + + return true; + } + + private void SetActive(bool active) { container = item.GetComponent(); - if (container==null) + if (container == null) { DebugConsole.ThrowError("Error in Deconstructor.Activate: Deconstructors must have two ItemContainer components"); - return false; + return; } - if (IsActive) + IsActive = active; + + if (!IsActive) { progressBar.BarSize = 0.0f; progressTimer = 0.0f; @@ -94,16 +108,38 @@ namespace Barotrauma.Items.Components } else { - if (!container.Inventory.Items.Any(i => i != null)) return false; + if (!container.Inventory.Items.Any(i => i != null)) return; activateButton.Text = "Cancel"; } - IsActive = !IsActive; - container.Inventory.Locked = IsActive; + } + + public override bool FillNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetBuffer message) + { + + var containers = item.GetComponents(); + containers[0].Inventory.FillNetworkData(type, message, null); + containers[1].Inventory.FillNetworkData(type, message, null); + + message.Write(IsActive); + return true; } + + public override void ReadNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetBuffer message, float sendingTime) + { + if (sendingTime < lastNetworkUpdate) return; + + var containers = item.GetComponents(); + containers[0].Inventory.ReadNetworkData(type, message, sendingTime); + containers[1].Inventory.ReadNetworkData(type, message, sendingTime); + + SetActive(message.ReadBoolean()); + + lastNetworkUpdate = sendingTime; + } } } diff --git a/Subsurface/Source/Items/Components/Machines/Engine.cs b/Subsurface/Source/Items/Components/Machines/Engine.cs index 238d92a38..fd8cced69 100644 --- a/Subsurface/Source/Items/Components/Machines/Engine.cs +++ b/Subsurface/Source/Items/Components/Machines/Engine.cs @@ -12,13 +12,11 @@ namespace Barotrauma.Items.Components class Engine : Powered { - float force; + private float force; - float targetForce; + private float targetForce; - float maxForce; - - float powerPerForce; + private float maxForce; //[Editable, HasDefaultValue(1.0f, true)] //public float PowerPerForce diff --git a/Subsurface/Source/Items/Components/Machines/Fabricator.cs b/Subsurface/Source/Items/Components/Machines/Fabricator.cs index f0bf709c0..b1abfe6a8 100644 --- a/Subsurface/Source/Items/Components/Machines/Fabricator.cs +++ b/Subsurface/Source/Items/Components/Machines/Fabricator.cs @@ -15,7 +15,7 @@ namespace Barotrauma.Items.Components public readonly List RequiredItems; public readonly float RequiredTime; - + //ListOrSomething requiredLevels public FabricableItem(XElement element) @@ -45,14 +45,19 @@ namespace Barotrauma.Items.Components class Fabricator : ItemComponent { - List fabricableItems; + private List fabricableItems; - GUIListBox itemList; + private GUIListBox itemList; - GUIFrame selectedItemFrame; + private GUIFrame selectedItemFrame; - FabricableItem fabricatedItem; - float timeUntilReady; + GUIProgressBar progressBar; + GUIButton activateButton; + + private FabricableItem fabricatedItem; + private float timeUntilReady; + + private float lastNetworkUpdate; public Fabricator(Item item, XElement element) : base(item, element) @@ -96,10 +101,13 @@ namespace Barotrauma.Items.Components if (selectedItemFrame != null) GuiFrame.RemoveChild(selectedItemFrame); //int width = 200, height = 150; - selectedItemFrame = new GUIFrame(new Rectangle(0,0,(int)(GuiFrame.Rect.Width*0.4f),200), Color.Black*0.8f, Alignment.CenterY | Alignment.Right, null, GuiFrame); + selectedItemFrame = new GUIFrame(new Rectangle(0,0,(int)(GuiFrame.Rect.Width*0.4f),250), Color.Black*0.8f, Alignment.CenterY | Alignment.Right, null, GuiFrame); selectedItemFrame.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); + progressBar = new GUIProgressBar(new Rectangle(0, 0, 0, 20), Color.Green, GUI.Style, 0.0f, Alignment.BottomCenter, selectedItemFrame); + progressBar.IsHorizontal = true; + if (targetItem.TargetItem.sprite != null) { GUIImage img = new GUIImage(new Rectangle(10, 0, 40, 40), targetItem.TargetItem.sprite, Alignment.TopLeft, selectedItemFrame); @@ -119,7 +127,7 @@ namespace Barotrauma.Items.Components { text += " - " + ip.Name + "\n"; } - text += "Required time: "+targetItem.RequiredTime+" s"; + text += "Required time: " + targetItem.RequiredTime + " s"; GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 50, 0, 25), @@ -129,11 +137,10 @@ namespace Barotrauma.Items.Components Alignment.TopLeft, null, selectedItemFrame); - GUIButton button = new GUIButton(new Rectangle(0,0,100,20), "Create", Color.White, Alignment.CenterX | Alignment.Bottom, GUI.Style, selectedItemFrame); - button.OnClicked = StartFabricating; - button.UserData = targetItem; - - + activateButton = new GUIButton(new Rectangle(0, -30, 100, 20), "Create", Color.White, Alignment.CenterX | Alignment.Bottom, GUI.Style, selectedItemFrame); + activateButton.OnClicked = StartButtonClicked; + activateButton.UserData = targetItem; + activateButton.Enabled = false; } return true; @@ -144,25 +151,80 @@ namespace Barotrauma.Items.Components return (picker != null); } - private bool StartFabricating(GUIButton button, object obj) + private bool StartButtonClicked(GUIButton button, object obj) { - GUIComponent listElement = itemList.GetChild(obj); + if (fabricatedItem == null) + { + StartFabricating(obj as FabricableItem); + + item.NewComponentEvent(this, true, true); + } + else + { + CancelFabricating(); + + item.NewComponentEvent(this, true, true); + } - listElement.Color = Color.Green; + //listElement.Color = Color.Green; + //itemList.Enabled = false; + + //activateButton.Text = "Cancel"; + + //fabricatedItem = obj as FabricableItem; + //IsActive = true; + + //timeUntilReady = fabricatedItem.RequiredTime; + + return true; + } + + private void StartFabricating(FabricableItem selectedItem) + { + if (selectedItem == null) return; + itemList.Enabled = false; - fabricatedItem = obj as FabricableItem; + activateButton.Text = "Cancel"; + + fabricatedItem = selectedItem; IsActive = true; timeUntilReady = fabricatedItem.RequiredTime; - return true; + var containers = item.GetComponents(); + containers[0].Inventory.Locked = true; + containers[1].Inventory.Locked = true; + } + + private void CancelFabricating() + { + itemList.Enabled = true; + IsActive = false; + fabricatedItem = null; + + if (activateButton != null) + { + activateButton.Text = "Create"; + } + if (progressBar != null) progressBar.BarSize = 0.0f; + + timeUntilReady = 0.0f; + + var containers = item.GetComponents(); + containers[0].Inventory.Locked = false; + containers[1].Inventory.Locked = false; } public override void Update(float deltaTime, Camera cam) { timeUntilReady -= deltaTime; + if (progressBar!=null) + { + progressBar.BarSize = fabricatedItem == null ? 0.0f : (fabricatedItem.RequiredTime - timeUntilReady) / fabricatedItem.RequiredTime; + } + if (timeUntilReady > 0.0f) return; var containers = item.GetComponents(); @@ -180,9 +242,7 @@ namespace Barotrauma.Items.Components Item.Spawner.QueueItem(fabricatedItem.TargetItem, containers[1].Inventory); - itemList.Enabled = true; - IsActive = false; - fabricatedItem = null; + CancelFabricating(); } public override void DrawHUD(SpriteBatch spriteBatch, Character character) @@ -190,13 +250,13 @@ namespace Barotrauma.Items.Components FabricableItem targetItem = itemList.SelectedData as FabricableItem; if (targetItem != null) { - selectedItemFrame.GetChild().Enabled = true; + activateButton.Enabled = true; ItemContainer container = item.GetComponent(); foreach (ItemPrefab ip in targetItem.RequiredItems) { if (Array.Find(container.Inventory.Items, it => it != null && it.Prefab == ip) != null) continue; - selectedItemFrame.GetChild().Enabled = false; + activateButton.Enabled = false; break; } } @@ -213,5 +273,39 @@ namespace Barotrauma.Items.Components // selectedItemFrame.Draw(spriteBatch); //} } + + public override bool FillNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetBuffer message) + { + int itemIndex = fabricatedItem == null ? -1 : fabricableItems.IndexOf(fabricatedItem); + + message.WriteRangedInteger(-1, fabricableItems.Count-1, itemIndex); + + return true; + } + + public override void ReadNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetBuffer message, float sendingTime) + { + if (sendingTime < lastNetworkUpdate) return; + + int itemIndex = message.ReadRangedInteger(-1, fabricableItems.Count-1); + + if (itemIndex == -1) + { + CancelFabricating(); + } + else + { + //if already fabricating the selected item, return + if (fabricatedItem != null && fabricableItems.IndexOf(fabricatedItem) != itemIndex) return; + + if (itemIndex < 0 || itemIndex >= fabricableItems.Count) return; + + SelectItem(null, fabricableItems[itemIndex]); + StartFabricating(fabricableItems[itemIndex]); + timeUntilReady -= sendingTime - (float)Lidgren.Network.NetTime.Now; + } + + lastNetworkUpdate = sendingTime; + } } } diff --git a/Subsurface/Source/Items/Components/Machines/Pump.cs b/Subsurface/Source/Items/Components/Machines/Pump.cs index d58a9c465..1baec41b4 100644 --- a/Subsurface/Source/Items/Components/Machines/Pump.cs +++ b/Subsurface/Source/Items/Components/Machines/Pump.cs @@ -16,7 +16,7 @@ namespace Barotrauma.Items.Components float lastUpdate; - Hull hull1, hull2; + Hull hull1; [HasDefaultValue(0.0f, true)] public float FlowPercentage @@ -82,7 +82,7 @@ namespace Barotrauma.Items.Components ApplyStatusEffects(ActionType.OnActive, deltaTime, null); - if (hull2 == null && hull1 == null) return; + if (hull1 == null) return; float powerFactor = (currPowerConsumption==0.0f) ? 1.0f : voltage; //flowPercentage = maxFlow * powerFactor; @@ -92,11 +92,11 @@ namespace Barotrauma.Items.Components hull1.Volume += currFlow; if (hull1.Volume > hull1.FullVolume) hull1.Pressure += 0.5f; - if (hull2 != null) - { - hull2.Volume -= currFlow; - if (hull2.Volume > hull1.FullVolume) hull2.Pressure += 0.5f; - } + //if (hull2 != null) + //{ + // hull2.Volume -= currFlow; + // if (hull2.Volume > hull1.FullVolume) hull2.Pressure += 0.5f; + //} voltage = 0.0f; } diff --git a/Subsurface/Source/Items/FixRequirement.cs b/Subsurface/Source/Items/FixRequirement.cs index de2441b78..91dbbf812 100644 --- a/Subsurface/Source/Items/FixRequirement.cs +++ b/Subsurface/Source/Items/FixRequirement.cs @@ -81,7 +81,7 @@ namespace Barotrauma private static void CreateGUIFrame(Item item) { int width = 400, height = 500; - int x = 0, y = 0; + int y = 0; frame = new GUIFrame(new Rectangle(0, 0, width, height), null, Alignment.Center, GUI.Style); frame.Padding = new Vector4(20.0f, 20.0f, 20.0f, 20.0f); diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index da8271979..b40326d1c 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -228,7 +228,7 @@ namespace Barotrauma public override string ToString() { - return (GameMain.DebugDraw) ? Name +"(ID: "+ID+")" : Name; + return (GameMain.DebugDraw) ? Name + "(ID: " + ID + ")" : Name; } public List AllPropertyObjects diff --git a/Subsurface/Source/Items/ItemSpawner.cs b/Subsurface/Source/Items/ItemSpawner.cs index dcf6406c8..9ee491204 100644 --- a/Subsurface/Source/Items/ItemSpawner.cs +++ b/Subsurface/Source/Items/ItemSpawner.cs @@ -15,8 +15,14 @@ namespace Barotrauma spawnQueue = new Queue>(); } - public void QueueItem(ItemPrefab itemPrefab, Vector2 position) + public void QueueItem(ItemPrefab itemPrefab, Vector2 position, bool isNetworkMessage = false) { + if (!isNetworkMessage && GameMain.Client!=null) + { + //clients aren't allowed to spawn new items unless the server says so + return; + } + var itemInfo = new Pair(); itemInfo.First = itemPrefab; itemInfo.Second = position; @@ -24,8 +30,14 @@ namespace Barotrauma spawnQueue.Enqueue(itemInfo); } - public void QueueItem(ItemPrefab itemPrefab, Inventory inventory) + public void QueueItem(ItemPrefab itemPrefab, Inventory inventory, bool isNetworkMessage = false) { + if (!isNetworkMessage && GameMain.Client != null) + { + //clients aren't allowed to spawn new items unless the server says so + return; + } + var itemInfo = new Pair(); itemInfo.First = itemPrefab; itemInfo.Second = inventory; @@ -35,24 +47,91 @@ namespace Barotrauma public void Update() { + if (!spawnQueue.Any()) return; + + List items = new List(); + List inventories = new List(); + while (spawnQueue.Count>0) { var itemInfo = spawnQueue.Dequeue(); if (itemInfo.Second is Vector2) { - new Item(itemInfo.First, (Vector2)itemInfo.Second - Submarine.HiddenSubPosition, null); + Vector2 position = (Vector2)itemInfo.Second - Submarine.HiddenSubPosition; + + items.Add(new Item(itemInfo.First, position, null)); + inventories.Add(null); + } else if (itemInfo.Second is Inventory) { - var item = new Item(itemInfo.First, Vector2.Zero, null); var inventory = itemInfo.Second as Inventory; inventory.TryPutItem(item, null, false); + + items.Add(item); + inventories.Add(inventory); } - //!!!!!!!!!!!!!!!!!!!!!! - + } + + if (GameMain.Server != null) GameMain.Server.SendItemSpawnMessage(items, inventories); + } + + public void FillNetworkData(Lidgren.Network.NetBuffer message, List items, List inventories) + { + message.Write((byte)items.Count); + + for (int i = 0; i < items.Count; i++) + { + message.Write(items[i].Prefab.Name); + message.Write(items[i].ID); + + message.Write(inventories[i].Owner == null ? 0 : inventories[i].Owner.ID); + } + } + + public void ReadNetworkData(Lidgren.Network.NetBuffer message) + { + var itemCount = message.ReadByte(); + for (int i = 0; i < itemCount; i++) + { + string itemName = message.ReadString(); + ushort itemId = message.ReadUInt16(); + + ushort inventoryId = message.ReadUInt16(); + + + var prefab = MapEntityPrefab.list.Find(me => me.Name == itemName); + if (prefab == null) continue; + + var itemPrefab = prefab as ItemPrefab; + if (itemPrefab == null) continue; + + Inventory inventory = null; + + var inventoryOwner = Entity.FindEntityByID(inventoryId); + if (inventoryOwner != null) + { + if (inventoryOwner is Character) + { + inventory = (inventoryOwner as Character).Inventory; + } + else if (inventoryOwner is Item) + { + var containers = (inventoryOwner as Item).GetComponents(); + if (containers!=null && containers.Any()) + { + inventory = containers.Last().Inventory; + } + } + } + + var item = new Item(itemPrefab, Vector2.Zero, null); + item.ID = itemId; + if (inventory != null) inventory.TryPutItem(item, null, false); + } } } @@ -66,18 +145,55 @@ namespace Barotrauma removeQueue = new Queue(); } - public void QueueItem(Item item) + public void QueueItem(Item item, bool isNetworkMessage = false) { + if (!isNetworkMessage && GameMain.Client != null) + { + //clients aren't allowed to remove items unless the server says so + return; + } + removeQueue.Enqueue(item); } public void Update() { + if (!removeQueue.Any()) return; + + List items = new List(); + while (removeQueue.Count > 0) { var item = removeQueue.Dequeue(); item.Remove(); + + items.Add(item); + } + + if (GameMain.Server != null) GameMain.Server.SendItemRemoveMessage(items); + } + + public void FillNetworkData(Lidgren.Network.NetBuffer message, List items) + { + message.Write((byte)items.Count); + foreach (Item item in items) + { + message.Write(item.ID); + } + } + + public void ReadNetworkData(Lidgren.Network.NetBuffer message) + { + var itemCount = message.ReadByte(); + for (int i = 0; i items, List inventories = null) + { + if (items == null || !items.Any()) return; + + NetOutgoingMessage message = server.CreateMessage(); + message.Write((byte)PacketTypes.NewItem); + + Item.Spawner.FillNetworkData(message, items, inventories); + + SendMessage(message, NetDeliveryMethod.ReliableUnordered); + } + + public void SendItemRemoveMessage(List items) + { + if (items == null || !items.Any()) return; + + NetOutgoingMessage message = server.CreateMessage(); + + Item.Remover.FillNetworkData(message, items); + + SendMessage(message, NetDeliveryMethod.ReliableUnordered); + } + private void AssignJobs() { List unassigned = new List(ConnectedClients); @@ -1305,16 +1328,7 @@ namespace Barotrauma.Networking if (assignedClientCount[i] < JobPrefab.List[i].MinNumber) unassignedJobsFound = true; } } - - //share the rest of the jobs according to the ''commonness'' of the job - //float totalCommonness = 0.0f; - //for (int i = 0; i < JobPrefab.List.Count; i++) - //{ - // if (JobPrefab.List[i].AllowAlways || JobPrefab.List[i].MaxNumber == 0) continue; - - // totalCommonness += JobPrefab.List[i].Commonness; - //} - + //find a suitable job for the rest of the players for (int i = unassigned.Count - 1; i >= 0; i--) { diff --git a/Subsurface/Source/Networking/NetworkEvent.cs b/Subsurface/Source/Networking/NetworkEvent.cs index 2d767393f..c0d4e3a5e 100644 --- a/Subsurface/Source/Networking/NetworkEvent.cs +++ b/Subsurface/Source/Networking/NetworkEvent.cs @@ -167,7 +167,7 @@ namespace Barotrauma.Networking } catch { - int afghj = 1; + } //+1 because msgLength is one additional byte currPos += msgLength + 1; diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index f7e7486de..bad6b2348 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -19,6 +19,8 @@ namespace Barotrauma.Networking StartGame, EndGame, + NewItem, RemoveItem, + CharacterInfo, Chatmessage, UpdateNetLobby, diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 87d7d2a575166843fa370235263108cc2a153f73..a2b07312730d929e822e2cf7aeddbec847837602 100644 GIT binary patch delta 14579 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 delta 16131 zcmeHu3tUyj8ZWcf+H0@J7Pp9qh`2>W5=2B&GSUr_si7jGnUUcG%NHV|shMo7%*YJc zw!a=$Xtpgi!$*ugj_u6Mtc=Xc%Dhyb&dEB)@t~QR-2dzigq>dJ{JQu4?)}}x@6R{$ z&8%57-^_gT%{Q}MtNOXt^{YtBn9hQN!h?c>E;cqcf&|GxB(M_vdBFF;94RQs0^TCf z1;9d}FK`RcLE66T6tmdd9dt7HJn0UWx$}%^LYh`UILq|%03@CsFPys8T0Xkp+CSU{F0Kq_8zz(znLV)%_D9`~213CiX zKqnvq=nO;xU4ST{D}b7mHg-cG8t4wh06lJ9DNA>s34V{p^i#UKlO)~U&^BSGBfPGY=cMw@e>;dbq^Q3mWKo%47IJWFA?HhO zZ&*}+(ZD|{Vxbd-h{s9p^I@BRS;ktkjH%r{Qs_>5nqArHxDdm%T=ds?phZURk{<)| z&Ax=&@FRqjQD^=qa=p?{`$-$Ib5!<@+ug2-(e4eeL~B2ySTW;UKFCWxmRB)KE>Z{W z98`NEo<|>J$C=yJ7_&3x;su=?vsrhUeJ|1Ieo7C~VN^1kjn;!MprDJb>qrfP&xGh2 zFX5NWVg9jWNz^b%-QR~_#-j~(yp!8?F2?OmiEs}JRe9z#R?W;I&`!uC9{Ma%UrgCo z8VP)3EX%WcYZR#_i8-RUV+pH61t&)H=xlaT=8k2E*NkV5U=iHNv^;!%dh04!-cV5> z|Gt3rRH;g13Xjp)F-9S;7!|ytkQJFVOQaJl@;s*E55NV$(yS;EmJz0T@9BMbpQY>! z+Zi)Tkvxf7EFa}!hsSb9uBgBV%%QrgoC<9$VGd1bPoXtiSdypZ9q#vZw1~4|4mRKz`tM>%|hA^#J{1wm2%f?C!!A`OAKgR(3?O<0CyqFONc)S zqyx_aM}RNDuLVkh4Tuj1wgTIMc)Ukdm2%9?U5NEZtRwI^!WZ%3Gk9Y%!pndqz;?t% zr3N5uN4|f8>Y&F!yMsQ1cY={81L3Oy7x*0!zXsu9z!QkiVwC8Xqf4(xd=uhhK!<{s zA>Y$@e+c5ifS3@^fwvn-MEZCj3%CRE^*{pBC14P63j7A}4g!4;-;HwO!8->G1kVcI zM(~y*{w)wG1<^ZhS&s`tgdy=}P|>hz&=tTGzyba^(4nBT{wcL5?$qd7RM(zdT#libgVIL#0V#nR4oahG$ki;F7Q88qRj$NG zTl#_;-jotHIVz=4a)iinE$bRD34va9uXlypJ2 zw^d7bwe8SskcqJqoLhbMOziIuJ<3HZ@NcZ$1 zubo~zhCX|db>OR)%f(pw=P{_(x1{5&rbt=K6j3{RaGsJ9DneplEChtcS|q+*H&1b} z4fM(=c`^Bp>%I8KS}D&;-JZ~|perJkH|-WBCa2_$1ZPrn^d|c5A9M-f5xyH|9xF(3NrMN<%(o^~{t)|92`UA&mb@If)nlOywkm=2uQ_ zE>TYW$M&)!(ehj=lDh0Qr?Q1qcC9p+`}Uen<_*V+uv(E|Li6ZI`FI<4C#B~~H&X3% zEsn1^B`;xX&2&oIXE7*$x*E&pCCK;7Y&E5iQx;I+^OlIVWlNv_Eb~}$efj2);xScj z_n7@1_^uU77Ng4Lx|2JT37O6%l>Ulw@5z7iw(Jy64c7@ z-6XB@R$$F`$>^q4@^QIln*@z}n?wtrmC9*Tg(3E!L#g^vOAIxZ8_|@t#zTjgful9V|woB*u6}hb>K9=5n$I_7;BUL-^xmErMO8iX;3s@rCsEEb&rv;)R zk-ej{Wbjfi<@aG&#Uf;h9AkuiyhA>wds0L@H_O-#7AwXGK4OntBYT4-$-7V1JWG{l z?Y;vOr@Z_^S=8_@@@EZYN6Tn(9t-8~EmeA>|F6+e^F#73)0>TAi|m&++bF z@Sb*$u?=pcfD;V}(X4epYU@}^NHY<;1N1RKOm6YCLHH5i5U>p8jYOWFKsmza0R{Yj zfer>0`THXLKvVb$eDfNF2a2zNZ-8clHvqIZAXeEIk-moobqK0NU=(l`_#Bx(1a%K< z6Ioh|Ko}UWgBrjbz>89*pafxWB?JEePkdcGVnbAe`1{Dy+=@U-V`CxG1n(uh)65fe zF5+vNcp|;|Jh4X``n~$X-i&|jeSKoj zL$PAjZTW@~N>`Ecsz;Mcqhku(JiT0gnR#uB;Z>p9$24jkscN|;g7*zq-odwSSBBY_A6<9Z#LE5NQ!Af*J|aK+ zC7S$()Pc|0E4!IDO3^&~OemnOtP@Q-Xo<29`S7)U=O!HgXKmN_^!!!3+{8L5VO0H$ zCERA4+9P!BjrHm4&wh;-x0MG|#tr6p8vmNvi%IToQkbomFBHudPv#b?+ii9s-?b>c z+kM8B{K`1xuZ$c%DdzVSD~DpWu}IOQ5_ZiBAi@?NTnphC3pfE2u@ z>JG|!R!(gvsyG!1(|`g1)^j136O|u3dumJ=%`@fi7(xa&vXrwOJ%3j&C>a>Pp0AY1 z9>WkA4vYY<1;qRt33{N_?5U*muarC3Vp{(v_Ghg z#GL$3v{5>yXtOpF`rwafqdMe+Hk$N{+DLd?B7nhwsJp1pI=pZh;=iS&MBZj4T;T=`F_eJ0#s|&zyYE$_q1! zr9oRRe6zW_ASAGeJ#q+ZuDkEiuDt7XWfHR=pgB7&w_jg+^5C$mYC0?#>(52&Z&q%? za{bC*#55M>oa-&c#aM~o${@!gHH9y5Dfh~hK40%=U!Jn8Ht2VTzNzG#406f2{b~MLQ7(m^K1+)=&6+2rh_$JXbL zfFhj8FhblLc{W^z@@SbQv~nUg%$934aWs_Fx&dw8$J`ZeTJdBz2@%V`d+r+=ALCV? zZA0z0>K$l!4_G%>gvqb7yTneu(es%C-}A#T+KwuF8Rc}*LmvoLlC;h!M!3UUYWiFW zy2s`~!yf(sV^k!SO)=tm{0qwa*2+)^#~!|pdD5g%yHEoHE0IZ19+M`)XPDf;B6;L~ z0>BQ3#(P@r)5JLk`sTbOtA}HGGG8R15$2pKh~c++n;+RawkrmKOCET zTWIp%M-K=Yd12Q5*A3hBCRc4&k1Ys%=^A`VAt2al07c8V88VBP<|pM4Q&;4KWHcP zrUrxqf+wE$n$iQY#>V%X;wfv&y0gSJW$immYn5YfQ>pTrvd)%+h>th>Q3vJGQmv4ylzqz zyzy~t2))Y`$vZ)keo}Lu1m#5Oi%o+|45~d%;g>;$pIZ#sSDSeIKwks)1Fr)IfVTjV zM?8lRej7LpyaUt%?*c~vQT7L*Vzm_0;X~jk@UaC>{&IB9Cx{#aJ_U{g;)OcUF91=v zm?U2U&67mT+~%(QC-~nWE@rNnv0|2{Ae;z@-Hn(%VxCUM6!{KeQMP!_A^g1s=icWL z_yM>81R+x(Iq?5d{p=|cKJWcf3{%A6S&MR}lGmkGo=gTUyivu8N|6%B*tOJcp3*ro z2N}h|Xf7}g5Uba9fT#xL&r=fo`nsTr z-S|@j#vi}+O2x$z( z;v?vfoK2Gc#XL``3Rm{27Y5g4SgJ;c7l@Yr>{--jXnUCWp;X_^qVXeZEK4>~cCcDZ zzROi7yNk1dYU8zHP}1qk^bj7hLOsR&Ct5afq9ugk7fAhWQj%Y^GPF2FZdPjpzTNuG zYN(!pfj$HnLw&zg2Jp-+>Pslj$I5y6N_8Qt*`S6qHd<)X?v(a~y3cb8D`^Imol*u1 z7k<#yBZuZv`8rFgb;3LND7w}9t+Lqjtr8dhMgM1vC&ySvY{}0npZ=FrF0vQG{Xwp8 zl{9|gTSZa5S;M-rRWL`<6)JG&D#g#mDuNEEgv(Ql4|SE z`&Xz3Wy)=5v2*(Ywf;(PhQ&t3pI8!k;yU#(PWPU~{&M94OD=7ThRbaAC`-tY@TbKf z`q{JcvT4DWh&LgI_Kwk`c+_L+=Zvb(8sVNnnw`fzr5;7JpB6!mIchME+o2wn$#K6H zLXKg&!ozl}CuMTQzzJhlto4j4W{KV?w4Rb_M~xOqMOUjTt^Cju#ho=4UmI_+Ribv| zVFE_%vwYcs4!@ueBYU+T%JWLB8=3cG_&ua9XoT}>DUoL^wC<59XOlIAvhTq8LG=!c zLRlYKLa2U#kwAqLr4TAgH&m+V4dJ;yx40NdPijd#X^FL#c~4lP+{KG0P|=4B6`7=~ ze92PlO2#Egy=Wn6yxO0fd1!O)GV4|dc%@|`O*(1WP0Qw561e@eWdq}NhU#cb88dY_ zvCdf?JY}`@5Tjv=QS!h+7Q$D0t&5nq+Nz-4>Ih0&t!Z>>wcekvtU&?=Kd*1#8$Pg3 zf(W^mOhxfVBp-F$x`R>n8f6lnblSS1Ezi-_)r?km#^BDGqectoT`!&`X}ff9q?k+F zECcD#w|WH6wP{;r3j0nU&&P*on{{%fsc37IR@;#dms?6i#qB(8wdEw^g$}h+cSp~P z<8l49qix*zw<46S9W`n1EK4uS@2n<@#w}wt!Rkwl^2b23b=@p``GiFEtl_q=jHN?q z=(;6OYAeKaTcI_|-i>f57CnZ(f9D>>&ZA$_VDQ$BRW+&@iWzNtOKZRY$dwR}&=Yt{ zt@akgI#0@1B^~D zvtlT3LmK5s+9=A;QU~!>C$thIU8hZ;q-An41y>m=uh^p%F*@?5KAWoV!vJ6MrM5z* zkiO<@%D-8S=Bs^LG4r0(B=26}lqONly(a3lPph}k;h`*%25*uh`G^Ls#uzAJ!92yo^VJz!l>wWy%*K(G!&kAL=*G%Tg2hrPT=D;eY1r^#v3VA zn{9UF*B;eis3nb)meYgJ8aBTAm{u%PWm`-ahXTP&uiKB?OGX+``$pRbUyN?h>B(A(C&vuuS@qg3 z_&kSbQ^@fzEu1fj(^qt&q8v4p)(t~vIx}@2b35as$i7=udCV~Vm`;`HY6NAEQ#H5m zt~fs8v{u8sIcW8U8`NaF|Cns2ZTleOVdu5ojCS0jg!0f_{TmB8&syQ0&(nPtO7dDU z56blo7FwQaW>VYpEQ(LLpgqQD`EBY ziEif^Lq&Q;hAo=vpM_2>`oxIf!zSvxndfn#+otICoxDeMjdqMthm!Lvq~k(*TG`CxX>NU=okCvJGN^hdN-V8a9K7(DUdh}U_ZRcxjrwZ& zfnp5~;^X=Yki4X((pxi4gItm3BL2ct`avr{U9AUW5X`qizwgoy%k=nrGR{_C&?nd^ z`ffFY>|^v;eoLMHV0SS+dXcL$s(30M{Wn52YB0m5={elDU$2IoLX3-6cXp|b+aiqy zoe~~H{`?FKmOWz1WyKlj|L9blN~}1b|D6##Cu0irGCsFb)y+`kn8Fdfe~NJsGjD^I zN+Yf_L-_84dJTGZoQ&1Jzi~t-X{X`j+up)hp~`ol#(Fu858BcB_FAI&RwTKy^+-NF z*LWCpt5DM@ag5oEA33ByjFCCRz{-(t)Z>u!HjMb-Vgp_H)>LgPxl~IeRlT4^^OMVs zFqwR7^+8m<)SAF&t~5N%^Bfu+zRLJJbiiWFH__M^CUm17-5V? z-HtP1X91FI5k>=s#Z(gljx`Q5&rRk)8klUPcpoz)I(&nfNQq|+FJ<&I_R!4dEU`Q` z$G~D-_bBwVR%?Xwfwvg@abw7%XV5zvBnOU|g!xq!G$d#sjAw&Mlr%|Crb7>5Nzd^b z+Zb(FWLELu1qLSL;SNSD)xCjY20dk96Tf_%nnG10RhxhE@I4ESYUbT+D3sY*8$`Y@ zEJ^&>A|pYg!wZcxs@SG!JnJ?in$@f@d@T4BOjdkf?8D8Vz{v|PI5r)@Y`NDgXG7id zhK5nqaXr#gZZ2a5MVfyVj7r)kXw` z2MYt`E#q_D>p}NO^_D1dp2uZ{q%yTXcYR>EOsYF?jiKrrwQzPPH7?LUX_|cZNufOT zZ^i-5`yj;m`7$gAgX)dFvS+axMyn)K<56b~7(R8o(Ibuz^cc!6#fm%ays-}EPA0Tq zb+H;uqaTASK20+B$+Y(%td#0UjVzwO&ZvUjagUCvX_zM&?RrQoL>mk!st}K!&9iN0 zwd}1j6*~QZzLu}Go3rJb&y7Tx64TAYbb6fzZ5V1EY)eX`4h6ekkK=n{aC}Bp%ZyYi zdWR+PTjEUBpzUXj(Nx9FHuTVZC7AuP&~T)a`HT?fLVEKR^Kzn1PGo;#zk1U{TT!iUqT-PpMcil-LjjYKyG66xJ-X6LTr zNI&p|`^4=R@d%d^Mznb7vk3iiy*bY}^w~_gD^-k#d5)cwI2XuKj0d@Ty?G1s9}Kjo zoJaKp&naAR8Ty{N#Pfk!M)^0v+`F~WxQEKlu~@!#qB$Ez*W+p-xvrJcsn%;vBAmy@ zJn#UP{`6dPFq=v2L7c@c-)`<9S1!Dru2G7@?^MkT66M^8BkY+0Zyk#@OX+Y7?A5|g z%p9o4G(D2OSpr4pon%hL9hM^N2(tHtN*h1L442qMDti&zh)IjFGM^f6hR_X8GnU?c z&AgVfZZ}hKb49pSaW%*Eu}?53)d5uWyn!7;ffh`Tewg$}rkM|0JejCcHBOuroZe>_Sb{-fwy?9}|{ z=6(k?Wt=q@QbJoL(sP%o(Zl5^{gZo*9#r==4zz{mNI_Qp*7{^T5+%R52#Be55tT5Db;=Qz_R6lCCT#dxZ{&2-SMdFC7LoMSGwj>@`8gP|=o?_;Lo z4(a6#=5YT39PxZ}I2}%Az3BK%8RpMCYYI6ZQ4(m|2v~8)KQyPfD~~z3tJrig zPqFEgo7|+m?Uta-%`9_Z68>&WN=h9P$m88$Dm63mLzsbwnDl8nx@hsT;sVM~u z=WmlE7+QwbKW&TX)TCruCFS|UzjQOho@#UcEA`z)YkIvqqVHe6I(obRw31HTZAPkr zFZ-Ry?aIVh^*?nlSAg2c{xX^)S{L4`YI*Z-nK8X&{(?DkCKoUE*E6c^Siu?_V4;pz zUOg~x?1Cxt7ZgvQJarkd;c^BQRcT>V`%gWVN*^%O6AFIHfM7snwr)-95=HewYfc!6 zECja^ll)cOMp55hkrh{pd^tIbn5*Jq7Y*FGoAmv?ZNm;;k3X31iI^T|H9R=>C^r+95gg%q4Z3% zvtx5h)BE_gHicU)U${@xVD#+pb0PRgHur56Q{`Qs(uW2&7z2KLFg30CwrK@Z7Ti2_ zZsGj7v;D^@@wD(MbF27w8$Gkd?92YZ1QK1hp_MW5`(s1Vo0s~3uRy!DnW9cZ0(ELx z@Y^@Zt#x8xLWv)T1fCu~art!;t+{9nsM!TA<9Du!G+NVO^l1OHIX)2cN37XST64z8 zq^GyQ#Ce9BZ39{*k+$qMyS8g+(JG2h{6YssT{PxW(oKquuKM1%obG+zyfN%dORnBN z@%tUjlRu<;+WxFcezg2Nuhn<`l)!yOp+)g3|0!v=tvs2&rA&%x56O(6=T)YQE~pZ z9qM{b2u+Bz*&Yhx&J!@hYeu0d%?a|Ndws_ierOiRv_rinxlNEj9pc#pK4G;tm z{l@$T{*f?cc1vp))xh|HQ|Fus?|1!PxLi;DU@qq##Wqv+8aC;-ucQ8k(L<2IK4KS* zuK$JMLJ8+hEe2-IAG2EgBIx&fB3M38?51tDLyWSnv{n9GPR94&xXe#xcsCMcr-kO56 zxk0lLnt|M-P(}${N}`Ne*lf=ZnjEwkyy75n=P!?5vDw!1y3sZ`RS)a7ObQRP74jXS zwv^!ix7(XxZSz&rf-PuAe{b-K*V!srn;dkkP|1Q0^e0fv^|rH=(^>B?oTH)q!BpEV z%=?rr^3q+?Ve@UHUBd7SRQ%fce-V