Compare commits
5 Commits
b84c6e000d
...
794af1b4d8
Author | SHA1 | Date |
---|---|---|
AiTechEye | 794af1b4d8 | |
AiTechEye | c11f74fbe1 | |
AiTechEye | be9ef5889c | |
AiTechEye | 156bc742f0 | |
AiTechEye | f62e9eff79 |
|
@ -2,3 +2,7 @@
|
|||
code/media license: CC0
|
||||
|
||||
minetest temperature survive mod
|
||||
|
||||
privilege **no_temperature** let you ignore temperatures (relogin to take effect)
|
||||
|
||||
use **tempsurvive:thermometer** to check temperatures
|
||||
|
|
183
init.lua
183
init.lua
|
@ -1,4 +1,5 @@
|
|||
tempsurvive={
|
||||
speed=0.01,
|
||||
step_timer=0,
|
||||
step_time=1,
|
||||
player={},
|
||||
|
@ -37,12 +38,27 @@ tempsurvive={
|
|||
}
|
||||
}
|
||||
|
||||
tempsurvive.new=function(player)
|
||||
local name=player:get_player_name()
|
||||
tempsurvive.player[name]={
|
||||
temp=0,
|
||||
heat_resistance=40,
|
||||
coldness_resistance=-10,
|
||||
full_resistance=minetest.check_player_privs(name, {no_temperature=true}),
|
||||
}
|
||||
end
|
||||
|
||||
minetest.register_privilege("no_temperature", {
|
||||
description = "Not affected by temperatures (relogin to take effect)",
|
||||
give_to_singleplayer= false,
|
||||
})
|
||||
|
||||
minetest.after(0.1, function()
|
||||
local groups_to_change={}
|
||||
for i,v in pairs(tempsurvive.nodes) do
|
||||
if string.find(i,":")==nil then
|
||||
groups_to_change[i]=v
|
||||
else
|
||||
elseif minetest.registered_nodes[i] then
|
||||
local group=table.copy(minetest.registered_nodes[i].groups or {})
|
||||
group.tempsurvive=1
|
||||
group.tempsurvive_add=v.add
|
||||
|
@ -111,9 +127,6 @@ tempsurvive.spread_temperature=function(target_pos,pos,add,rad)
|
|||
local d=vector.distance(pos,np)
|
||||
local nod=minetest.registered_nodes[minetest.get_node(np).name]
|
||||
if d<=rad and not checked[ta] and nod and not nod.walkable then
|
||||
|
||||
--minetest.add_entity(np, "tempsurvive:dot")
|
||||
|
||||
if vector.distance(target_pos,np)<=1 then
|
||||
return add/td
|
||||
end
|
||||
|
@ -129,22 +142,6 @@ tempsurvive.spread_temperature=function(target_pos,pos,add,rad)
|
|||
return 0
|
||||
end
|
||||
|
||||
|
||||
minetest.register_entity("tempsurvive:dot",{
|
||||
hp_max = 1,
|
||||
physical = false,
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
visual = "sprite",
|
||||
visual_size = {x=0.2, y=0.2},
|
||||
textures = {"bubble.png^[colorize:#0000ff"},
|
||||
on_step = function(self, dtime)
|
||||
self.timer=self.timer+dtime
|
||||
if self.timer<0.5 then return self end
|
||||
self.object:remove()
|
||||
end,
|
||||
timer=0,
|
||||
})
|
||||
|
||||
tempsurvive.get_bio_temperature=function(pos)
|
||||
if pos.y<-50 then return 0 end
|
||||
local p={x=math.floor(pos.x),y=0,z=math.floor(pos.z)}
|
||||
|
@ -159,15 +156,6 @@ tempsurvive.get_bio_temperature=function(pos)
|
|||
end
|
||||
end
|
||||
|
||||
tempsurvive.new=function(player)
|
||||
tempsurvive.player[player:get_player_name()]={
|
||||
temp=0,
|
||||
status=10,
|
||||
heat_resistance=40,
|
||||
coldness_resistance=-10,
|
||||
}
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if tempsurvive.step_timer>tempsurvive.step_time then
|
||||
tempsurvive.step_timer=0
|
||||
|
@ -178,49 +166,45 @@ minetest.register_globalstep(function(dtime)
|
|||
for _,player in ipairs(minetest.get_connected_players()) do
|
||||
|
||||
local ptemp=tempsurvive.player[player:get_player_name()]
|
||||
if not ptemp then return end
|
||||
local pos=player:get_pos()
|
||||
local temp=tempsurvive.get_bio_temperature(pos)
|
||||
if ptemp and not ptemp.full_resistance then
|
||||
local pos=player:get_pos()
|
||||
local temp=tempsurvive.get_bio_temperature(pos)
|
||||
|
||||
local a=minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3}, {x=pos.x+3, y=pos.y+3, z=pos.z+3}, {"group:tempsurvive"})
|
||||
local a=minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3}, {x=pos.x+3, y=pos.y+3, z=pos.z+3}, {"group:tempsurvive"})
|
||||
|
||||
for i,no in pairs(a) do
|
||||
local name=minetest.get_node(no).name
|
||||
temp=temp+tempsurvive.spread_temperature(
|
||||
pos,
|
||||
no,
|
||||
minetest.get_item_group(name,"tempsurvive_add"),
|
||||
minetest.get_item_group(name,"tempsurvive_rad")
|
||||
)
|
||||
end
|
||||
for i,no in pairs(a) do
|
||||
local name=minetest.get_node(no).name
|
||||
temp=temp+tempsurvive.spread_temperature(
|
||||
pos,
|
||||
no,
|
||||
minetest.get_item_group(name,"tempsurvive_add"),
|
||||
minetest.get_item_group(name,"tempsurvive_rad")
|
||||
)
|
||||
end
|
||||
|
||||
ptemp.temp=ptemp.temp-(math.floor(ptemp.temp-temp)*0.01)
|
||||
ptemp.temp=ptemp.temp-(math.floor(ptemp.temp-temp)*tempsurvive.speed)
|
||||
|
||||
if ptemp.temp<ptemp.coldness_resistance then
|
||||
player:punch(player,1+math.floor((ptemp.temp-ptemp.coldness_resistance)*-0.1),{full_punch_interval=1,damage_groups={fleshy=1}})
|
||||
elseif ptemp.temp>ptemp.heat_resistance then
|
||||
player:punch(player,1+math.floor((ptemp.temp-ptemp.heat_resistance)*0.5),{full_punch_interval=1,damage_groups={fleshy=1}})
|
||||
end
|
||||
if ptemp.temp<ptemp.coldness_resistance then
|
||||
player:punch(player,1+math.floor((ptemp.temp-ptemp.coldness_resistance)*-0.1),{full_punch_interval=1,damage_groups={fleshy=1}})
|
||||
elseif ptemp.temp>ptemp.heat_resistance then
|
||||
player:punch(player,1+math.floor((ptemp.temp-ptemp.heat_resistance)*0.5),{full_punch_interval=1,damage_groups={fleshy=1}})
|
||||
end
|
||||
|
||||
local pt=math.floor(math.abs(ptemp.temp))
|
||||
|
||||
local pt=math.floor(math.abs(ptemp.temp))
|
||||
print("temp, ptemp",temp,ptemp.temp)
|
||||
--print("% heat",(pt/math.abs(ptemp.heat_resistance))*20)
|
||||
--print("% cold",(pt/math.abs(ptemp.coldness_resistance))*20)
|
||||
|
||||
|
||||
if ptemp.temp<0 and pt<=ptemp.coldness_resistance*-1 then
|
||||
local t=math.floor(pt/math.abs(ptemp.coldness_resistance)*15)
|
||||
local ht=tempsurvive.n2dhex(math.ceil(t/2))
|
||||
player:hud_change(ptemp.bar, "text", tempsurvive.bar.text .."^[colorize:#00" .. tempsurvive.n2dhex(15-t) .. tempsurvive.n2dhex(t) .."cc")
|
||||
player:hud_change(ptemp.bar, "number", 20-math.floor(pt/math.abs(ptemp.coldness_resistance)*20))
|
||||
player:hud_change(ptemp.screen, "text", tempsurvive.screen.text .."^[colorize:#00" .. ht .. tempsurvive.n2dhex(t) .. ht)
|
||||
elseif ptemp.temp>=0 and pt<=ptemp.heat_resistance then
|
||||
local t=math.floor(pt/math.abs(ptemp.heat_resistance)*15)
|
||||
local ht=tempsurvive.n2dhex(math.ceil(t/2))
|
||||
player:hud_change(ptemp.bar, "text", tempsurvive.bar.text .."^[colorize:#" .. tempsurvive.n2dhex(t) ..tempsurvive.n2dhex(15-t) .."00cc")
|
||||
player:hud_change(ptemp.bar, "number", 20+math.floor(pt/math.abs(ptemp.heat_resistance)*20))
|
||||
player:hud_change(ptemp.screen, "text", tempsurvive.screen.text .."^[colorize:#" .. tempsurvive.n2dhex(t) .. ht .. "00" .. ht)
|
||||
if ptemp.temp<0 and pt<=ptemp.coldness_resistance*-1 then
|
||||
local t=math.floor(pt/math.abs(ptemp.coldness_resistance)*15)
|
||||
local ht=tempsurvive.n2dhex(math.ceil(t/2))
|
||||
player:hud_change(ptemp.bar, "text", tempsurvive.bar.text .."^[colorize:#00" .. tempsurvive.n2dhex(15-t) .. tempsurvive.n2dhex(t) .."cc")
|
||||
player:hud_change(ptemp.bar, "number", 20-math.floor(pt/math.abs(ptemp.coldness_resistance)*20))
|
||||
player:hud_change(ptemp.screen, "text", tempsurvive.screen.text .."^[colorize:#00" .. ht .. tempsurvive.n2dhex(t) .. ht)
|
||||
elseif ptemp.temp>=0 and pt<=ptemp.heat_resistance then
|
||||
local t=math.floor(pt/math.abs(ptemp.heat_resistance)*15)
|
||||
local ht=tempsurvive.n2dhex(math.ceil(t/2))
|
||||
player:hud_change(ptemp.bar, "text", tempsurvive.bar.text .."^[colorize:#" .. tempsurvive.n2dhex(t) ..tempsurvive.n2dhex(15-t) .."00cc")
|
||||
player:hud_change(ptemp.bar, "number", 20+math.floor(pt/math.abs(ptemp.heat_resistance)*20))
|
||||
player:hud_change(ptemp.screen, "text", tempsurvive.screen.text .."^[colorize:#" .. tempsurvive.n2dhex(t) .. ht .. "00" .. ht)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
@ -232,42 +216,41 @@ tempsurvive.n2dhex=function(n)
|
|||
return a2 .. a2
|
||||
end
|
||||
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
tempsurvive.new(player)
|
||||
tempsurvive.player[player:get_player_name()].bar=player:hud_add(tempsurvive.bar)
|
||||
|
||||
|
||||
|
||||
tempsurvive.player[player:get_player_name()].screen=player:hud_add(tempsurvive.screen)
|
||||
|
||||
|
||||
if 1 then return end
|
||||
tempsurvive.player[player:get_player_name()].screen=player:hud_add({
|
||||
hud_elem_type = "image",
|
||||
text ="tempsurvive_screen.png",
|
||||
name = "screen",
|
||||
scale = {x=-100, y=-100},
|
||||
position = {x=0, y=0},
|
||||
alignment = {x=1, y=1},
|
||||
})
|
||||
|
||||
|
||||
|
||||
local name=player:get_player_name()
|
||||
if tempsurvive.player[name].full_resistance then return end
|
||||
tempsurvive.player[name].bar=player:hud_add(tempsurvive.bar)
|
||||
tempsurvive.player[name].screen=player:hud_add(tempsurvive.screen)
|
||||
end)
|
||||
--minetest.after(0, function() end,)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
local t=tempsurvive.player[player:get_player_name()]
|
||||
t.temp=0
|
||||
player:hud_change(t.bar, "text", tempsurvive.bar.text .."^[colorize:#00ff00cc")
|
||||
player:hud_change(t.bar, "number", t.temp)
|
||||
player:hud_change(t.screen, "text", tempsurvive.screen.text)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
tempsurvive.player[player:get_player_name()]=nil
|
||||
end)
|
||||
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "tempsurvive:thermometer",
|
||||
recipe = {
|
||||
{"","default:bronze_ingot",""},
|
||||
{"","default:wood",""},
|
||||
{"","default:glass",""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("tempsurvive:thermometer", {
|
||||
description = "Thermometer",
|
||||
tiles = {"tempsurvive_thermometer.png"},
|
||||
inventory_image="tempsurvive_thermometer_item.png",
|
||||
wield_image="tempsurvive_thermometer_item.png",
|
||||
liquids_pointable=true,
|
||||
groups = {dig_immediate=3},
|
||||
drawtype="nodebox",
|
||||
paramtype="light",
|
||||
|
@ -276,9 +259,24 @@ minetest.register_node("tempsurvive:thermometer", {
|
|||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.1, -0.25, 0.43, 0.1, 0.25, 0.5} --{-0.06, -0.2, 0.43, 0.06, 0.2, 0.5}
|
||||
{-0.1, -0.25, 0.43, 0.1, 0.25, 0.5}
|
||||
}
|
||||
},
|
||||
on_use=function(itemstack, user, pointed_thing)
|
||||
local pos=pointed_thing.above or user:get_pos()
|
||||
local temp=tempsurvive.get_bio_temperature(pos)
|
||||
local a=minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3}, {x=pos.x+3, y=pos.y+3, z=pos.z+3}, {"group:tempsurvive"})
|
||||
for i,no in pairs(a) do
|
||||
local name=minetest.get_node(no).name
|
||||
temp=temp+tempsurvive.spread_temperature(
|
||||
pos,
|
||||
no,
|
||||
minetest.get_item_group(name,"tempsurvive_add"),
|
||||
minetest.get_item_group(name,"tempsurvive_rad")
|
||||
)
|
||||
end
|
||||
minetest.chat_send_player(user:get_player_name(), math.floor(temp*10)*0.1)
|
||||
end,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", math.floor(tempsurvive.get_bio_temperature(pos)*10)*0.1)
|
||||
|
@ -286,10 +284,7 @@ minetest.register_node("tempsurvive:thermometer", {
|
|||
end,
|
||||
on_timer = function (pos, elapsed)
|
||||
local meta=minetest.get_meta(pos)
|
||||
|
||||
|
||||
local temp=tempsurvive.get_bio_temperature(pos)
|
||||
|
||||
local a=minetest.find_nodes_in_area({x=pos.x-3, y=pos.y-3, z=pos.z-3}, {x=pos.x+3, y=pos.y+3, z=pos.z+3}, {"group:tempsurvive"})
|
||||
|
||||
for i,no in pairs(a) do
|
||||
|
@ -304,4 +299,4 @@ minetest.register_node("tempsurvive:thermometer", {
|
|||
meta:set_string("infotext", math.floor(temp*10)*0.1)
|
||||
return true
|
||||
end,
|
||||
})
|
||||
})
|
Loading…
Reference in New Issue