From 804d371f0a878f875e5edb2be2432723eca75adc Mon Sep 17 00:00:00 2001 From: techniX Date: Fri, 13 Dec 2019 00:22:31 +0200 Subject: [PATCH] add receiver stations --- craft.lua | 9 +++ init.lua | 2 + rds.lua | 11 ++- receiver_station.lua | 111 ++++++++++++++++++++++++++ textures/ham_radio_receiver_front.png | Bin 0 -> 1580 bytes textures/ham_radio_receiver_side.png | Bin 0 -> 7098 bytes textures/ham_radio_receiver_top.png | Bin 0 -> 7004 bytes 7 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 receiver_station.lua create mode 100644 textures/ham_radio_receiver_front.png create mode 100644 textures/ham_radio_receiver_side.png create mode 100644 textures/ham_radio_receiver_top.png diff --git a/craft.lua b/craft.lua index f261a6a..c81cb1a 100644 --- a/craft.lua +++ b/craft.lua @@ -40,6 +40,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "ham_radio:receiver", + recipe = { + {body, antenna, body}, + {glass,'ham_radio:circuit', glass}, + {body, body, body} + } +}) + minetest.register_craft({ output = "ham_radio:transmitter", recipe = { diff --git a/init.lua b/init.lua index 1254b9c..fed9d7d 100644 --- a/init.lua +++ b/init.lua @@ -6,6 +6,7 @@ ham_radio = rawget(_G, "ham_radio") or {} ham_radio = { playerhuds = {}, player_rds = {}, + receiver_rds = {}, is_receiver_wielded = {}, transmitters = {}, } @@ -53,6 +54,7 @@ dofile(modpath.."/transmitter.lua") dofile(modpath.."/receiver.lua") dofile(modpath.."/beacon.lua") dofile(modpath.."/rds.lua") +dofile(modpath.."/receiver_station.lua") dofile(modpath.."/hud.lua") -- globals diff --git a/rds.lua b/rds.lua index d38e9ec..d340ee4 100644 --- a/rds.lua +++ b/rds.lua @@ -1,4 +1,4 @@ -function ham_radio.get_rds_messages(frequency) +function ham_radio.get_rds_messages(frequency, is_receiver_station) local transmitters = ham_radio.find_transmitters(frequency) local rds_messages = {} for position, transmitter in pairs(transmitters) do @@ -10,6 +10,15 @@ function ham_radio.get_rds_messages(frequency) ' ] ', transmitter.rds_message, }, "") + if is_receiver_station then + message = table.concat({ + '[ ', + transmitter.operated_by, + ' ] ', + transmitter.rds_message + }, "") + end + table.insert(rds_messages, message) end end diff --git a/receiver_station.lua b/receiver_station.lua new file mode 100644 index 0000000..acc3135 --- /dev/null +++ b/receiver_station.lua @@ -0,0 +1,111 @@ +ham_radio.receiver_update_infotext = function(meta) + local rds_message = meta:get_string("rds_message") + local infotext = 'Radio Receiver' + if rds_message ~= "" then + infotext = rds_message + end + meta:set_string("infotext", infotext) +end + +minetest.register_node("ham_radio:receiver", { + description = "Ham Radio Receiver", + tiles = { + "ham_radio_receiver_top.png", + "ham_radio_receiver_top.png", + "ham_radio_receiver_side.png", + "ham_radio_receiver_side.png", + "ham_radio_receiver_side.png", + "ham_radio_receiver_front.png" + }, + groups = {cracky=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_metal_defaults(), + paramtype2 = "facedir", + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + light_source = 3, + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos); + local name = placer:get_player_name() + meta:set_string("formspec", + table.concat({ + "size[7,4]", + "image[0,0;1,1;ham_radio_receiver_front.png]", + "field[0.25,2;7,1;frequency;Frequency;${frequency}]", + "tooltip[frequency;Integer number ", + ham_radio.settings.frequency.min,"-", + ham_radio.settings.frequency.max, "]", + "button_exit[2,3.5;3,1;;Done]" + },'') + ) + meta:set_string("infotext", 'Radio Receiver') + end, + on_receive_fields = function(pos, formname, fields, sender) + if not minetest.is_player(sender) then + return + end + + if ( + fields.quit ~= "true" + or minetest.is_protected(pos, sender:get_player_name()) + or not ham_radio.validate_frequency(fields.frequency) + ) then + return + end + + local meta = minetest.get_meta(pos) + meta:set_string("frequency", fields.frequency) + ham_radio.receiver_update_infotext(meta) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + local name = player:get_player_name() + return inv:is_empty("main") and not minetest.is_protected(pos, name) + end, + -- digiline + digiline = { + receptor = {action = function() end}, + effector = { + action = ham_radio.digiline_effector + }, + }, +}); + +minetest.register_abm( + { + label = "Listen Ham Radion Broadcast", + nodenames = {"ham_radio:receiver"}, + interval = 10, + chance = 1, + catch_up = false, + action = function(pos, node) + local meta = minetest.get_meta(pos) + local frequency = meta:get_string("frequency") + + if frequency == "" then + return + end + + local poshash = minetest.pos_to_string(pos, 0) + + if ham_radio.receiver_rds[poshash] == nil then + ham_radio.receiver_rds[poshash] = ham_radio.get_rds_messages(frequency, true) + end + + local message = table.remove(ham_radio.receiver_rds[poshash]) + if message ~= nil then + meta:set_string('rds_message', message) + ham_radio.receiver_update_infotext(meta) + + -- when all RDS messages are shown, reload them again + if not next(ham_radio.receiver_rds[poshash]) then + ham_radio.receiver_rds[poshash] = ham_radio.get_rds_messages(frequency, true) + end + end + end + } +); diff --git a/textures/ham_radio_receiver_front.png b/textures/ham_radio_receiver_front.png new file mode 100644 index 0000000000000000000000000000000000000000..52d43fa36e0c996fa7d2b13f76ed9189fc330c5a GIT binary patch literal 1580 zcmV+{2GjY8P);(X#@ZO010qNS#tmYE+YT{E+YYWr9XB6000McNliru;|vH502wgzJ@Ehl02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00opuL_t(o!|j#JkDF%|hoAF) zH~X{4m$7F&nM~%AWRjvrG-(y7Eej+B3qXiSO|yUvh(#9&1tG+rzyg+~I~GVRU{MJn zQ5HZY5alWwWttX}s?BBYj+3#+_SpU|?|WD{LGU*)kMv6K>YSrQ(#;Sat~t68TU7bp}XYSjv!AEN3Iai|K2V#o;rMHpGIDC*oakZ16Gk0=NT zgAhLu1OuXgna0on>tHlV7>~zT=OJg$tm;>_B8nIf6$JzUtJA*< zr~nv1K^5Z(Vmyp7hzJPN0sur%r-&F%ojSwK_iiG_r_pHQdnnFM`1{{BSU=I=Tr*^1 zbMEZ*@#AQk009K!f%qOOFz6>7jWSe(xZu%fRPcR=iorRDa}HHdRaBu6mAG={RRX`n zt&Ll3ZSF8XH;Z4NZIC4yYT@E18hrNB61iG_`Sw4#-5w!ErlUYm&m);wI_)vb%T1m= z-@sXAcdyH>jr%Mv&C+PZI0bd!oFag8Fv>=}^{e0U!V8yaxA#dW6NddG{AQ~~F^=&) z`18$O?(U~_dtK5z0o=6Lsvt0#MD&N2Yga$R+G>+Wj|UXuBA@adYd22t`#)`<3bkrT z?i6%dgmVfiEH5u|^5iVZB*P1fNDyFZ)f&Dio;c|->b zwXi_B6f+(rxU|RO!V04_rPn>AR*guKoIJO9#-OSo2IHXD-KAQsG8hafS1LHG$o1>r z(xvK%%OuHYE-qr#VXYr?vrNkZ>nKo|wYaf~vZ zzp7%bCCe;_{gg0@z&X~>tx=jO;ui}MaZ&j6%NHqx9&@Yf>}_u&F8v?N?DYnG{Gh|u zPKU*lr&wN@!#RubLYz}R`gn(T|MDKCa+T*UU7$5rN7YS@OO+%^n5ot9!Xi7nZPFxX zZ*K<^$0Y(^m?;;D8%u2Nr?i&OOhvWoAGiOVrZM+vG^H|z~k5>w)xKmLJ*R*g~O==CS~ z$f<4W`$Crz?svh z7!DIUod?V}8-zi?P}AvMP$4Qrh_QH{#q&H;t4xv<>2%t9X-1ysWLb);GUyLc zRg9TlwD!Y&@;oE6Pn4ZI(ljN@vZ+>_Lqza>L#Y%K_&y>}H%V~TF`A4yIOwvsx6jtr e11?;6j(-Ej%+VS}J~I>m0000<%#mSEX2z)lLQYAM!ww}yNwFm= zQBst46gfr7P9cpFiB9T!hIZTjzP|mw`?}uuzvjB0nP;ta|L*mB?&tokH7l9q<{&Sl zAp-(|$3;ZYVc)WhtKu+j~+wPf`)q*O?qPsE%aw=S`%?@SGhVu9AG2~CJdPWaCy@TV5V{Orq*h zThzz*3NkZWjiX|(&&Kc79nv0smHx#jd_b34?{(clq4?u_yYd9f=mKHx7VgoVmCE=b zgNm`$2H8E~WggwRJ42y*$1+(SJu0C~u9&>GIFij<#LaYU*ifEw26RSs6hV^I>=`|y z|Ey`UU2)*kp9wXej?1ao8#EWGo|SYQP5CLkq3p&> zFYZrA6BCUhmmhlev1=&G!lt~s=-HKvjae}Gq)v4#JRVzPE1&v~eymbrmv4dA6LgGC zn2ex7;$i#6H1AH0}5pKE@bavPLMA zj$8h^1*N3Zq@;4mrvEznB< z2GvO)T%K>c|0eIwqR^Yzp?v4^nk*9KNrsb2ap!%bt{D8DwKA32KEc7Sd;Mz)yH~3D zh&tm$=LGKfnft+9{re-S`URsc0a#J5W-riVjb6eNq0Z`sjuz6JMilG83D z%cd7+ZQc@EormVqKSs{RqPb_&k-91G8S?k@VXA(8(%QS*?KAYJaBw{}a3K+6k#ZnC z9{Xgh1dL^lb>A|!7Amrg2^J62b9a)?9XX{Q% zWR@42cwR^U)FP>Tuqilq+ZnPt@rFoA8$%d#b+gXUIqoP?_9Rp>Q2S2L?-F^HF*jbg z)Wu#6cC^hgTyrp^c*1C$i1J^Z2K@7I7QPW|$Z`~%a)%Bg-Sh@C()RH|+K1T|;G)|($Dt_kh`W-8qS+fz;itn`9=&5;9BaZY~bX%ig*ptt|doJ3UpTE@Z zg>F=z7lxQXU$uR-WdF6;%(F%pN^6BylCsVr9=`SJI;$SXcRK{|xw|n-~Iy|^Ncz0;AODXfE&ybs=;dW)B+cs?li_+2D ziHj#zTWIOBKe}1@Godupna)cVw8*^#r+U5k?6>IVity5~pJU6^&rhe#Zt|3M{yFjT zaND*l&eg(!L40ZV`K{G}eT!RozZ(7|>*yC)=tS+%=)?c!^;!u7mcuy;e@7BtgKxG(D`)&aeIzlAf&;FKm!Fl4*-B6;cyHTj)Wqyu!Zr!sH^L@XpZ2k zih!Q52r>_bFoDC^?7u_^gmz(n&iCC2ffw+P1m;N>a6|c2x?LEZBh+3vDUTH@SU6{> zfG+Nu%bP`Gz<{LYW?mTMKy)R2ixJBhz-060BE;y0NE-DUju*;j&0%O%7@b9D1BnO# zX2f6cK>W9W?>^2P`J7NV0+$*pW+4*r5OD%H8kfqX;pT7Y<_IbUjfK)M7%UWpFf)Tv zP;fISmWqHgC}<>#VoqK_MdS#CWDb=srUJ-Km;evfjEsPz>1Zg*49);37&Iu>3~LT$ zAP`ifISOfxK~ok`xbvBSwaKi7S&6A=02K{QWxx?gGO+qlfNV?=C@6(Or$K30DiUMH zpuoup+8mWwSey-sh=(9e;D7dzSY#oC%Vz`i!sO7n;etPhyqIkI1|eB28v<>P#vtHG z6xJMpMVK#$-$dsN0N;vP5pWaaTr`b}vj-^2fPI*3asVC1;{?nN07>I)`E;_7%lG1P zS$K#zDX=(lt{A|UUu}+a;Zn)sa+m|tY2r%xS}W_x0kFBICG79O|A%QqAUB-z@A3Qz z{l;R$7lw2B!R~x_N)VkY{Cl47fxj_%0;`lj$d4rci--DOILmooIs&m=e&mArH_$`o zTk}f^i#aD17(7?LI5JhNA|4_jhtcP40O&YBL=7Z!0_eax`L#&?=x2V%uW&OAmV#xV zpk%n%@)UCn6idUxp=M|b27#bs$);xWmjA{s;4*~aWIo*{0H`A1Jp(l~_nyH9Uu|YM zXNYh3@IboQLvREZia(SH@b5H=re%jHD^#TqDd59j>t^xpx_Gq^CRbdG@g zcd0Lg%*(Q10|9cL?*ld_V4s71+vvW!1W^3H`T6R;|K=26@Q+FUk-k6V`XSdpQs5tf zf4J+1T>nUce+2&FuK$=^GJhVG=^WsHUpR0Oj^i|=fJ3w-#o2)XB7#sLbMt8C5}-$# z=eR`x0?De1uSKBT{N+HWl#u9ZC-qcrsr(XYqQUcYpvy*R=Pk75vc-obkgcbkjhDM8 z4je#(2Jz?t;4t7^2{s57FgXEWqLTyIiDc&h4l_d<8iPYZ$tBcIt$cuSkB5SNe2#0+V$*!_cG3(d_cd zW3w~k=613{W%(n-(|bjAn6$WVjbgRCZ`{hH%6u=WLnKU-lo(*dR;9rvci7H}KzW$k zKC2b6K5H{T%Dr0c*HTF_d-#0#*yxGup4@y`boFW}nIWA;>kJJ1KFIWs+`R=;^A0I` zUK?(E?Ngp(#B_7~(5&jVh*}dTL&xhMvJD;=I2%?4UQ#b|)Y)4bPN;Yk|t;Q99S9quI@w-c?+;Vb8k_uomqpmbkm-_ZJkiHk?zz2nL@c!l*19*X6n zXJNI<%8xi)N1M}GBHZa}73EG(fwIC2^7U(vMzW=H&mRFz*`-Foig`!$b<;6v54~Mps}(6!@|y+!A-qYDA;7RM8z3bqjv?W^fHyEm@8*>`RC`x|XT{(BC0ypC9JC{AQ@HZ|c`h@6^$g3ezgNNQ9d{#e8@J-AD>PGOp_y+UaAM9DCR! z_+=2Upa{*nD)nSI<|MLoMg9n^<;W$ZdTOKKz$<=^p31tB=5?ubqadRBVl~505mh5o zGN%vS*UoNLH~=fYyREIT>TqsWa!~knd`Rn5OejD1P{zRIe$VpXU#-1BoqQs-kEi*{ z?D1N?MnBKXH)bnZS)Rdp@8vAACCpFU)PuqyK8#9Kn)edZi${;uX(MlE)~_UXav0ey`fe5o5Ze)Ie`%~ z6=cj-2w4rxt{ITK6(?nNxp)!63Hk81YJ{WnrH=TY9}7s1GSc>GjKx71BS(RSC-Blh)Gg{;L;Tg!Fa9Cz*d z1lGx%!9V;-OKYGuj<~BXdi(6S`z+$-fiJ!TOD5io>HN5PE$HbD80|fublVoJ-_#SKJV|p=JT25zV7e!y{`NFT-SZio#e8~R#ASX zJPZa?v?E(npl?9@mX(1%`4JKCU@#f;2zO5b1q=naJPv~yLCj| zHl;-bOp>!Os|nK1nl&mJO$1oGMnvwD(b6*s$PmIxB$Vs@-HP9d)j8sebQ)rMhAFHV3Qi6l#!&_j+#%Cr9MM z(UI@Eab}-dhKD4|^T@F^lFDzET->0cuZ$F!u930O&VZbFN$HL*6@ z?`#U7n~++gII^s;SZi0d{U81>A6}|mkQaq1w3B*0$Gi4dLX>`7QlKBK(wAoi_JUW!pwCbr(% z`#AIYRz~(K#(nR{Q9Jh3oWOOEkEbV1G8CU=mB}Gr#ijk`uX$G`V)Y6Y`P3Gztkn&- z$#q%W5cl*bd)f5(Oi?@<+^GcT(v6GrRwogSOf$1yUP!ZgDm|*CwfJI0%u(Iq=EN)VdtIE2_7@E< zT97F1T?ZKLr#dzz4qBV+ycTJi=Xj(O`JnCg;x^Zh{hsk4uc$oeXEYFH<+i=ys$rU( zn%=&vLH07vlc^=O1|>2hv~-Wnh8YJjuJHxYx@ZC0!rfnE`=S!{M=w$((?nMTu5L(M zo_p1%``5TYm7wL`8wJ>Q5yy{1n`D-+KKicWGjO&@5 zM6w5 zJd{GBiqe$YJ#(F7NQSIIDTODXaE!ou0Afo4nI)4Gw*I4aUfPSe++r zi{2X0?pR2F%`eZDa4Y2^6Uq%%@ilgrdLrGqPP8?P=^_DoIR+z=u>+Pn`{thT&;e3wOCpCY+^g*Ix1y52*TXLQRW z<*sGd(pA$6Y?k&*zI%G+6A+=3H0HWi=_#U5D_QU864ZsWrGXj78fSLfXcLOH7wcW@ zJ26&vTBNsDoAn@LcTKAonX~0Wu<*`X`J}^9PO^wm1ntpvLCCV0g5_7ok5RXW< z>gM|w+T(m$kmKnW$N$*E@g%E=I*>))#2~J6jpajj}t_TGYq}eYS^D@SC&}q z-#Y5XzxIqY`TLL^f5<(hpt$;pqsLUix$+|7+4t4YjQdS3JCw&>t9;4I*sjJ#O;Kol8GqvCpSLtjt7Se!-t*h7^whcipwn*PV_UAQsF>;y zgV_Daesbt#&NJc@w|mVS9E!_M9Xyzei=XZXdNT_uKTB9|+mJo*cDn|2r1*aKEMam5 zRPk9tN~%??LCH#ec6_J|Q_0A8`|z&QcEUrB6403bDsMVGHsy$JtrN?uBx8@AeNlh@ zhzn}Lm68*EuYHa#;ExjpIw#4`Xqm zG+;0jvoJ154WtVIU%DTYO@hC^UJVDBG!opy&GZGHWLIi;%xTli~V8!9l0jxe&ABC_9V}@Yh zrt*LZkH#QUtT)b4KqC^|Um)NTk;u@{Q2kH?eGbnLi6#&TNE8N%!5|<6f*;NnfMEzW zUsFu+g~OW8r}7}}m>f1B<^+8?LIDX5hvtDfak{(27L5c7oX7pe1kpEYQ?=EMSd{!u;HHRt`v)Eaa;Nk>`G!B(X zBhLQBGH8YvDh`jpr5Q13bOOd`9+e%NF96w8x|j+g*JnaJ zzJ@r^(2#&bFi;>GfdvV81c6~dKp221ItEL_W9SURJPKzX6Dn;mXns~=DjGxuGK_o~ zI4X#s8Q>r)G!8_721Zx}h@qhkjc`yoV5qZHVqu9EE_Nh1Mj!Rf;t~W37#to8>K7)P z#tG$rn{sEe=xzc~EF0PoXNX6mPy{0*Jk|(>{|4GZ=kcMs6|2)Fm16Rg>s+<1>H_v~rM*p4reApLnD-Jgt zYF2-Nb13_7!+!_(g~5?YrL*~*ze{~S>HA=f`r;2(j1RM-ETT=L(p%5*mLzb_QJ2n#fh z_du6u8D9rmYnUAj3&Y{|Fc&};IWBoC9|luU5x*s1C$d&R#)SeqC!2)>i)0lgw1T6} zPeCRNfsLoYio+6LmS9#C8w+=53K8(5Ap*E`KOh9UR{}ahK9lVS*xB0x_AWNIK!_1W zcLNYC1cR7@aDW65Q1V4Ko`+zt1u=Hk7Ve()86FntgZRZ#I>f+}rRR=+Hapk2tau^i z>bB#C=+VTWGJ1y1UKn}ob@j}pV-lga!*f=caQ3ac>=ncSAJcY9D8?0HuZ>9_NbbQgIt7cXV>oaiE+(JX={|cC|Rqr_lDn}p3b~Wt{k>o zr6^qrKdf;cpK2`F)+yck=F_KzS3g!Rxjiwlc7LCXGRMx<{=JpnpBbN9>VJ7OF{B!l z@@RijUkc%}@8_GHogPS|Vd!fQYFK(gvu*ID0z(RWR^Fvz-OiBd`qm-ey#?470LH*J zjY?WT^mfq7$#whXVDXE*BlyksZUCGpt?YUy@XAP&wX4cQ^+%C4K2E4~e9G>q4Ed*3 z&m01T<;ELNnJ*RP1fT+2m;Nyky%P%ypyTDThS#<%3f_$Hj2|{`9nv>k3QN~iKtDZu zdaFPaW+P{o^M2b74Q*XS|Fy?MW7M$Dn7H)qCpO0igw|DYh2gM6S=hsaWf6JldOI1R z?9TqiCG0xwr~E1p>`f#4%EnJM_k-*MGbc9~ACcTxM?JL6+`8!^jjkT7vj5fwmm`VT z;{iAw<0Bt7SUD7C6dKFc`gb(3Y`ZcQMoZ-M8n+iAC%e-f?s(YNy}w~&y(^Gn!Vvgr zss^{t$SXQ5@lLp+wlrUc)+6eC85Y*thL8icINU1O?tMt0P?pW=6zxm6>?3?QiOyW> zWhjY4yoX=fF=?=%9go_08kNv_Bkpnjir++9Mc8W5P>R`fY` zX0Er*k{};TEa^=c5hV$c*RanbC8N(PR}aNJuakW9c%byETbl!W*MMzIgmXLT^`_=u z9#8Cudf=l%4(JaS-q>ccb?rdM`%x9Ep2UjW(q}W)yOhJZ6iza0+vjneT%R=`uQgYN z_zi99bS&}o9=)eG@%&n(dBl5|_ff9qLq*9xm+_x>uQ}Pe_?^r^%=SxTy)2_8lk8Q8 zqH;@v>rU#uiL5QNIx6ZpYd;$6`EjSp)9a^RZG#uW-sPMh3Om^57xZ8=&mww?D?7C6 zT+X;e*`hJ$b6X>c-KN>RuGVVfG|@h{k7mm!HEO%c%hxV=9X>@m_E|zs+J;oTFk>^c PwZZIcHdz;1?u_{_8%W|Q literal 0 HcmV?d00001