From 8873befd9db5d42764123443961f095acefe5ee2 Mon Sep 17 00:00:00 2001 From: thunderdog1138 Date: Fri, 20 Nov 2020 19:49:06 +0000 Subject: [PATCH] Upload files to 'mods/mobs_npc' --- mods/mobs_npc/screenshot.png | Bin 0 -> 8003 bytes mods/mobs_npc/spawn_example.lua | 98 ++++++++++ mods/mobs_npc/trader.lua | 304 ++++++++++++++++++++++++++++++++ 3 files changed, 402 insertions(+) create mode 100644 mods/mobs_npc/screenshot.png create mode 100644 mods/mobs_npc/spawn_example.lua create mode 100644 mods/mobs_npc/trader.lua diff --git a/mods/mobs_npc/screenshot.png b/mods/mobs_npc/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..631f73b1001912945eaf8477a5b5bb15054dc04d GIT binary patch literal 8003 zcmWNWcR17!9LMk6ojZgxGQ-y%*&&&C91hu=jEszkM47okPQux%$;p;2Bg#BVB4mVc zXxSsH{C2yE{oZqr81Ni0}R#utuBSx+C6jz%x(~ayq)8` zwJ6S*hc~cK<7`K6+t&~zb5p}BUp^Y4-0!STcv3&|uE(Za4tLA) zX4F9-!KcO;v~9%9`dpIdk_l84f5DMG86h|bxSq%5DEEiDJ@d2Q z@QlCuV-6ml>gn#R?6JliYg1_l2#Aw?&KneaP2iB$$*7aYmV>cqO(po0$r<5ges8r(u$kaqo@08km*f50vtE=^|<4gJQ7IGHNh=zUMVnM_MjXHn{90dX}7!ap6u5bp*<= z;Uo9`Qe4%XwB(H_wR1`=krhrhLZl~jg$)KN#(Jd-aeP?kfm1a(dY*D!ra?!b;g#kI zH+ri)(^rv~!J8#@e&Lu~F}Eoq<2Fi=!j@G(GItCvdUrgp2}XCqa5Et#<*-WMmsgsai3L*xA9uY(Unmst`&y))P>rMtAM;?dJv?7EF4j)k6;mS^+WpY;8A} z90+2}1#ZA{lW;NRde1dx%)+g`?PwFKm*zvh_wX!~zLFuhd?cviSHaHHgF5;jN2qT{ zQ<|azHpi;U?YiI8I)0!kE@2ZV_)Wib$ry9rzcSH!WTD!~xvC`H+31X*C;fexrS#hy zmbHE18w{QGz_rttxSLieM5$a$HDX1q$6+8>W&sh`qvca+BD(1A;@J11+g~FMsHt6) zDyGzd7FiB@t){p^OcW&PtPeaE0j~Nmbn|Bnr8HhkiPYlZ=ilV^%Kjn>NxyRg|Jo!x z$5OslO$jrOS~m?SCNq_52a}sR(9gp>lvZaX5_ zkE=1bDF_pp%@8foM@JOPqidR(VopPNSVHsZD8X8O1VG#Q)9l!#Wtk|Il~mSmqr1=c zSuZhC4L?5FV#Pd%E1==i7v}?65?|a&v$^`@chMN*xl6T+4;Vz83NnbL%c5wt!WV#5 z;gl7r*^VZFVVf@zk9vIckn`YE=8&zxIVfA%^enW(=W=!Pm|PGQT>Wi*^eA1DyG8kNZNU`})e#qr`Xl@8VrZ zt0rClPFs`Qk9OBA?rfX+HiR02Q<$ui|GY`Wk;E&npuaS`5+I z9jsG;*l7`>jp5b5FePpKE02Uod&sdtS`CQLML19L4GGt7z>k>Fx8nZABn{0#irm+r z;=QoYFKF9l%W-^>Q=XeotNZINt6XhPPRhFfpxTr9&3n!74YSCrr6*5@9dO@-E+bUY zep{G`T!0!EI=~8It5ZA^2KLz9BJuuvw#Wr07XcU56MYPKuGu9p`8<75E~nSeGIj+5 zF7KHVQ)Thvv%MC{{05gVSn%#BK1GAse>{jRVTA}yfeq@T41XL<_Mk3Q*PNKLH4TvI zV_$tALx1f9|7bb~VfY1m2mb+(Yg_;91S7GTUjc{M`e+1c#Oo_Nd*3L%EQP4P@DUP9 zfl`&t@h@q4W2%Bd&vR)Tk_Ct{&< z{@MGux2hLam(Odo_~jt))i#Qzw%zg#ieP`gx>YHBqxG$U`3bS zgFrI(EbOwuQ!O~g%i4)E{>-H+i1@s@w0+-pKSRXh?7mkK`r2GL0=aXtIR6VRGY;6oOJ`ObQM|{3^ucsq#~+ z-xbHhCRyUlr~<*wS53Gau(BX`d%Pi+5D+V~C~+p{F6X+db_>7OVAHZfG`H<>?@s3{ z9nN4%Or0g}nvlKTHLcv&>|-Cr`w6r|iTzPD3Iw4KRYh0KSY4b!=)J5>lga98S@H*lG4D=(OyCqRS-WGE2x#&QGn&3< z!TFhC=N`qa(zo7kmge&oedey08{S!uo)1LYfcB~ITqOAmKW|1;L&dAgDD%jfjRWV0 zBD@0eXS|Feap0_KGf4gYT|CL7$@Lbl)=Gm;?*=?_;g(tY-<44ykP##IR1>XcqMuzm zoH~M6nUml8=&&92Yv05!#Eo1tbq@3*OASI!VGdn~Ov^)Pob)1-*aERTEczYM|BRu(K7(HFI3xa&C|{Jub!*;BOL0uzqp-^l*w} z%!(wGVr&4%V)#98|Bjpw5UCe>eWkWnNV=lpi0z!&8uT`%D`35K@&N@$`V2j+(-9I9 zpw_`D+Q|_P+E7k8|QGMspi`z~{Q18$1vA@)3!U0Xs z5E+-xTwnE}uPWbWEW%d_BiL-j&%dg%rdv@Yzv1ZZwz7DKI{1uJSBtfGej;jgFXUb- zi}iKj+kiDK$^jb#^g^YpEw~x=<^Y0T2kTaZ7HJv!ng#m9Cnjlv0m@eXsZx3SYX~w{f;}zPg1+_i0#XA(vkAst1Lmf>vYiAGk2RcFsB0*4js7RN z=kT_Mp-C|wDG>ixcy(o=Q0!^9q^=N)-mBHGOKV9ZCs!GZCg~>-peLq0V4CZBwxAAq z`JaE^a5zB`;*$KBU&jQ&DRp4RHh4j2(F!&1gne9I`-C1<;|xNUvngPI}$uhn#Ngs-&Qr4K-CRQg6s3tx{CKL}&@_ zrlTs<&X@4VD=gmxp1(Rz7aGM#HWMS|-TrEd3{;?-T;C#Q0f-5PP~3}9E^0qh{j4@C zLQ41<56SO*fskY2MMItP$sK1819IeI+Y*bA5m+l)Skh|Ax-SEx6V ze`$xS9az#bwcxnUEX`7X6o$w3_6+L!WQ*U?WyBP2S_!GrdA|uNT$Z@EkcpnT#bx?r z;7`6m$z9{WeeQx-6PXCNo%1tyCB>e_roq|74JRz55W&~m0E1tv8W}|=2T)vCS9^jq z1MTf4A(+2ROt#)l$_rpFodY`?q#|q#O!kU&g3-4ouBW)^A|lcw$jsl@JON(>drsFb z@v-C46&T^S!6*66d%~CAm}jnfH7)dih-P`j;r$DapPNUL^+WEmz@atPBSxmWrj)JiOIeszLi&8Oh zR34ycCJAgcJRpjCL_w+Hfp3$}BBgzIbT0tMjYX=Aqb-fs@73C|;udBCdQc=$<>Pjt zc!Bo1nIa$}ImP<~3Iynv7F_w=Ey#(G0%C#6ua4OwtG2-#GSc}~ol-1CJ0Hstik3>44f8yt^sg!SC6QEWn!lq&rkZfQ{S^{LHI z7OwAUgD_S60SUxXZp8hPW_SIi2Vw$aE8$nKZzM+e>h^DQKEgVknaM^8rokf4sSc z$N9o=F>V5a%LG#HRq*X+?Tg^SS@XJG`}0$J{`7a>d>#v=UY}`2&&!cFk;u`P4V7++ zR0%;b_a;eATYVHp^P{H5CnC@8rUarrwR+y<5N&R#km7!KO8T8Xs%@hHf|)ce6$aY( zt*S~B@y{Ld{n4eAT8VZIa?_J9X4S;iBP7ycFi(&o0FuB_V}YVvgFte42p9|;(uy@? zV1$_a0kUr7OO?eROB0Dy-CZ4|!)q><&~+9B;Qfl2^_y0Elcj6>I8mn!Jp*%-(i>;5 zJ^Y(lJYk56c-eA7ek7O;qw6;B;9L^<zy0@1`8awJPZ{#Iw4*N-bozWkD(#JzKu? z@O1u@IkI)h{87Cydgj+>l#VN)6}WNowuN{>57qnv;ATZ=gqze|(nFFfTse&)|5KKp z8Yh0%*)b@sj$@Tpk)?u6KZCtqk)hi;;)T>%t%)xKQ23(gtK$NYr@fOVlh{C- z=R0)mI(CkG9b2hFhA?((cvTK_8E+{*H;ujbblv4kWbYtf9dK%P(VLj%oE=Ie!StDE zd72gjSFE*@EUhJtK7Y5Av$lj^KZ^MmhL3Rp=D1`yDI40s4dQ$VYdD@HR{UHXy8>A> zYiG%5$gPwPmt|&0`a$?RKMV>-`Fz{2eXO#E%0QXViyo(RD>ufI{g6RyVj#*<{^pnK z+dlmt!cc)WtI`6F0NLtfHglUjK6vrU3HtDn>w-4N&pPx_IeJE-r1#6cQ{fwYi0=kt z2mO*rOmjGP^UHncW1>GEMCvSb%nKUaQtO3Tw={Y3Q9HRQB$ySi`-IHpD3s25(xd(z z9JM_loBDU5ht>5lJ7#_Zos}DcN` zZhf*LlSyxVuN?UOTW0;neF<#g;jZTS3zW!eS53zS;(9`rqz9hr)xXZ~fV@l!XA;z< zHoGYQK8R(ZFCUN*hO%;R)DzC$+tItWqYfoQiD7G=(&Vq|eDCSNE^NOK47$$5s?*(! zHAtk*eOy>eB0~4R&bi*%awVa)=_eqOmuBAx&wt?f}f68#Dz)jGY zi$UN6{O{hEdveN>Vb$!-iRYkTaJUB6$Ikf{nJnP4URBLk{p!x0-{$i7nu{~tHXvvk zsi+?H@k!#fdb@Yi4z#xSt9I%kgK4Rk`kBcb z${!6;og>FfCoMD0vvX|a^_p7Cgx5=E`&&`-Bq+YI$?WrloLz+9x6<*_==FAs!Jd~5 zw~X=X5(=nbT3EOktbV9#n}U+Dmo@2tYp{}zemX0dZU*=RL2h?10=I=YH;ijnrG{QS3$i~@DiU6O=I#;HygTO zf|y09BOFh4aedcrefgRD|6vO9?laH7T9R+c6S<(0XCXJM_WCeEtRC2|isRM2{){33Oqb z3ij;9WGa$ZpX8IE{zFuj+0JPjSG+bMp@Qg9on6jdLMO{=+QIk>Wj^($GmPoVZBJb7 zJAd~G;=ex_@#8I{M+4^d#)Nt1(iR~`Tc(>x zB+>i)f{jAzRLQGzzi^J3R;U0lo%tdIXi6@o-fK@0@gw= zRQLqHI^u-Xk5z7&hAeudm1HBg0*n-uC&wpqM-Di{l8V>>tff96Ds zZJFhPtN$>%G*rSC!5f>>=Hy9FRLRb{-HC%>UZ9Z8BEocaAIg@rBqUv#eV_D&et#1u z0KH;W2?5(&OL)z0k8e6^XrXrgR6`FZGXBs|nxGmQF?Wls=Hd&;~`-E9-h6vcLA3>atC^*W5U;fQB@?r_sBKI^wM>H{=w-4{o4;T|$BWmWnvY5C}% zCM@GH>^i;DN6BBUUiDLaONUZf^u#R&B}Z3(j@~Bqryph>KR4IT)HMEJWgAg?Sx{`N zpxAS#FzPHkbLk&{U`qlCyeD(g8(eoohWTN*U^nFzm?_T+C4CdDSg z&#ibK#i|zrJJ;u9J}~I{iIF;`*f01!whoF^i+vEU?lM=|%)Tz)$`$N|&l9LhLTzoD zDpDixeQs=G%7Wk|ezqFdOKZJ!SNPvi1h6_R*f>}88y9o>{@L~lx#%;-Bo7w`u`t{Q$0^3! z+XlB&C#}CAs!YeKtE_;STXZh$uu$?iD0xN{5@h>piJTUO$NwpaM2h?W`49G=esPV~ zX^bCl%mYz)MAP%pifQ-B#DI`ubk*Od{U37`ku6xIP>}}0b3r$94|+tf&I=6x(amvk zqGJs7sSF}g_RtrOhGUvX9&fMq_c34fo9A763KEAIJ@6I2z0QTt^V9mK43|q+Jd~74Ue013 zha(vQ5W40H&SgC2S+=5D4+-eUYTvpJV>*$m{A9-Vd2&S<@IK9ATq@8o-rtH}u$Ubd zV=|Qnp1yzoba)x2JnmKS@r(|=(~73kddSP}bgO_Hsw;P=<}{8GsVs^WZ2YP^mwSc= z>Vh@+sbYd+OP;>qx_Oa*X7ESJy*VV=P%-s!uaM79SEpptK>XVK>;U-W3**j(r4xOvsl z%M4VHTXaxrHDbqFu6Cd#AmA3*?fHg(iNvd8F^L4uoi!${dl#K4hsFTy1u&DU#v$fN zgR$rLzI`rJyMRG08HC<+86HF35ZG`MUEVkixCmYK)IK8MXgACY#cJ%fd~kr1uJNDN zFE7+aFg?ZH^4v2vdLilm%oyfhHCraZ6$|sNMi^ja!nw)gr%2cF-4wUr5}x*S=4OB~bH#WqJKR;?!*Qkh!2k=-Lys9f=};mb7m=)D!z4-YGRnVB_xJwwS_H>9?B$n`VOYiD%VEO* zN5B2>+|^||CF-!XA;-w=%ni9T`}`}D=X{~Uk1CGYWe42rTfw|{C90U0u2fzz-8s|- zQdOG@)G>6Zy-P&1^w$mM$TWBGQYW}dn7w{-O*dAI-|@N}Gt`|ok0qWbaY`I-n*=~% zPFRKH!<+y^Zt$On{1A$XW(@s)1P}Hs+X6xO`V8QttbL*cmJLK5$Xrw(y4TJ6E)9k* zNVg@E*vE$Fu4rks& race.items[random_trade][3] then + + self.trades[trade_index] = { + race.items[random_trade][1], + race.items[random_trade][2] + } + + trade_index = trade_index + 1 + end + end +end + + +function mobs_trader(self, clicker, race) + + if not self.id then + self.id = (math.random(1, 1000) * math.random(1, 10000)) + .. self.name .. (math.random(1, 1000) ^ 2) + end + + if not self.game_name then + + self.game_name = tostring(race.names[math.random(1, #race.names)]) + self.nametag = S("Trader @1", self.game_name) + + self.object:set_properties({ + nametag = self.nametag, + nametag_color = "#00FF00" + }) + end + + if self.trades == nil then + mobs.add_goods(self, race) + end + + local player = clicker:get_player_name() or "" + + minetest.chat_send_player(player, + S("[NPC] Hello, @2, have a look at my wares.", + self.game_name, player)) + + -- Make formspec trade list + local formspec_trade_list = "" + local x, y + + for i = 1, 10 do + + if self.trades[i] and self.trades[i] ~= "" then + + if i < 6 then + x = 0.5 + y = i - 0.5 + else + x = 4.5 + y = i - 5.5 + end + + formspec_trade_list = formspec_trade_list + .. "item_image_button[".. x ..",".. y ..";1,1;" + .. self.trades[i][2] .. ";prices#".. i .."#".. self.id ..";]" + .. "item_image_button[".. x + 2 ..",".. y ..";1,1;" + .. self.trades[i][1] .. ";goods#".. i .."#".. self.id ..";]" + .. "image[".. x + 1 ..",".. y ..";1,1;gui_arrow_blank.png]" + end + end + + minetest.show_formspec(player, "mobs_npc:trade", "size[8,10]" + .. default.gui_bg_img + .. default.gui_slots + .. "label[0.5,-0.1;" .. S("Trader @1's stock:", self.game_name) .. "]" + .. formspec_trade_list + .. "list[current_player;main;0,6;8,4;]" + ) +end + + +minetest.register_on_player_receive_fields(function(player, formname, fields) + + if formname ~= "mobs_npc:trade" then return end + + if fields then + + local trade = "" + + for k, v in pairs(fields) do + trade = tostring(k) + end + + local id = trade:split("#")[3] + local self = nil + + if id ~= nil then + + for k, v in pairs(minetest.luaentities) do + + if v.object and v.id and v.id == id then + self = v + break + end + end + end + + if self ~= nil then + + local trade_number = tonumber(trade:split("#")[2]) + + if trade_number ~= nil and self.trades[trade_number] ~= nil then + + local price = self.trades[trade_number][2] + local goods = self.trades[trade_number][1] + local inv = player:get_inventory() + + if inv:contains_item("main", price) then + + inv:remove_item("main", price) + + local leftover = inv:add_item("main", goods) + + if leftover:get_count() > 0 then + + -- drop item(s) in front of player + local droppos = player:get_pos() + local dir = player:get_look_dir() + + droppos.x = droppos.x + dir.x + droppos.z = droppos.z + dir.z + + minetest.add_item(droppos, leftover) + end + end + end + end + end +end) + +mobs:register_egg("mobs_npc:trader", S("Trader"), "default_sandstone.png", 1) + +-- compatibility +mobs:alias_mob("mobs:trader", "mobs_npc:trader")