From b6e66def0571a759ed732cf45d52851e16925f86 Mon Sep 17 00:00:00 2001 From: Duane Date: Wed, 13 Jul 2016 05:31:54 -0500 Subject: [PATCH] Add strength elixirs. --- abms.lua | 18 ++--- elixir.lua | 69 ++++++++++++++++++ init.lua | 12 +++ mobs.lua | 10 +++ textures/fun_caves_elixir_strength_boar.png | Bin 0 -> 1347 bytes textures/fun_caves_elixir_strength_bull.png | Bin 0 -> 1328 bytes .../fun_caves_elixir_strength_elephant.png | Bin 0 -> 1322 bytes .../fun_caves_elixir_strength_grizzly.png | Bin 0 -> 1349 bytes textures/fun_caves_elixir_strength_lion.png | Bin 0 -> 1350 bytes textures/fun_caves_elixir_strength_rhino.png | Bin 0 -> 1324 bytes 10 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 textures/fun_caves_elixir_strength_boar.png create mode 100644 textures/fun_caves_elixir_strength_bull.png create mode 100644 textures/fun_caves_elixir_strength_elephant.png create mode 100644 textures/fun_caves_elixir_strength_grizzly.png create mode 100644 textures/fun_caves_elixir_strength_lion.png create mode 100644 textures/fun_caves_elixir_strength_rhino.png diff --git a/abms.lua b/abms.lua index a93208f..b800d89 100644 --- a/abms.lua +++ b/abms.lua @@ -192,30 +192,26 @@ minetest.register_globalstep(function(dtime) -- Remove status effects. local status = fun_caves.db.status[player_name] - for name, stat in pairs(status) do - local def = fun_caves.registered_status[name] + for status_name, status_param in pairs(status) do + local def = fun_caves.registered_status[status_name] if not def then - print('Fun Caves: Error - unregistered status ' .. name) + print('Fun Caves: Error - unregistered status ' .. status_name) break end local remove - if type(stat.remove) == 'number' then - if stat.remove < time then + if type(status_param.remove) == 'number' then + if status_param.remove < time then remove = true end elseif def.remove then remove = def.remove(player) else - print('Fun Caves: Error in status remove for ' .. name) + print('Fun Caves: Error in status remove for ' .. status_name) end if remove then - if def and def.terminate then - fun_caves.db.status[player_name][name] = def.terminate(player) - else - fun_caves.db.status[player_name][name] = nil - end + fun_caves.remove_status(player_name, status_name) elseif def.during then def.during(player) end diff --git a/elixir.lua b/elixir.lua index 3450979..b3e976f 100644 --- a/elixir.lua +++ b/elixir.lua @@ -204,6 +204,16 @@ minetest.register_craft({ }) +fun_caves.register_status({ + name = 'damage_elixir', + terminate = function(player) + local player_name = player:get_player_name() + minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'You feel weaker...')) + fun_caves.db.status[player_name].damage_elixir = nil + end, +}) + + fun_caves.register_status({ name = 'armor_elixir', terminate = function(player) @@ -235,6 +245,14 @@ if fun_caves.expire_elixir_on_death then end +local function increase_damage(user, bonus) + local player_name = user:get_player_name() + + minetest.chat_send_player(player_name, 'You feel strong...') + fun_caves.set_status(player_name, 'damage_elixir', elixir_duration, {bonus = bonus}) +end + + local function armor(user, factor) local player_name = user:get_player_name() local armor = user:get_armor_groups() @@ -305,3 +323,54 @@ if fun_caves.elixir_armor then }) end end + + +local descs = { + {'boar', 2, 'fun_caves:meteorite'}, + {'lion', 4, 'fun_caves:eternal_ice_crystal'}, + {'grizzly', 6}, + {'bull', 8}, + {'rhino', 10}, + {'elephant', 12}, +} + +for _, desc in pairs(descs) do + local name = desc[1] + local uname = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end) + local bonus = desc[2] + minetest.register_craftitem("fun_caves:elixir_strength_"..name, { + description = 'Dr Robertson\'s Patented '..uname..' Strength Elixir', + drawtype = "plantlike", + paramtype = "light", + tiles = {'fun_caves_elixir_strength_'..name..'.png'}, + inventory_image = 'fun_caves_elixir_strength_'..name..'.png', + groups = {dig_immediate = 3, vessel = 1}, + sounds = default.node_sound_glass_defaults(), + on_use = function(itemstack, user, pointed_thing) + increase_damage(user, bonus) + itemstack:take_item() + return itemstack + end, + }) + + if desc[3] then + minetest.register_craft({ + type = "shapeless", + output = 'fun_caves:elixir_strength_'..name, + recipe = { + 'mobs_slimes:green_slimeball', + desc[3], + "vessels:glass_bottle", + }, + }) + + minetest.register_craft({ + type = "shapeless", + output = 'fun_caves:elixir_strength_'..name, + recipe = { + 'fun_caves:syrup', + desc[3], + }, + }) + end +end diff --git a/init.lua b/init.lua index df6c48d..ede0562 100644 --- a/init.lua +++ b/init.lua @@ -148,6 +148,18 @@ function fun_caves.set_status(player_name, status, time, param) end end +function fun_caves.remove_status(player_name, status) + local player = minetest.get_player_by_name(player_name) + local def = fun_caves.registered_status[status] + if player and def then + if def.terminate then + fun_caves.db.status[player_name][status] = def.terminate(player) + else + fun_caves.db.status[player_name][status] = nil + end + end +end + --dofile(fun_caves.path .. "/recipe_list.lua") diff --git a/mobs.lua b/mobs.lua index ec762fa..62af420 100644 --- a/mobs.lua +++ b/mobs.lua @@ -155,8 +155,18 @@ for _, mob in pairs(mob_stats) do end end +local function fun_caves_punch(self, puncher, time_from_last_punch, tool_capabilities, dir) + local player_name = puncher:get_player_name() + if fun_caves.db.status[player_name].damage_elixir then + tool_capabilities.damage_groups.fleshy = tool_capabilities.damage_groups.fleshy + fun_caves.db.status[player_name].damage_elixir.bonus + end + self.on_punch_orig(self, puncher, time_from_last_punch, tool_capabilities, dir) +end + for _, mob in pairs(mob_stats) do if minetest.registered_entities[mob.name] then + minetest.registered_entities[mob.name].on_punch_orig = minetest.registered_entities[mob.name].on_punch + minetest.registered_entities[mob.name].on_punch = fun_caves_punch minetest.registered_entities[mob.name].damage = mob.damage minetest.registered_entities[mob.name].hp_min = math.ceil(mob.hp * 0.5) minetest.registered_entities[mob.name].hp_max = math.ceil(mob.hp * 1.5) diff --git a/textures/fun_caves_elixir_strength_boar.png b/textures/fun_caves_elixir_strength_boar.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5132a8501d01463bfe9f20c2ebe7a0a6fba476 GIT binary patch literal 1347 zcmV-J1-$x+P)RR8<(q|L5FgX70?i(CK0qDs~xKC=_HV;DRYaL=2E%#Q36#3lI9FiTYrS ziHQ(C8{%TsGp#*D z^ol3E#+)@Xs{jLY0AOKREK@drz6aCN(sn8&rHtNAVz*;~2S6!qr7x#@l8IyrBk55? zNTCCu*#NMo>`C$1x~)HFyN61e8XE`V)$tpVP-GAQn+*WrO5dAPQE6)tOKe`bDGgu} zKzg<;fW|pVO@ft1om3`O4?qWC003ib<^dEb(wVN9#%N+=e#Yf%CIwG4yIh*e_r^mkXdQc#6eYGs8N7E;vx*E>Z~Am^#SzE)k+R{>}PU=~sbynvOE188u4r}^o(wr-yns$V1p^kqxd85hodv;BD2 z*Kr~JZ2&e9Q7~VKLTaE|NPofG`(Nx#_6|QZXzOHX2D6N?zN~#CJMht)Prb1FxlI68 z6Vak#D_{Vqd+)2=@he?tp0L6T11Ha%cI}L3+9}6us)$GKyJv^y^!&B-*e}QG8Dn=7 zQ6Qg*^KBgsfOhKp!y8vNbeQ3}&HUbu)zNS$%oaDd>Y-o|p^#}_IrAeOId!OITgSFv z0hj>XVgWD!6e_I$zm5FF`aov0P?~6F5>LD zlQ8sttY{y=wf;UVY&{Rh^-w;i+|Ef~Q~(7)8lhc)Q97DrCy88xv(+mj! zqNo75CJ+FK6U36XFqSV3Ba@N1^qURNfc5K2kxKOOH7#q$0AzAD6vqN7C4}@90HuMc zJ)ft1jU@l#CtDB$D&r;i?3B%>rd+nTesMxdnbLK=cnWBm2Ga+s-n=Zxoo+JEKKcBoHC46Q)8~I!KQunnBz-^1IfG?I?1p(w z0}rh3?CMy)c5h3(ZGwmjKA`?D#JlhB;zSf9qIM-j=lJ;OmSi%qos`-_L~Dqs`skNO zw8H+h3WQ*c!Je|Y=edTIk^_LQ>nack3Qg0buIUA3{x_<8Yv;$eZtVa7002ovPDHLk FV1mtNZxv`V4}ts zV^Cv|a5D-#kQgJ0qK0TN3IZaatVm)6o z?trDtw1P{%>^a@?=1bd@VTh$fSPvjJshOCFP?MfbL|e)pE+2VhO|x9~+?;MA+TlsB zAuG+~W`Kb?05G?#e7tPdEDu(gC+$Q?DHXeu!0to>4}jK2IC(MI9UqM+a6LI}N+ksV znhF3rW2fX}t2Tb0?iwm;Y-kv0u5SJ#8j21AU{e7gUFCZvmD6k<4a@aQ*Chd@03@eM z0&v41#T8g_%t?$V>Hr7;CIB$TCLchPCc%VeoYC0Wa1a2`LQGW#ICDM6@Py%xB}a<0 zege0*Ye512u?>T)Xt>Di?(eE}m88mWaX2l#h*YxnzuqZG2C~|65E=oPU7hDzoir@R z*UrJO_RJAnECVnffR#@j7){*dLkT|8~FOv3D+L?EIZ*?jg`&O`|sVto$f1le{%AZI>y*yA`0Z< zIM>$U0Qm854z68V-)==pn~eL~m&YQZ2wTuJM}&ewghH0pdFnelbo@Z;ruI!g1F!(N zg#uszC{$b-+PnW_ws8JR0b%&I=TK2BCc|M<*SF1de;>FStthWD0O(xLgT;tId?UyhWQPt!FOHOcIOr3wiE0K^3I%mCE7jtltlrxY%A zUq>?8jqO{jQCckU#Sbm0D5k`8b#4EC!ZqB89;08KKj7p1MKFokxa_$dqwumqIKm6fbpyhg#l1XK`LJZ&>T#^cR21BS6N0)X;6N6Y#c%`{CX|T zG8vaGs9P|qlu8I83MT>Q9F`f-yZ67_WPDE{5%8na1hBw6Hqnk^31Iqva1h+{< zK~z}7y_Z>RR8<(q|7W>(_U@%ppkjB{iUKVag;XIT21qbse9^>(2Yu2+eeuaei7#qU z9~5Ot6i757M51vCkstI}Ojhy>LU)%(sjfj>MS^*2d z{13j_-FW%jnWw{%#etvBoOCm3&(0(ryS}n9`rrdQgwy@^y+=+TsbP%WM?`^K7S1(w z1ORdT=Ytzp)wbG^(gwb^wJjD2McA^2MKTl&A{4Ui%V&O}L&py^Z)@Fl0e}s_EffF) zK%wHw(BA!DvgJ$LB_#JVoU4`%hngw4%I<12DPvgX0Bwb0$-An9ObCWu@At!T3`&Y6j-N>3&DR!SUR62QBEOED z4}dDEnBS|dKJnGj5x6d)f6zn!pof6X@O$St0;Lg1E=;c0=aYs8fNE)Iy*BFF%#s`f zgD!{wBEWG8*W*55CQuYDbMgtooB@n6?h_9^)yHne`G)ny&}N#964>-eDU@-IXB1^O zFI*Nd#^8CLJ11J9)l1Jtt)RG2fMEI`HSri1wa)#4FQk>K%AgB zzg6ekTZ?XcBRP7FuW4={29VCWp)deiYbfm-07ihBj}Iq&L5fF8gNhg+B?BYICMR9C ztY+D$);cMrEL;o-Az)hpvuFQD4PMw{sR{6;W3%{8W{oD9jE^$e9|t2VX!d>aNgWXl z7rY&hrBjm^yZ$JP6qOAq4r9Q`@r}ti1jjX`NVCeSg}qm<{x#Wi_0OS#)`9HlCjG)Q zFCDI~nm2Lsw-XN!jSSUm-;Z(55DrH(wF~O|*0*(>YrVgHPjlnaF(S(Qfcn1>?|rz7 z6Hz%4wHT#3Mn>XW5{c36WXu*KT0=y0zdm|MY&7aR2}S literal 0 HcmV?d00001 diff --git a/textures/fun_caves_elixir_strength_grizzly.png b/textures/fun_caves_elixir_strength_grizzly.png new file mode 100644 index 0000000000000000000000000000000000000000..2edc302ad4b737ce3248e5260db01a3395407d3e GIT binary patch literal 1349 zcmV-L1-kl)P)Jy_YZ31RsnuWZIRS2jb zYWx9MqK4^T@nip`1s}YzS8}eeB*JC@k!j7uRD_Dud?MNreWq;e*$pwV>g9!fMD(UB z+=iSq)0+VXW&^;YXjvv&SLebEYH2GKkWxk-B(MjOzy+Wb52mlB`;v)d3U|_RLr9?m zpqT)$verHE{JO0dCVNLp8XFphVsm1*!-4QH05%f^+3_}4KEGQ+_Vqi?Xc!jXb1f~CPp;f911HUITaQ8JLzRs*3CfYE#XarRnIvN1&%rD0_uB>k}L$jOsV{Pq`P$0yXG%eHvem?>M)4bkwo{pb6(!8y0+Z6yN z0H;_03;+d6D*}fOf611%tkI!!&vI=li9|#&XsG(uhn>HNZiUOssyG0ZZ(qn4fB--w z?+D9d+$a2+!3@ovaA9XG2;IQ%gEvBDWtFPBygHq0ShAP^06^O`XLnVby80gzHcNKXM! z8kjnLA?vMJUCRBl{laBHsFdN#5V365VM}V4B&3unUDt~zfu?CN4WBx2_>(3#Xt4Ao zc*-_e{4O&RDW=C0OurQeBg3yckAB`jL}Nv7#}k=!_FC`NXs9GQEI5<`BimETvI(}M zNRVU|Rds_mZvL6=zxl^VzJBwPAUEA)UfK2PSJhQ>C(r%%>ysnnBaPDYBAhb>gJG+F zUgOaE_Kxnh8pvb6+mQ0m6*;@ky=DVyP{iSBad!OiZ#!*^%2pl zu5cR**37H|49o_A#nISgbm2l5W{_vCOh8H*xs$~1!~z$9Qd%&3Iomg$9?#%bcGwV7 z=m2Oo0Ia+74+3Db0U#XdxmAg3i-&_^>*~!}08;?6 zvt56ei6BEOJ0K5P(TMBUIxVGl%nlq6d zsVvOnyS-h@3h=LG7-WWn6-HmGH{nP@iC|?gC)|*bV*Y=3 zw4~e$7y#zK`_2NQUpfcNe$&{#r*xf|r zD`w(iTZaSSr+zrHX>~(~8Jg3q-Pf@;5(C82JkefR%p=rU-NTtr8 zw)#9O!`;~W@b9o47xAjNRghkmQvn4)8i7b=Zk?a?T(K~C(?!qKJo2_e-CPrsQxfxP zVw&VLb0ARwL{)r#N*W=4__I+c3AD8Yux?ERqiGLc98bgWg`jI(6`Os@0PW2k*VB&4 z8W;I7I_BZ2#}lZlG11l%gySec(Ev&*=dlN#7+_<=+Rm;RDk2=O?@8f< zgEx_g8`!ob3ZWe3DnW&hmk)q31}UXe9gf?EaNUu#z_Al!5CWK*QaJwg7(9>Adwsw& z&42(P%H4(lNB|&>AfzNj!W^qsgpr*PNZoK?Sqho-b!}bi`Vjz=1slo(Af<$mo&uma zm^yhj@3k%uYpC>#iYj15Lj=F36wBuwwyb_xT1uJGb-jERaL!>GKDF=Q`^|39VA&kB zjBT>vF=nJQOdn1&{l+jD8Gd!(lMfq-Xr%1h@x){{f4TQkG*l5C6dIHQBimETvI(}M zNRVWSnuV!9u3gRdU%N6??7T%;P&nO8KL7NKpVrmP%bot^$A^YShnl44MKp~e7z|qt zcQp+>xVE#qW7Yb7t;wYmL{#zt^?xDWd2f$KL@^?2S3-1-jt*}dA5ZTfrM3~#IwGq5 z{L7=fv_Gv9AsAz@@|Nbhjv=Mg06^Du<@5Ok=UnPsFDdhX01ZrWvMDGFM*si-07*qo IM6N<$f+)vr0{{R3 literal 0 HcmV?d00001 diff --git a/textures/fun_caves_elixir_strength_rhino.png b/textures/fun_caves_elixir_strength_rhino.png new file mode 100644 index 0000000000000000000000000000000000000000..acf8c5ae382e760fae2cf64077c813aa3a652dd0 GIT binary patch literal 1324 zcmV+{1=IS8P) zK~z}7y_Z>RR8<(q|7W>(_7>V{kpcy}3}tIYg#s>^8c@Ul2?o>`OR?8zih!r4?zZmA1pobh*9DIp_0b8ta2`hD`etN=@c(K86 zfu+K-!*_kveR|PbyLM{M+(ksYedX8Z zt(jT{7?=wHODZZyDi$p8VMj&I$wsu+iCanRRxI!V7{jBvi@B~$I+MkX+<>LDk^pEr z0Gx4WRBd0k<d$y2-Uon92Y~W);LoV4c0@d?Hm%&412768H(eG$ za86oiu=0eP9m&=LkN_+IV2n*YfFVPYNy7xA;o*TW0Fj57E(HYhe3$!@d&9ZG^87rZ z$?aNFfPXE+AUhr{v$}dZt30i!Dq0>LQ+`ZoHTS>XDTxAkZv_Yq0Ibf-XPewH*lu9l zLtlTiSPHocz%l@KF?GO;SP40RIxlb=pMGu2wt11-rCLF*XkKTXJ^kgjV`q-1ln%B6 zSWiUZLLrK&f!Rt2i(cRNVq2#BuZQ{^NtUo!)QZU!EgRVW4_|reg+0%01hATjmX=xp z3&7lWj_yfaKGX3;G`1x4O-H-ujQF;bb?t_#RQ%q%cL=xZ_uD`F>9bnK*d0U^DrDk9 zTSov8C%!whVP##b9h=$6?`d6~h(%&-dE;Uk35OAh*!Ja)lXUpR!KSUPTh9To0eGbX zU;rpmUKQDQ;1kxoY^{Xkf#bVWmPn{*)G~D~^SwWMug8;>vp4`#=)O=W00Dr?+)z%y zcu0kX#VjEM0iGd@4!OA0b0t<;S#4^PHM#tTrAu9e#3b{r5cI~j3rN`C0{#!UaPA9) z2 z1Bn5kW+dnKXe%bp|1t*78T^0%0yqPbNefme2FZmfH2b0fS{hrgr9GPs4*H-;HKq;F z-kt-@7|P-mZZSnzFn}?}d-T4?dfCkZUN=7i6%fDxDHvQ=QmG z&{})d@uX`h-`}yl8oPJZB5ZRsx5V-0tMyp8FoMo&y@72<6aZD~HUvNl0C9o>fbw#Q zmv_(qXQdJh+4MEOrfKaUfRVfnr2)`dL+QW(FapfHe$cK=`0XJz_vnW?}7Ik{iwxqW8hiWW&<~wmCiCbkY@7w02oWOHu zHg zeS;HGB@wk4rP_vu1~z9h>1|}pW+GZcM6*Br{IDqQPpe1>#u%J&hx@)~X{|W`NGVMy i6jnkAErl#9^S=QC#a70KjaCBy0000