From 9873efd5149c28cfbf1bb16b1af3b242c2a88693 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:49:39 +0200 Subject: [PATCH] Adding intellicard functionality. (#32347) * init * im so confused * clean * sprite update * :| * further attempts * be blessed for it works * Very prestigious pAI * cleaning up * Intellicard in RD locker * PAIn't * .Clear()n't * .Clear()n't for real this time * Cleaning up * Whoopsie Daisy --- .../StationAi/SharedStationAiSystem.cs | 8 +++++ .../UserInterface/IntrinsicUISystem.cs | 10 ++++++ .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 29 ++++++++++++++++-- .../Objects/Devices/ai_card.rsi/base.png | Bin 4432 -> 6812 bytes .../Objects/Devices/ai_card.rsi/empty.png | Bin 4292 -> 6697 bytes .../Objects/Devices/ai_card.rsi/full.png | Bin 5121 -> 7638 bytes 7 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index baef62c3da..7eef20cebd 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -285,6 +285,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem private bool SetupEye(Entity ent) { + if (_net.IsClient) + return false; if (ent.Comp.RemoteEntity != null) return false; @@ -299,8 +301,11 @@ public abstract partial class SharedStationAiSystem : EntitySystem private void ClearEye(Entity ent) { + if (_net.IsClient) + return; QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; + Dirty(ent); } private void AttachEye(Entity ent) @@ -330,6 +335,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem if (_timing.ApplyingState) return; + SetupEye(ent); + // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); @@ -351,6 +358,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem { _eye.SetTarget(args.Entity, null, eyeComp); } + ClearEye(ent); } private void UpdateAppearance(Entity entity) diff --git a/Content.Shared/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs index 2d8c5d1480..b16492b835 100644 --- a/Content.Shared/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(InitActions); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnActionToggle); } @@ -21,6 +22,15 @@ public sealed class IntrinsicUISystem : EntitySystem args.Handled = InteractUI(uid, args.Key, component); } + private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args) + { + foreach (var actionEntry in component.UIs.Values) + { + var actionId = actionEntry.ToggleActionEntity; + _actionsSystem.RemoveAction(uid, actionId); + } + } + private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { foreach (var entry in component.UIs.Values) diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 82660f8f13..1cc97c2401 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -261,6 +261,7 @@ id: LockerFillResearchDirectorNoHardsuit table: !type:AllSelector children: + - id: Intellicard - id: BoxEncryptionKeyScience - id: CircuitImprinterMachineCircuitboard - id: ClothingBeltUtilityFilled diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index c9164b14d1..9f7e206c24 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -71,6 +71,26 @@ title: comms-console-announcement-title-station-ai color: "#2ed2fd" +- type: entity + id: AiHeldIntellicard + description: Components added / removed from an entity that gets inserted into an Intellicard. + categories: [ HideSpawnMenu ] + components: + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Binary + - type: ActiveRadio + channels: + - Binary + - Common + - type: ActionGrant + actions: + - ActionAIViewLaws + - type: UserInterface + interfaces: + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface # Ai - type: entity @@ -82,7 +102,8 @@ - type: StationAiHolder slot: name: station-ai-mind-slot - locked: true + locked: false + disableEject: true whitelist: tags: - StationAi @@ -256,13 +277,16 @@ # Items - type: entity id: Intellicard - name: Intellicard + name: intellicard description: A storage device for AIs. parent: - BaseItem - AiHolder suffix: Empty components: + - type: ContainerComp + proto: AiHeldIntellicard + container: station_ai_mind_slot - type: Sprite sprite: Objects/Devices/ai_card.rsi layers: @@ -361,7 +385,6 @@ enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface - type: ComplexInteraction - - type: DoorRemote - type: Actions - type: Access groups: diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png index 244183c078c3d580cda31d0431ced9150a7cf7c9..535f5a48e99f6bf7fb5e384259378c9f21082c70 100644 GIT binary patch literal 6812 zcmd5>TWB3s6rH5Tq=z(yHmIo8+XpIYW$rmM=gd^lv`w*5h_)0-MKSj=LnBtB4chj{ zv`wXAMJ*}?MbwIdA3>@g1!-+JHaW-8aVBsbd|$x$)zh53M&vr#3Rh-^C9OL_oYK4t`e?O6t+`D3Ix`o z2$|!loPwb%RL%)pN8$}YAz;M02t{D$L_r~ls96}wA~}<&Eb7aG43wZbMjpThs)>il zMH7?DHIotyAo7}%7bOsULZZQuFbAQc+vde+rzna1a$2bQsi9jIF2mi5zP@5 zk15oLvPF)EJXHGPfdX3|XkUtls0g2aXi*7;C>qX-kpsMiLM)ZTWL9~+NP=iS;*n+o z8i*|-$EB}qNb?bd0L)^h2n&Zx7mP?VQUW2-&j=zJ;?j}y((JYCpcGvO2?&@hLRf4> zVsy+9=*sZms85|VJd2`Jj$eXLjHwVN*Rw^c4r$A;>VbaqE$o)(v*aftGP&VoHED2}HhwHnjRir$W1x4FI zCp_YWGscI45C!6z&X`Va&h;8Gj%~GDX8LtWq#xB5DNOh#xkC&!Q>uDw^XSZQi7hii zsP{J(7Xh!UO8Ka43b|gKK2^&PRRCch=~K1jKQ0J(M+RLDL=5PJK-|dx)B_xqO(%G1 zm+5^L*EqP*4s&ph*$@XYNHm>E$aAtQsd(s&V9_A~1Jpu#GQDwO=!*bi3fM@=X4PX! z3~?USYcSn0LUY#>JR?FC8Njx1OG+1JI$ z6mtqv^zyK&Vv%kZCYo@A3lGCdTA;c^R3$YU{;} z8WCeUm^;!EEpvxa5~&6lC1MhY=v@O4eNw3KshU1n>5rjG;agA0M8F;#KlKRyjndlN zvub1ip2EQOEz1_$8@^wD{>*>g_}JLDgV+4laV%K>Z1d>R32TX5^3EH_KcBeo#KBf? z@$uD%#xt+HzG7$7fdlU~KfnE^kgI{$1a)&7FtmceQTnvpR2SdFbhGd*6|e?|(cgESesO%HzprPw^H*!{p2Lgo zI#lS+EWd8ymY$DVZryc9_t8x2$cMYzj*PAu8SQ$td0=p-_5R~+BNONEwT^FNOTX^O zsH+D4z0lwH?!4RQH!Zc!uNld=?tAIj=C<~~J2PW^|Jm-1_Q_9gTiE%;;@$1v{BU#k vC%x9_kE3sXvA3=3#KD2Cea)Sg_4A@9m#%wY#e4YIgVnpXuV-xaz^?xR&po7i literal 4432 zcmeHKdr%X19$$12&o1Gq!oMKz-D(7_8{4~yO6+) z8pPgtR!=;9jcu{E_-Ko?w#*HsqoUxz**PD0^`>XVO3|VRC)2ZMTfB0=4ezk_YavbVi1Qt58|_5Zu};9R*?@>4$wh z=VD74Sgi0dFcV;15ES^k$9^NK4U2sIC?>J$Kw?}6oBvjV_}FQFqkh1eDs#V9_5SI? z%X|X77b&~yI$332v$G{aUX}Xu^rdU<&(#&)zZ2cLx?i95HhSwpnQ?B<{ii>v-P4_4 z@a|UYcmFt$ySe?%H?Lku+O=}m!HiaIpDI>+?T+z$%eklGkI#MaT3Pw*vmdTJb2{tm zEeDG!+UMF|9PHS0{-&&KRpa;3niTilO^(9Ov!;RMU;J|E`s;>j`8o&+t7gq+yVYzS z%Liof>ZU!W>^6JMOKbCwW-d?chkI&{5T731Vc5Ss_FM+LqUnCoS6ykvT{ZR126^M0 zh%K@2%u`%yA)4h|KcBz-gX-EhUfvrh%qw2-MfJx+h6k^;ZF&@z@zEuR0EeA8#L)TH zQ}zu{$=;1b`W+jb$LcPjcW-}q=AXB}82a^2cg3wCA!@~v+OX6;hI3*Y(hb+$Y!WXG zwJ&&KUrdkCv#dIP@#fx^{;v|g+|f4c^3J$#`;8m76*N3N^;t*5Z%(vp+H*5MNiIxo zZt!*YG+ckB;l?vt$P@J^dz*7~e~8&%vnm{+wYlcRSZ7m7{lU(zimtY_yWePf|M=(U zWl0^g;_Zv@&4X#*n11zvG0|U}VJ#ZG@Tat;!B)i;_S1hqI_2@_K*Ji}(XSuxO2Hmk zE8jVuxjQ(R;@f!hTCeGIJ|b>Y*Ag?oIBlO@A$#C{Xv-|>jg5Oz`0~1`S5A2WY!;7PMD^Z4E(j9tBBrPDT;%_(0!5 zkTEUbBdHQbgq@6=^_q|eADu;DmNp^lbT-W9Gc(0(b|uf`SLQgV$`T5vk+f8~F+czS z4Hgh}!YZY1rhGquXay61FhmAb#BJwP& zMj^nP2`LsuAE8wG{eFdCqu_YAQibEV5>qSHY7|(YLWNf(1E^O>k|0JfEQ~<$tWRV) zFDzk_POeNeAqddJWAS->HrqJ7R~Tgh@SzNlKBY>5DLo$LWDh~iEC(Q?0sWwd-~dyq z%wq(ujHj5)a>gqrO@^SUaerSKUm8k>rj$%6;{m1uSXDJ;$tPZl5c@}gfSvol?35o_#E=)sfQ*bBhR2lTB76gYnDT+c} zIHlF-7_G+1=t595MXcg@4++Z2dPp~;^m*MOg+w@!Znv5cwE~-v*h@*#1suQ(uwI(; z3lk~_>tXUmQsPskS8Mbbj_Y-}TBXPF38NPnUI4u)p{g*2MjO&dg&{yXfLc=OQ~(f? zgKP*h&yXU=J2Kp=(+UOv`wtyJqN`76a2Vp6Rat8(s2= zk156r{sH;Hr_w7gHx7W$tZ?V*EDJO&{a!zPycS5F@MW(TAZT8@bcXF)F)slKBSfn$ zGomkYe&oWW+SN}4f#|W-lI|#Iql)6@Bqd^be_1?mW!P}1vC&muC-bd$yb2vrnx5Tm z>vYkBEB|wOurDkp>%E%NijA}0UV=djujRKYcFW$g$24sVy65y{yy z?Bi$Xg@=otJodf2p!`ts(KWN5?^{;$v*FxhmU~N5XJ^lmJw2;ZUenyMaJU^0eij|P z*GAz3=HT+&XW7WP#qn`bRac|q g&)vN>7n8?<1IlWm!V?ox>i`dsH8aQ3m{GL#zrOQGZU6uP diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png index 7e61f368de294ae506cdab73e818f0f594bb260c..a62b9263d52ce1637458bc3f14dc63bc12852b59 100644 GIT binary patch literal 6697 zcmd5=O=ule6rMC%?Ij69YYDZB7jdDunYs7Qy)!OKYLl8QEVa6@;v)0j%wV8u(3G|+ zNFoSDshb8tcP%bN2rhy<5kcurOa&L}##Je}&@QCA_B(fG-pqaPCGRI~^CrAI_wRh? z`_4J{2Ik_)6EBRjL(FlU@%g!#Q+U_#n|^dJ+V?M=UB_$R(%k8H9cSVv`i-nTJMo0$ zjQqAd`|9$k=v-~-oww7)Gf8dv!ctO8&M&48qn6d^;T~tw*MSO^a`DJehCD(ipb;MG zyRPR-)0zP{tr=VMjP{s^!$6=%KRkhf21+sSW%Jl&9xp=AM>ij{pph@s?S(M+zyr(^ zcmb3<5*}uVUT)9Ayd%gn7QB38l*?0LpsUjA`Top3TH1#nqoy9`(?k_d>sV?;FZSU_ zaGnVGLd(q`W`q=xaG414;sT+-2A`&cMk_?2AHlGs6%sR_F1r=}yoQ{=)-k<{OUn(1 zQJbZ=#uf8j6{u88{DkQdK>=z&6oKSK8Zl@lj~uaUn~Q%r&cXjXdO82*lEcs#A3O*= zCK@8u2&M9rP<7>N$z8>juQUoP5i#PC*6a0@bIgZI(u}W#FJs}#7%33giy~w)(2<6r zFLWdmUn;x-CB|_#>fNMKsE6YQMS43*1h}JV6RVJW;*dlUVh1!L* z5J5=5EN6XqC(PfZ;fTh6hJ; z>r~-c7M)i76236%1`nXDKC0;5z+vHO*M??!T#8sklIkKvwIUPPo(GrQKyXuP5e5;- z5H;s1&6F=2WTrG017o02SKFB26wvWO+2s3CE1a_;oTU#x^iiuwd8!(kj)O^f#z_RI zCx}9U__i}cVy5vK*WG<2*i#2w_o6>Y;(w(r_7wQvKZ)u zN!(*D#6b)aO?MLVT%1ZOAG#x0c1cLOlXP{ldT?PFiUb*J;2;%;)yx$!#C_DS!B+d( zRvxO}Tlt!`7Wr&D{T5iqd#SibdD>)@U8S^O%-b$|JAT;-t+x50txgTre=tC0a=Wv9 zFpRqMD0j3l>PJioLcJCsd$FIGYRX#)cU&JQZKH6H0y?3{QZL_G3Ixy;0OciEmvo@HR;gnWt>5w&>a<8M^ z11iPXTz8L=&7&Okz-TKmB?$F;0J06X8r@%@-o)74?k^+TS8t=7(I8@M2g4(+&@w!X zibxH>s1Q>?WbYn;=#xT+Pu29v%6tsfn!YkKk+8qtOK;*k`{ntWqp!TN(pZ>$`07IN z(TihaclLc9UHNKsee?Ri(dgtezkYJ~hxp558^=Gto;j&$P-?})r z|C`HCO>c}I`ToLl-%d=9uWUY+HQ!CS?D&sQ6XbzU_k6Ls`QOUa$j86jo<4cw=#^`a z{J!?*%O8HQuyOjxp*>fpT+^I6hOMhFxoq!Y$9d~Bac=d_*;(*&=4VgLtUtf7dKc8U BcxnIu literal 4292 zcmeHKeQ?v}8CR0!%Ui-=X$Wa^6QboSlVw?oE$b`-u?_LHPTj=Kpkqs9Np@5s%ScM> zWI!`$3Zq?tru1mLcC3R!*TBXKy_8S_Bs~~y(=7!$$_O;1(C)(EC~dl#mc6p`dF$OS zck6$#PnPt2{GR9ez0dQW-(PymmSh?74G;unxl5hp;0}XpVMZGG{rQu1d%^9kM&DAc zoQ=R?MGlCy0<1NJ1z3oR0SJnID0$Cib;94fHJDRy6x%RkJ^9M1EP72={qJ{NotfRC zSswf9^HoQrCikMZ{Rd8O%$7cEYiIL5Y00d+@txqwukO9;X6YZ-cU5J6@bH-*uKagK z*Zb$^&zadC^uIa#q5A6Bw3Ca?v-2-W^G=nQQq!JJW)3$WIIDbp?BJz4a;K;5d4-;H ztg34Ih2F|Tn@rbA)^;QLDJR+tJ?Blqr}~;n=?h|;GOg-F2UE~wwcoYu-O%M#4hTwG zCpsKnx5F`95Gdo@-E!tUO&r@yVN=*gUCHZM*?c=7>9L9T!QiXGcd^fdHz z7GM67=zr?Z52nmIo}BNUX_)F#|uh|PCEhX;i>u$OWYpsh=)!= zP?W-PFF^J7Y$CvY1b3YEaP4tpVCC`9PMNFI({no+M2}DNGAHtM z{IQ7SDJy3qP|7N>C`oc0$^sEeP$t4^4Fqu9VjctK4yhU&;shNEfEz`C!*f=%%|?(Y zVJ#w2lC%0ziX#Y==XeWiu@qT(KRX8EenkXb$<~g|N{8YB6i1N(jud#12o*p{fiQ!- zC_l>bCacBb=ZS!oi$n1oy;xQx7A&VIu|WX~hk|j1PB^{D>t+zM(KIUY*0NdvIDi=t zL%bYOM^!#i5-K!S=M%S@2`g^GNdhNHTM<5LR4FJb=tUhBHyH^suF)5U2IT;1S-n#M zKwJ*0p&g3AYO>;!OlY({65w!;l6whj`lhp(OYBH0wiK6i$A5PI`Gi}BTaT9GC zV=wb!py7X6>*E946N_Fdsvv$tT$Grp3Snj9E%90_#)k=p<6}XyT%rV(trz%so&YPM z;%eAXPyqYKP{R((#cyba0B^=AB0!;5oW(&i1Z*h9lSL@c2Pna6v9UHb(N81jsvOWF ztRgH50v-WZph4qY!E=X}YTo#4A~k}(4uCS$M4_XU5ePO^ET-=m!`0fc|Kh_QHyE?U z0KbF`Y+Ya{#74HlA-+Ja-{xm%9lp&FFgzJ#Li|qBHA&Zm7?_apWOq%{H6aEjWIWkj z|2Mh}qlYOW1pWadknc>o9DgqFrsh>KHm1~!0 z_MJYK_72f#zcVE-cB{$A zT&!7@oSNfZ_=^j<5OiqD^%n+{IzBec-QJXJus;ZGf8)FDdn%ue&1i1~p&_@c%(=Iu HdhLGz@YfZx diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png index 59131c8c0aafc5f647d4409168265f23cc05e667..69a1825d91db90a67d6f57f2815d9f3581ecc43a 100644 GIT binary patch literal 7638 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 -- 2.52.0