From 2c5d2ebee68c2f8c4358fc7f9c977b7196d08f1d Mon Sep 17 00:00:00 2001 From: Tai Kedzierski Date: Sun, 23 Dec 2018 01:55:33 +0000 Subject: [PATCH] namespace settings, alternative rainbow staff --- init.lua | 5 ++- rainbow_staff.lua | 110 ++++++++++++++++++++++++++++------------------ settingtypes.txt | 8 ++-- 3 files changed, 76 insertions(+), 47 deletions(-) diff --git a/init.lua b/init.lua index 9fa79e2..ec1ced1 100644 --- a/init.lua +++ b/init.lua @@ -1,8 +1,9 @@ local path = minetest.get_modpath("nssm") nssm = {} -nssm.mymapgenis = tonumber(minetest.setting_get('mymapgenis')) or 7 -nssm.multimobs = tonumber(minetest.setting_get('multimobs')) or 1000 +nssm.mymapgenis = tonumber(minetest.settings:get('nssm.mymapgenis')) or 7 +nssm.multimobs = tonumber(minetest.settings:get('nssm.multimobs')) or 1000 +nssm.init_rainbow_staff = minetest.settings:get_bool('nssm.classic_rainbow_staff') dofile(path.."/spawn.lua") diff --git a/rainbow_staff.lua b/rainbow_staff.lua index d84d519..5cb8aea 100644 --- a/rainbow_staff.lua +++ b/rainbow_staff.lua @@ -1,46 +1,72 @@ ---rainbow! -minetest.register_entity("nssm:rainbow", { - textures = {"transparent.png"}, - velocity = 10, - hp_max = 50, - on_step = function (self, pos, node, dtime) - self.timer = self.timer or os.time() +-- The Rainbow Staff is a reward for defeating the final boss +-- Classic implementation produces ranbow blocks in any direction it is pointed at and used +-- This tends to be problematic on servers, so is replaced with a powerful tool instead +-- if classic rainbow staff is not enabled - local pos = self.object:getpos() - if minetest.is_protected(pos, "") then - return - end +if nssm.classic_rainbow_staff then + minetest.register_entity("nssm:rainbow", { + textures = {"transparent.png"}, + velocity = 10, + hp_max = 50, + on_step = function (self, pos, node, dtime) + self.timer = self.timer or os.time() - if os.time() - self.timer > 10 then - minetest.set_node(pos, {name="nyancat:nyancat"}) - self.object:remove() - end + local pos = self.object:getpos() + if minetest.is_protected(pos, "") then + return + end - if minetest.get_node(pos) then - local n = minetest.get_node(pos).name - if n ~= "nyancat:nyancat_rainbow" then - if n=="air" then - minetest.set_node(pos, {name="nyancat:nyancat_rainbow"}) - else - minetest.chat_send_all("Nome:"..n) - minetest.set_node(pos, {name="nyancat:nyancat"}) - self.object:remove() - end - end - end - end -}) + if os.time() - self.timer > 10 then + minetest.set_node(pos, {name="nyancat:nyancat"}) + self.object:remove() + end -minetest.register_tool("nssm:rainbow_staff", { - description = "Rainbow Staff", - inventory_image = "rainbow_staff.png", - on_use = function(itemstack, placer, pointed_thing) - local dir = placer:get_look_dir(); - local playerpos = placer:getpos(); - local obj = minetest.add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "nssm:rainbow") - local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6} - obj:setvelocity(vec) - return itemstack - end, - groups = {not_in_creative_inventory=1,} -}) + if minetest.get_node(pos) then + local n = minetest.get_node(pos).name + if n ~= "nyancat:nyancat_rainbow" then + if n=="air" then + minetest.set_node(pos, {name="nyancat:nyancat_rainbow"}) + else + minetest.chat_send_all("Nome:"..n) + minetest.set_node(pos, {name="nyancat:nyancat"}) + self.object:remove() + end + end + end + end + }) + + minetest.register_tool("nssm:rainbow_staff", { + description = "Rainbow Staff", + inventory_image = "rainbow_staff.png", + on_use = function(itemstack, placer, pointed_thing) + local dir = placer:get_look_dir(); + local playerpos = placer:getpos(); + local obj = minetest.add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "nssm:rainbow") + local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6} + obj:setvelocity(vec) + return itemstack + end, + groups = {not_in_creative_inventory=1,} + }) + +else + minetest.register_tool("nssm:rainbow_staff", { + description = "Rainbow Bludgeon", + inventory_image = "rainbow_staff.png", + tool_capabilities = { + full_punch_interval = 0.2, + max_drop_level=1, + groupcaps={ + snappy={times={[1]=0.80, [2]=0.40, [3]=0.20}, uses=70, maxlevel=1}, + crumbly={times={[1]=0.80, [2]=0.40, [3]=0.20}, uses=70, maxlevel=1}, + choppy={times={[1]=0.80, [2]=0.40, [3]=0.20}, uses=70, maxlevel=1}, + cracky={times={[1]=0.80, [2]=0.40, [3]=0.20}, uses=70, maxlevel=1}, + fleshy={times={[1]=0.80, [2]=0.60, [3]=0.20}, uses=140, maxlevel=1} + }, + damage_groups = {fleshy=20}, + }, + + groups = {not_in_creative_inventory=1,} + }) +end diff --git a/settingtypes.txt b/settingtypes.txt index a4f5d1c..e706f66 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,15 +1,17 @@ # ABOUT SETTINGS # Mapgen: write here (after "int") 6 (mgv6) or 7 (mgv7 or valleys or fractal or flat) -mymapgenis (Mapgen) int 7 +nssm.mymapgenis (Mapgen) int 7 # Mobs-Multiplier: multiplier defining the spawn abundance for the mobs: # 0 = spawn disabled # a number between 0 and 1000 = less then default # 1000 = default # more than 1000 = suicide is not the fastest way of dying -multimobs (Multimobs) int 1000 +nssm.multimobs (Multimobs) int 1000 # Difficult-level: # Multiplier to raise life and damage of the mobs -mob_difficulty (Mob_difficulty) int 1 +nssm.mob_difficulty (Mob difficulty) int 1 + +nssm.classic_rainbow_staff (Use the classical rainbow staff) bool true