From 63ac092a14ca439a9cbcd96f3ba4e1b49167aeb6 Mon Sep 17 00:00:00 2001 From: qwertymine3 Date: Tue, 3 Nov 2015 14:16:05 +0000 Subject: [PATCH] Further work on mob API The mob api now has a conversion function --- mobs/.api.lua.swp | Bin 49152 -> 49152 bytes mobs/api.lua | 94 +++++++++++----------------------------------- mobs/api.lua~ | 93 ++++++++++++--------------------------------- 3 files changed, 45 insertions(+), 142 deletions(-) diff --git a/mobs/.api.lua.swp b/mobs/.api.lua.swp index cc8e910c5769ac046397949d3642ac031f433328..e3bd08f034f4b3e12d0d9f8fce14cfa98e1c6941 100644 GIT binary patch delta 3088 zcmb8x4^UJ^0LSq?K=cHZBT*R?P8blBKce^#MJ)e}nIvK&LlK_G15V)%xC8&BfemA& z?14U8CZszme-oCwkdvAZc zceS;?wY9#XbBE+SnrR-Hlqz@y3o-HFsGM+jXlqYHoHPYT8v4i-jzw|?$F8!1W4K(y zQIqcA48t^efpW4mnIa7ldWz{-kDx^XLJSY|c19Ow=g`wZLL9+f%tCKmp~X2ohY1*m zG>pLTKz)}vJs?~djYeVA?1dDZ<(38ZQkzRlDs#+rJ}D2@4~+C&_gubLn<3G6eD037 zc1xL-FS82zTW{~)Q=e2^>8L8tPqI4}m=nz@W^R|5IJ3PW11oiEwj#5|>ascP=Ja%P zRHattsMey)t`g0D*D()@A8bzPeC1xFs%gKO_e*yg6`ge&)$Jp)6c)A(r_^D!l$wjG z?B3ztyk&u_(qf&jRmOS0M}oRZybzuzs`pMhZ>VWdQ^J&~bVR6>@VeGhh*lhf8ym44 z8m1x{!MNN*h>JLicTtRq7z{JQ;Ez4@{{|M~X=Gz6CIpEZkxpSW)F6^^k^ybS61Y%~ zQfSCSEF#eh&7|=ge2%?%9<`{#Y-C{)g5ZzV?m`?w6WmzVeXtOA3dMK|sYpZ=&KiZ- ziS<|xhn|@7NVhSbXSXz-dG_YA?R59*+uO;!(dig#Qla-=YWo zMav-}9qQYPRFC>!)e(1Zo%+C|NWDh~QJn{;YHrdrjlstFcuu1zKH=~Egq}D0Yaf%P zP>3&>+6o3bc@RL{P2go^T zL9w^Cl$%SSeE}ypwbG&_&q~m13+jS{V!8-X;qUExnrng-9 zyb2elV=`j#J2Pby$kU$W7oZPQcz{w5m&ulX{&YKqv4Wwqr9kU>#h@#z+iCG}QiV zL>KHKP}Oi?J|-Xnm&wrIXu>;KhM6j011YHQq{8(fR$>t{F%{OO zo(#_VxEo>(^30aU<%OJqG9!Bco0GQ`%{jcimUG_@k| zwEZE&1GJNyw$GBAcYgX{O>^{>8^V1(u^!9x^kNEC2KfirIHqPLiK#;sreg{wAsQjL zNN7&rNBn@psK;VBQI2U);W|xlc4Gz9k9jBp;fL$o^$ISb1%Khs01@l?RaZj_#=i_t zCF>W=KmZOAls)=|#v|<4Wj4F!(wr{2bN3WXzO7~wHT_|(QR}n4X;P(DY;(G_$^y&W zvbbmNRqy@tbaPSP`joR=v)YPm);RUkl3;ffYR&|^tu%rD3rcOpC9Z@r%fhx&O0u=Y zVz-9TjuxI)Tr1H$&3GFx$5dA96?^s@`rR)J^8KduVYeEn|AQTV-Q;KchRMEFJ7m@; GjsF1z!qYYY delta 2840 zcmb8xd2ka|0LSs&v|tkmZ3Z$0%CT*S+Snve4yiz>!U*Gm76A{CE@`unVA-@eS}M|1 ztrsAQ4^Qww7)R6rI_o_OD0t#IMezWyspAY)#)3r@6~8YPVVwF0nfYusZ+G9m(eoZ+q-b>&4fwDJD23ZEQBS^rAel?z+l$FtQu;mR4V4iu$q!(t}eEK$dHuvo)( zv1rXHS7(Y&_RECJHC&x;mAcycId6ATPrvTUs6va6?#r*8eHCRRR-q0ig7CqCU;8LZ zJ3hhdeXQrTKp$(z>I+m+KI5|tDzmcvU23WzOHt<9yX&6Lm;7{OE6QH%!ZyTF1|N#> z7k58`AMrUh;}P5s9kVe5Za9#E@9D!AXv3pei#wf4O1Yk$X_$zyP|!v558)tMaV_Rx zBs>^_d}ugE_dZQ`QBj`edj+DHjd2)^Ty!}UJ5!K^~Sj1dZ%rB3; zhdr`Ttf|j)g(C6VnqZ?&O?tdG*kFpzIk{q=$61{Ir7ujH)mqRDX=XH`ohp*`(6DHT zhP~+-CTtJ6OVV|xTcI@tw1QwHR-h%qhAHpH>HbD7pryY{O2r<}AbCyy94_W|xqE6PyqfOq>C*0M<)AZtX0^e^ z)#2H4&r4avOc=5HU=5{XM#%zGcDE`Ti&L^JJ&McI#f-I_VOcE4J?>S4Aw_wPxR%O@ zvnUL-T<0IjcCO>m*aumZC0rGGz2$?}+0PnXaj2gN_y&k3Z*Os=GFL3~4e4*xEc7pm zMU%Dj{bsa5^J%4;)vUMVID?sr@>;L%YGzul+HzIRv1ZmS&lLNT6U8#G-9|(gcn8Q@ zhV)R2oOZjz#~FxkAs2<0u?}-^nOqbuVW$L{XlK+8;0su|7b|cx<|BY}(Zxf42p`}X z+=eDpVknOBjCW!Wb|HnOxCUkD4+jp~Q>-LB@V6obxjbHh9N5vplDP+)@feyh75Ny9 zqi4|&Jc$js5jrNI6fS(!n|ojrnoy4@!Z60MnTkWq=vTN86&R0E@Iu9hOwqHr3KKG0 zH?-JErX@5k@44zo~(kvJO#I7k*=z!sR8j&bN90vmBVWIW`1B8EwDK*j6CU>)wr zB1`4${K}l~M;rEFH+JGSOos!D#!;sHdEA3IE`=Ws93%o?V=rF7 zS|o8@fK3(VViqn(9`^GW;6*%$Ymko&{LWMzMhAYdwQeXBIS;sc*%@ijp^Z#9v z4p$D8lkM(tF-gz active_object_count then - return - end - if not mobs.spawning_mobs[name] then - return - end - pos.y = pos.y+1 - if not minetest.env:get_node_light(pos) then - return - end - if minetest.env:get_node_light(pos) > max_light then - return - end - if minetest.env:get_node_light(pos) < min_light then - return - end - if pos.y > max_height then - return - end - if minetest.env:get_node(pos).name ~= "air" then - return - end - pos.y = pos.y+1 - if minetest.env:get_node(pos).name ~= "air" then - return - end - if spawn_func and not spawn_func(pos, node) then - return - end - - if minetest.setting_getbool("display_mob_spawn") then - minetest.chat_send_all("[mobs] Add "..name.." at "..minetest.pos_to_string(pos)) - end - minetest.env:add_entity(pos, name) - end - }) + spawnlite.register_specific(name,nodes,nil,min_light,max_light,1/chance,nil,nil,max_height,nil) end function mobs:register_arrow(name, def) diff --git a/mobs/api.lua~ b/mobs/api.lua~ index 53a0e98..5509aec 100644 --- a/mobs/api.lua~ +++ b/mobs/api.lua~ @@ -25,6 +25,19 @@ local function get_mob_group(type,nodes) return nil end +local function spawnlite_tracker(action,name) + if action == "add" then + --Spawnlite + spawnlite.mobs[spawnlite.mobs[name].group].now = spawlite.mobs[spawnlite.mobs[name].group].now + 1 + spawnlite.mobs[name].now = spawnlite.mobs[self.name].now + 1 + elseif action == "remove" then + --Spawnlite + spawnlite.mobs[spawnlite.mobs[name].group].now = spawlite.mobs[spawnlite.mobs[name].group].now - 1 + spawnlite.mobs[name].now = spawnlite.mobs[self.name].now - 1 + end +end + + function mobs:register_mob(name, def) minetest.register_entity(name, { hp_max = def.hp_max, @@ -48,8 +61,6 @@ function mobs:register_mob(name, def) drawtype = def.drawtype, on_rightclick = def.on_rightclick, type = def.type, - --Spawnlite - group = def.group, attack_type = def.attack_type, arrow = def.arrow, shoot_interval = def.shoot_interval, @@ -143,8 +154,7 @@ function mobs:register_mob(name, def) on_step = function(self, dtime) if self.type == "monster" and minetest.setting_getbool("only_peaceful_mobs") then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() end @@ -158,8 +168,7 @@ function mobs:register_mob(name, def) end if player_count == 0 and self.state ~= "attack" then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() return end @@ -187,8 +196,7 @@ function mobs:register_mob(name, def) self.object:set_hp(self.object:get_hp()-damage) if self.object:get_hp() == 0 then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() end end @@ -222,8 +230,7 @@ function mobs:register_mob(name, def) self.object:set_hp(self.object:get_hp()-self.light_damage) if self.object:get_hp() == 0 then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() end end @@ -234,8 +241,7 @@ function mobs:register_mob(name, def) self.object:set_hp(self.object:get_hp()-self.water_damage) if self.object:get_hp() == 0 then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() end end @@ -246,8 +252,7 @@ function mobs:register_mob(name, def) self.object:set_hp(self.object:get_hp()-self.lava_damage) if self.object:get_hp() == 0 then --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) self.object:remove() end end @@ -482,11 +487,6 @@ function mobs:register_mob(name, def) self.object:setvelocity({x=0, y=self.object:getvelocity().y, z=0}) self.object:setyaw(math.random(1, 360)/180*math.pi) if self.type == "monster" and minetest.setting_getbool("only_peaceful_mobs") then - --Spawnlite - --[[ - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 - --]] self.object:remove() end self.lifetimer = 600 - dtime_s @@ -500,13 +500,10 @@ function mobs:register_mob(name, def) end end if self.lifetimer <= 0 and not self.tamed then - --Spawnlite - --[[ - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 - --]] self.object:remove() end + --Spawnlite + spawnlite_tracker("add",self.name) end, get_staticdata = function(self) @@ -516,8 +513,7 @@ function mobs:register_mob(name, def) } --Spawnlite - spawnlite.mobs[self.group].now = spawlite.mobs[self.group].now - 1 - spawnlite.mobs[self.name].now = spawnlite.mobs[self.name].now - 1 + spawnlite_tracker("remove",self.name) return minetest.serialize(tmp) end, @@ -536,51 +532,8 @@ function mobs:register_mob(name, def) }) end -mobs.spawning_mobs = {} function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, spawn_func) - mobs.spawning_mobs[name] = true - minetest.register_abm({ - nodenames = nodes, - neighbors = {"air"}, - interval = 30, - chance = chance, - action = function(pos, node, _, active_object_count_wider) - if active_object_count_wider > active_object_count then - return - end - if not mobs.spawning_mobs[name] then - return - end - pos.y = pos.y+1 - if not minetest.env:get_node_light(pos) then - return - end - if minetest.env:get_node_light(pos) > max_light then - return - end - if minetest.env:get_node_light(pos) < min_light then - return - end - if pos.y > max_height then - return - end - if minetest.env:get_node(pos).name ~= "air" then - return - end - pos.y = pos.y+1 - if minetest.env:get_node(pos).name ~= "air" then - return - end - if spawn_func and not spawn_func(pos, node) then - return - end - - if minetest.setting_getbool("display_mob_spawn") then - minetest.chat_send_all("[mobs] Add "..name.." at "..minetest.pos_to_string(pos)) - end - minetest.env:add_entity(pos, name) - end - }) + spawnlite.register_specific(name,nodes,nil,min_light,max_light,1/chance,nil,nil,max_height,nil) end function mobs:register_arrow(name, def)