1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2025-03-25 05:40:38 +01:00

Merge branch 'master' into NALC2

This commit is contained in:
sys4-fr 2017-05-03 21:50:25 +02:00
commit c1483ee527
15 changed files with 526 additions and 358 deletions

View File

@ -249,6 +249,7 @@ armor.set_player_armor = function(self, player)
player:set_armor_groups(armor_groups) player:set_armor_groups(armor_groups)
--player:set_physics_override(physics_o) --player:set_physics_override(physics_o)
player_physics.set_stats(player, "3d_armor", {speed=physics_o.speed-1, jump=physics_o.jump-1, gravity=physics_o.gravity-1}) player_physics.set_stats(player, "3d_armor", {speed=physics_o.speed-1, jump=physics_o.jump-1, gravity=physics_o.gravity-1})
pclasses.api.util.on_update(name)
self.textures[name].armor = armor_texture self.textures[name].armor = armor_texture
self.textures[name].preview = preview self.textures[name].preview = preview
self.def[name].state = state self.def[name].state = state

View File

@ -14,6 +14,9 @@ pclasses.api.register_class("admin", {
end, end,
on_unassigned = function(pname) on_unassigned = function(pname)
end, end,
on_update = function(pname)
-- No specific armor changes, no code
end,
switch_params = { switch_params = {
color = {r = 255, g = 00, b = 224}, color = {r = 255, g = 00, b = 224},
holo_item = "maptools:pick_admin" holo_item = "maptools:pick_admin"

View File

@ -6,22 +6,37 @@
-- See https://github.com/Ombridride/minetest-minetestforfun-server/issues/114 -- See https://github.com/Ombridride/minetest-minetestforfun-server/issues/114
-- --
local tmp = {}
pclasses.api.register_class("hunter", { pclasses.api.register_class("hunter", {
on_assigned = function(pname, inform) on_assigned = function(pname, inform)
if inform then if inform then
minetest.chat_send_player(pname, "You are now a hunter") minetest.chat_send_player(pname, "You are now a hunter")
minetest.sound_play("pclasses_full_hunter", {to_player=pname, gain=1}) minetest.sound_play("pclasses_full_hunter", {to_player=pname, gain=1})
end end
local reinforced = pclasses.api.util.does_wear_full_armor(pname, "reinforcedleather", true) sprint.increase_maxstamina(pname, 20)
if reinforced then
sprint.increase_maxstamina(pname, 40)
else
sprint.increase_maxstamina(pname, 30)
end
minetest.log("action", "[PClasses] Player " .. pname .. " become a hunter") minetest.log("action", "[PClasses] Player " .. pname .. " become a hunter")
end, end,
on_unassigned = function(pname) on_unassigned = function(pname)
sprint.set_default_maxstamina(pname) sprint.decrease_maxstamina(pname, 20)
if tmp[pname] then
sprint.decrease_maxstamina(pname, 10)
tmp[pname] = nil
end
end,
on_update = function(pname)
local reinforced = pclasses.api.util.does_wear_full_armor(pname, "reinforcedleather", true)
if reinforced then
if not tmp[pname] then
tmp[pname] = true
sprint.increase_maxstamina(pname, 10) -- 10 more
end
else
if tmp[pname] then
tmp[pname] = false
sprint.decrease_maxstamina(pname, 10)
end
end
end, end,
switch_params = { switch_params = {
color = {r = 30, g = 170, b = 00}, color = {r = 30, g = 170, b = 00},
@ -43,6 +58,9 @@ pclasses.api.register_class("hunter", {
"you need to fight a super strong mob, but it's just details...)") .. "image[2.4,5.6;6,4;pclasses_showcase_hunter.png]" "you need to fight a super strong mob, but it's just details...)") .. "image[2.4,5.6;6,4;pclasses_showcase_hunter.png]"
}) })
minetest.register_on_leaveplayer(function(player)
tmp[player:get_player_name()] = false
end)
pclasses.api.reserve_item("hunter", "throwing:bow_minotaur_horn") pclasses.api.reserve_item("hunter", "throwing:bow_minotaur_horn")
pclasses.api.reserve_item("hunter", "throwing:bow_minotaur_horn_loaded") pclasses.api.reserve_item("hunter", "throwing:bow_minotaur_horn_loaded")

View File

@ -12,11 +12,14 @@ pclasses.api.register_class("warrior", {
minetest.sound_play("pclasses_full_warrior", {to_player=pname, gain=1}) minetest.sound_play("pclasses_full_warrior", {to_player=pname, gain=1})
minetest.chat_send_player(pname, "You are now a warrior") minetest.chat_send_player(pname, "You are now a warrior")
end end
sprint.set_maxstamina(pname, 20) sprint.increase_maxstamina(pname, 10)
minetest.log("action", "[PClasses] Player " .. pname .. " becomes a warrior") minetest.log("action", "[PClasses] Player " .. pname .. " becomes a warrior")
end, end,
on_unassigned = function(pname) on_unassigned = function(pname)
sprint.set_default_maxstamina(pname) sprint.decrease_maxstamina(pname, 10)
end,
on_update = function(pname)
-- No specific armor changes, no code
end, end,
switch_params = { switch_params = {
color = {r = 06, g = 06, b = 30}, color = {r = 06, g = 06, b = 30},

View File

@ -14,10 +14,15 @@ pclasses.api.register_class("wizard", {
end end
-- Add specs here -- Add specs here
mana.setmax(pname, mana.getmax(pname)+100) mana.setmax(pname, mana.getmax(pname)+100)
sprint.increase_maxstamina(pname, 10)
minetest.log("action", "[PClasses] Player " .. pname .. " becomes a wizard") minetest.log("action", "[PClasses] Player " .. pname .. " becomes a wizard")
end, end,
on_unassigned = function(pname) on_unassigned = function(pname)
mana.setmax(pname, mana.getmax(pname)-100) mana.setmax(pname, mana.getmax(pname)-100)
sprint.decrease_maxstamina(pname, 10)
end,
on_update = function(pname)
-- No armor, no update needed
end, end,
switch_params = { switch_params = {
color = {r = 230, g = 230, b = 0}, color = {r = 230, g = 230, b = 0},

View File

@ -42,6 +42,7 @@ Yet another class mod for Minetest.
- Def is a definition table that can contain many functions/values : - Def is a definition table that can contain many functions/values :
- `on_assigned` which is a function, receiving as argument the player name - `on_assigned` which is a function, receiving as argument the player name
- `on_unassigned` which is a function, receiving as argument the player name - `on_unassigned` which is a function, receiving as argument the player name
- `on_update` which is a function, receiving as argument the player name
- `switch_params`, which is a table, containing parameters for the switch pedestal : - `switch_params`, which is a table, containing parameters for the switch pedestal :
- `holo_item` is mandatory. It's the itemstring of the item to be put over the pedestal - `holo_item` is mandatory. It's the itemstring of the item to be put over the pedestal
- `color` is optional. Default is white. It's a RGB table. - `color` is optional. Default is white. It's a RGB table.
@ -78,6 +79,10 @@ Yet another class mod for Minetest.
- Arguments : pname, itemname - Arguments : pname, itemname
- Returns true if player `pname` can have items `itemstring` in his main inventory, according to his class - Returns true if player `pname` can have items `itemstring` in his main inventory, according to his class
### pclasses.api.util.on_update
- Arguments : pname
- Update player's stats
### pclasses.api.reserve_item ### pclasses.api.reserve_item
- Arguments : cname, itemstring - Arguments : cname, itemstring
- Adds an entry in the reserved items' table. Players will need to belong to class `cname` in order to have items `itemstring` in their main inventory - Adds an entry in the reserved items' table. Players will need to belong to class `cname` in order to have items `itemstring` in their main inventory

View File

@ -15,6 +15,8 @@ pclasses.api.register_class("adventurer", {
end, end,
on_unassigned = function(pname) on_unassigned = function(pname)
end, end,
on_update = function(pname)
end,
informations = pclasses.api.textify("Adventurer, the casual players, or hardcore players. Whatever end of the spectrum\n" .. informations = pclasses.api.textify("Adventurer, the casual players, or hardcore players. Whatever end of the spectrum\n" ..
"you're in, adventurer will bring you what you want : no advantages, no help. Maybe you\n" .. "you're in, adventurer will bring you what you want : no advantages, no help. Maybe you\n" ..
"don't want that if you just began playing. If that's the case.. just pick another tab and\n" .. "don't want that if you just began playing. If that's the case.. just pick another tab and\n" ..

View File

@ -55,10 +55,18 @@ end
function pclasses.api.set_player_class(pname, cname, inform) function pclasses.api.set_player_class(pname, cname, inform)
if pclasses.api.get_class_by_name(cname) then if pclasses.api.get_class_by_name(cname) then
if pclasses.api.get_player_class(pname) then if pclasses.api.get_player_class(pname) then
pclasses.api.get_class_by_name(pclasses.api.get_player_class(pname)).on_update(pname)
pclasses.api.get_class_by_name(pclasses.api.get_player_class(pname)).on_unassigned(pname) pclasses.api.get_class_by_name(pclasses.api.get_player_class(pname)).on_unassigned(pname)
end end
pclasses.data.players[pname] = cname pclasses.data.players[pname] = cname
pclasses.api.get_class_by_name(cname).on_assigned(pname, inform) local newclass = pclasses.api.get_class_by_name(cname)
newclass.on_assigned(pname, inform)
-- Implicit call to on_update because we don't wanna repeat it
if newclass.on_update then
newclass.on_update(pname)
else
newclass.on_update = function(pname) end -- So that it won't annoy us later
end
local ref = minetest.get_player_by_name(pname) local ref = minetest.get_player_by_name(pname)
local armor_inv = minetest.get_inventory({type = "detached", name = pname .. "_armor"}) local armor_inv = minetest.get_inventory({type = "detached", name = pname .. "_armor"})
@ -100,6 +108,13 @@ function pclasses.api.util.can_have_item(pname, itemname)
return false return false
end end
function pclasses.api.util.on_update(pname)
local cname = pclasses.api.get_player_class(pname)
if cname ~= nil and pclasses.api.get_class_by_name(cname) and pclasses.api.get_class_by_name(cname).on_update then
pclasses.api.get_class_by_name(cname).on_update(pname)
end
end
-- TEMPORARY CLASS SHIFT SYSTEM -- TEMPORARY CLASS SHIFT SYSTEM
-- Used to test on local servers -- Used to test on local servers
-- --

View File

@ -61,21 +61,34 @@ minetest.register_node("runes:black_magic_block", {
}) })
-- Globalstep checking for the amulets -- Globalstep checking for the amulets
minetest.register_globalstep(function(dtime) tmpdata = {}
loop = function()
for _, player in pairs(minetest.get_connected_players()) do for _, player in pairs(minetest.get_connected_players()) do
local inv = player:get_inventory() local inv = player:get_inventory()
local basemana = mana.settings.default_max local pname = player:get_player_name()
local basemana = mana.getmax(pname) - (tmpdata[pname] or 0) -- Baseline mana, without any amulets
local addons = 0
for index, item in pairs(inv:get_list("main")) do for index, item in pairs(inv:get_list("main")) do
local itemname = item:get_name() local itemname = item:get_name()
local itemcount = item:get_count() local itemcount = item:get_count()
for name, manadiff in pairs(runes.datas.amulets) do for name, manadiff in pairs(runes.datas.amulets) do
if itemname == "runes:" .. name .. "_amulet" then if itemname == "runes:" .. name .. "_amulet" then
basemana = basemana + (manadiff * itemcount) addons = addons + (manadiff * itemcount)
--print("Detected " .. name)
end end
end end
end end
if basemana ~= mana.settings.default_max then mana.setmax(pname, basemana + addons)
mana.setmax(player:get_player_name(), basemana) tmpdata[pname] = addons
end end
minetest.after(1, loop)
end end
minetest.after(0, loop)
minetest.register_on_leaveplayer(function(player)
local pname = player:get_player_name()
mana.setmax(pname, mana.getmax(pname) - tmpdata[pname]) -- Reset
tmpdata[pname] = nil
mana.save_to_file(pname) -- Double class since we aren't sure mana hasn't already saved (it probably did)
end) end)

View File

@ -1,5 +1,6 @@
default default
mobs mobs
maptools
farming? farming?
treasurer? treasurer?
watershed? watershed?

View File

@ -1,4 +1,5 @@
pyramids = {} pyramids = {}
pyramids.max_time = 30*60
dofile(minetest.get_modpath("tsm_pyramids").."/mummy.lua") dofile(minetest.get_modpath("tsm_pyramids").."/mummy.lua")
dofile(minetest.get_modpath("tsm_pyramids").."/nodes.lua") dofile(minetest.get_modpath("tsm_pyramids").."/nodes.lua")
@ -16,9 +17,8 @@ local chest_stuff = {
} }
function pyramids.fill_chest(pos) function pyramids.fill_chest(pos)
minetest.after(2, function() local n = minetest.get_node_or_nil(pos)
local n = minetest.get_node(pos) if n and n.name and n.name == "tsm_pyramids:chest" then
if n and n.name and n.name == "maptools:chest" then
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 8*4) inv:set_size("main", 8*4)
@ -44,9 +44,7 @@ function pyramids.fill_chest(pos)
inv:set_stack("main", math.random(1,32), stacks[s]) inv:set_stack("main", math.random(1,32), stacks[s])
end end
end end
end end
end)
end end
local function add_spawner(pos) local function add_spawner(pos)
@ -93,7 +91,7 @@ local function make_entrance(pos)
end end
end end
local function make(pos) function pyramids.make(pos)
minetest.log("action", "Created pyramid at ("..pos.x..","..pos.y..","..pos.z..")") minetest.log("action", "Created pyramid at ("..pos.x..","..pos.y..","..pos.z..")")
for iy=0,10,1 do for iy=0,10,1 do
for ix=iy,22-iy,1 do for ix=iy,22-iy,1 do
@ -124,6 +122,7 @@ local function hlp_fnct(pos, name)
return false return false
end end
end end
local function ground(pos, old) local function ground(pos, old)
local p2 = pos local p2 = pos
while hlp_fnct(p2, "air") do while hlp_fnct(p2, "air") do
@ -177,11 +176,12 @@ minetest.register_on_generated(function(minp, maxp, seed)
end end
p2.y = p2.y - 3 p2.y = p2.y - 3
if p2.y < 0 then p2.y = 0 end if p2.y < 0 then p2.y = 0 end
if minetest.find_node_near(p2, 25, {"default:water_source"}) ~= nil or minetest.find_node_near(p2, 22, {"default:dirt_with_grass"}) ~= nil or minetest.find_node_near(p2, 52, {"maptools:sandstone_brick"}) ~= nil then return end if minetest.find_node_near(p2, 25, {"default:water_source"}) ~= nil
or minetest.find_node_near(p2, 22, {"default:dirt_with_grass"}) ~= nil
or minetest.find_node_near(p2, 52, {"maptools:sandstone_brick"}) ~= nil then return end
if math.random(0,10) > 7 then return end if math.random(0,10) > 7 then return end
make(p2) pyramids.make(p2)
end end
end, minp, maxp, seed) end, minp, maxp, seed)
end) end)

View File

@ -56,6 +56,27 @@ mobs:register_mob("tsm_pyramids:mummy", {
}, },
}) })
--MFF ABM to replace old maptools:chest
minetest.register_abm({
nodenames = {"tsm_pyramids:spawner_mummy"},
interval = 10.0,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local chests = minetest.find_nodes_in_area(
{x=pos.x-4, y=pos.y-3, z=pos.z-10},
{x=pos.x+4, y=pos.y, z=pos.z},
"maptools:chest"
)
for _, cpos in ipairs(chests) do
local p2 = 0
local n = minetest.get_node_or_nil(cpos)
if n and n.param2 then
p2 = n.param2
end
minetest.set_node(cpos, {name="tsm_pyramids:chest", param2=p2})
end
end
})
-- spawner (spawn in pyramids, near the spawner) -- spawner (spawn in pyramids, near the spawner)
if not minetest.setting_getbool("only_peaceful_mobs") then if not minetest.setting_getbool("only_peaceful_mobs") then
minetest.register_abm({ minetest.register_abm({
@ -101,10 +122,10 @@ minetest.register_node("tsm_pyramids:spawner_mummy", {
drop = "", drop = "",
on_construct = function(pos) on_construct = function(pos)
pos.y = pos.y - 0.28 pos.y = pos.y - 0.28
minetest.env:add_entity(pos,"tsm_pyramids:mummy_spawner") minetest.add_entity(pos,"tsm_pyramids:mummy_spawner")
end, end,
on_destruct = function(pos) on_destruct = function(pos)
for _,obj in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if not obj:is_player() then if not obj:is_player() then
if obj ~= nil and obj:get_luaentity().m_name == "dummy" then if obj ~= nil and obj:get_luaentity().m_name == "dummy" then
obj:remove() obj:remove()
@ -122,7 +143,7 @@ minetest.register_craftitem("tsm_pyramids:spawn_egg", {
stack_max = 99, stack_max = 99,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type == "node" then if pointed_thing.type == "node" then
minetest.env:add_entity(pointed_thing.above,"tsm_pyramids:mummy") minetest.add_entity(pointed_thing.above,"tsm_pyramids:mummy")
if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end
return itemstack return itemstack
end end

View File

@ -4,14 +4,14 @@ for i=1,3 do
minetest.register_node("tsm_pyramids:deco_stone"..i, { minetest.register_node("tsm_pyramids:deco_stone"..i, {
description = "Sandstone with "..img[i], description = "Sandstone with "..img[i],
tiles = {"default_sandstone.png^tsm_pyramids_"..img[i]..".png"}, tiles = {"default_sandstone.png^tsm_pyramids_"..img[i]..".png"},
is_ground_content = true, is_ground_content = false,
groups = {unbreakable=1}, groups = {unbreakable=1},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
}) })
end end
trap_on_timer = function (pos, elapsed) local trap_on_timer = function (pos, elapsed)
local objs = minetest.env:get_objects_inside_radius(pos, 2) local objs = minetest.get_objects_inside_radius(pos, 2)
for i, obj in pairs(objs) do for i, obj in pairs(objs) do
if obj:is_player() then if obj:is_player() then
local n = minetest.get_node(pos) local n = minetest.get_node(pos)
@ -27,11 +27,11 @@ end
minetest.register_node("tsm_pyramids:trap", { minetest.register_node("tsm_pyramids:trap", {
description = "Cracked sandstone brick", description = "Cracked sandstone brick",
tiles = {"default_sandstone_brick.png^tsm_pyramids_crack.png"}, tiles = {"default_sandstone_brick.png^tsm_pyramids_crack.png"},
is_ground_content = true, is_ground_content = false,
groups = {crumbly=2,cracky=3}, groups = {crumbly=2,cracky=3},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.env:get_node_timer(pos):start(0.1) minetest.get_node_timer(pos):start(0.1)
end, end,
crack = 1, crack = 1,
on_timer = trap_on_timer, on_timer = trap_on_timer,
@ -41,8 +41,31 @@ minetest.register_node("tsm_pyramids:trap", {
minetest.register_node("tsm_pyramids:trap_2", { minetest.register_node("tsm_pyramids:trap_2", {
description = "trapstone", description = "trapstone",
tiles = {"default_sandstone_brick.png^tsm_pyramids_crack.png^[transformR90"}, tiles = {"default_sandstone_brick.png^tsm_pyramids_crack.png^[transformR90"},
is_ground_content = true, is_ground_content = false,
groups = {crumbly=2,cracky=3,falling_node=1,not_in_creative_inventory=1}, groups = {crumbly=2,cracky=3,falling_node=1,not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
drop = "", drop = "",
}) })
local chestdef = minetest.registered_nodes["default:chest"]
minetest.register_node("tsm_pyramids:chest",{
description = "tsm_pyramids Chest auto refilled",
tiles = chestdef.tiles,
stack_max = 1000,
paramtype2 = "facedir",
is_ground_content = false,
on_construct = function(pos)
chestdef.on_construct(pos)
minetest.get_node_timer(pos):start(pyramids.max_time)
pyramids.fill_chest(pos)
end,
on_metadata_inventory_move = chestdef.on_metadata_inventory_move,
on_metadata_inventory_put = chestdef.on_metadata_inventory_put,
on_metadata_inventory_take = chestdef.on_metadata_inventory_take,
groups = {unbreakable = 1, not_in_creative_inventory = 1},
on_timer = function (pos, elapsed)
pyramids.fill_chest(pos)
return true
end,
})

View File

@ -1,6 +1,3 @@
pyramids.saved_chests = {}
pyramids.max_time = 30*60
local room = {"a","a","a","a","a","a","a","a","a", local room = {"a","a","a","a","a","a","a","a","a",
"a","c","a","c","a","c","a","c","a", "a","c","a","c","a","c","a","c","a",
@ -33,56 +30,14 @@ code["a"] = "air"
code["l"] = "lava_source" code["l"] = "lava_source"
code["t"] = "trap" code["t"] = "trap"
function loadchests()
local file = io.open(minetest.get_worldpath().."/pyramids_chests.txt","r")
if file then
local saved_chests = minetest.deserialize(file:read())
io.close(file)
if saved_chests and type(saved_chests) == "table" then
minetest.log("action","[tsm_pyramids] Chest loaded")
return saved_chests
else
minetest.log("error","[tsm_pyramids] Loading Chest failed")
end
end
return {}
end
function savechests()
local file = io.open(minetest.get_worldpath().."/pyramids_chests.txt","w")
if not file then return end -- should not happen
file:write(minetest.serialize(pyramids.saved_chests))
io.close(file)
minetest.log("action","[tsm_pyramids] Chests saved")
end
pyramids.saved_chests = loadchests()
minetest.register_on_shutdown(function()
savechests()
end)
local function chests_reload()
-- It might happen that chests are not loaded
if pyramids.saved_chests then
for _,k in ipairs(pyramids.saved_chests) do
pyramids.fill_chest(k)
end
else
pyramids.saved_chests = loadchests() or {}
end
minetest.log("action","[tsm_pyramids] Chests reloaded")
minetest.after(pyramids.max_time, chests_reload)
end
minetest.after(0, chests_reload)
local function replace(str,iy) local function replace(str,iy)
local out = "default:" local out = "default:"
if iy < 4 and str == "c" then str = "a" end if iy < 4 and str == "c" then str = "a" end
if iy == 0 and str == "s" then out = "tsm_pyramids:" str = "sun" end if iy == 0 and str == "s" then out = "tsm_pyramids:" str = "sun" end
if iy == 3 and str == "s" then out = "tsm_pyramids:" str = "men" end if iy == 3 and str == "s" then out = "tsm_pyramids:" str = "men" end
if str == "a" then out = "" end if str == "a" then out = "" end
if str == "c" or str == "s" or str == "b" then out = "maptools:" end if str == "c" then out = "tsm_pyramids:" end --MFF newchest
if str == "s" or str == "b" then out = "maptools:" end
return out..code[str] return out..code[str]
end end
@ -104,13 +59,8 @@ function pyramids.make_room(pos)
local p2 = 0 local p2 = 0
if n_str == "c" then if n_str == "c" then
if ix < 3 then p2 = 1 else p2 = 3 end if ix < 3 then p2 = 1 else p2 = 3 end
pyramids.fill_chest({x=loch.x+ix,y=loch.y-iy,z=loch.z+iz})
end
local node_name = replace(n_str,iy)
minetest.set_node({x=loch.x+ix,y=loch.y-iy,z=loch.z+iz}, {name=node_name, param2=p2})
if node_name == "maptools:chest" then
table.insert(pyramids.saved_chests,1,{x=loch.x+ix,y=loch.y-iy,z=loch.z+iz})
end end
minetest.set_node({x=loch.x+ix,y=loch.y-iy,z=loch.z+iz}, {name=replace(n_str,iy), param2=p2})
end end
end end
end end

View File

@ -1,13 +1,124 @@
### Come and visit our website "xorhub.com"! ### ### Come and visit our website "xorhub.com"! ###
### Venez visiter notre site "xorhub.com" ! ### ### Venez visiter notre site "xorhub.com" ! ###
---Planned on the Server--- ### Planned on the Server ###
We're working hard to make lighter the server! We're working hard to make lighter the server!
Introduce the Wizard class : do you like magic things ? The Wizard class is coming : do you like magic things ? (mana system, spells, staff, etc.)
Introduce the Ingineer class : do you like build and dig things ? We're thinking about an engineer class : do you like build and dig things ?
---Patch Notes--- ### Release Notes ###
---24/08/2016-- (Thanks to : ElementW, crabman77/crabman, LeMagnesium/Mg) --- v2.2.6 --- (Thanks to : crabman77/crabman, sys4-fr, LeMagnesium/Mg, Gael-de-Sailly, cessna151)
Fix Creeper mobs explode instantly (issue #509)
Update mapfix and make a submodule
New special spawning,spawn only if there are no others of the same type(limited with max), fix issue #524
Update submodules irc and fishing
Fix bug if detach player whithout set entity.driver=nil
Add irc bot names to forbidden names list
Balance the mummy mobs
Remove dropondie and replace by bones mod
Remove armors drop, replaced by bones mod soon fix crash in unified_inventory, on join if died, detached inventory is nil
Add alias to homedecor:wardrobe
Update submodules mff_hud (resize texture) irc_modpack (fix typo) time_regulation
Update quest submodule (fix hud issue)
Removed call to that generated trees everywhere
[u_skins] remove unused preview.blend
Update irc mod_pack
Add some unalowed nicknames, issue MinetestForFun/name_restrictions#1
Update submodule name_restrictions
Fix use node.on_punch when node have pointed_thing (bug book guide and warps cristal)
Fix texture size "non power of 2"
New setting "is_winter" to active snow when winter and active snow now
--- v2.2.5 --- (Thanks to : crabman77/crabman, sys4-fr, LeMagnesium/Mg, Gael-de-Sailly, cessna151)
Clay gives 4 lumps when dug (like vanilla, instead of 8 before)
Fix textures irrlicht warning "Interlace handling should be turned on…"
[mobs] Avoid server crash with "nan vector" values
Fix crash when default tree grows
Update irc submodule
Disable item_entiy.lua, cause crash and we have already builtin_item
Update irc server name
Convert sounds to 48ko/s (for a faster first loading to the server)
Set to 30 minutes the time before remove a dropped item
Fix Only one enchanted piece of armor is allowed to be placed in the enhancement stand
Fix previews of enchanted armor with xdecor
Fix a duplicated field for areas mod
Fix some local variables
Fix crash with xdecor when enchanting armor (if we add xdecor 1 day)
Readd param to <= 0.14.4 stable version
Fix doors (double doors & sounds)
Fix maptools
Add watchdog scrolls as an experiment on DM drops
--- v2.2.4 --- (Thanks to : crabman77/crabman, sys4-fr, LeMagnesium/Mg, Gael-de-Sailly)
[Profnsched] lost jobs correction
--- v2.2.3 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, Gael-de-Sailly)
[mobs] Uncomment half of attack stop
[mobs] Never disable the timer for exploding mobs
Deactivate profnsched
Create spiky cactus, make the original smoother
[mff_pclasses & pclasses] Enhance showcasing menus
[pclasses & mff_pclasses] Change info menu
[Profnsched] Update based on discuss of PR #507
[Profnsched] New module (fr)
Disable profilerdumper , issue #512
--- v2.2.2 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, Gael-de-Sailly)
Update minercantile submodule
Add Mese_dragon to death message + add a global message when a group of player kill him
Fix Dungeon Master sword craft (make it visible for players)
Fix global variable for the lrfurn mod
Fix two lingering global variables
Update stacktraceplus mod
Update pipeworks and fix global variable 'rules'
Fix bad resize for some textures
Fix pixel in default_sandstone_brick.png texure and resize some textures
Fix pixels in gravel texture
Update minetest.conf
Update bugfixes the mod name_restrictions
Update bugfixes the mod xban2
--- v2.2.1 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, Gael-de-Sailly)
Update [mysql_auth]
Add [mysql_auth] and add mysql_auth config path
Move [areas] and [name_restrictions] to a submodule
Turn [xban2] into a submodule
Add inventory texture for the Mese Dragon Boss
Update hudbars, remove old duplicated code/textures (now in mff_hud)
Fix unknow item and missing var on [mff_classic]
Update unified_inventory
[mff_classic] Fix nyancat & cherry tree mapgen
Move MFF-only craft recipes, craftitems, mapgen to [mff_classic](Also fixes aliasing)
Fix [buckets] with acid or sand, make [death_message] work with aliases
[irc_modpack] Update
Move our [default] edits to mff_classic, alias nodes
Remove old furnace ABMs, rewrite locked furnace based on new furnace with node timer
Added missing textures, change textures name due to replaced carts to boost_carts
--> Mysql_auth is now enable and works great on our server. (We tweakes some mods to be compatible with it)
--- v2.2.0 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, Gael-de-Sailly)
Fix announce curl timeout
Enable stacktraceplus mod and move it to the "mods" folder
Many globalstep remplaced by minetest.after (hunger, hudbars, etc...)
Erased the useless rofl mod
Recompile minetestserver with LUAJIT enabled (no more lags from watershed mapgen)
--- v2.1.4 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, Gael-de-Sailly)
Remove old aliases for jumping mod(re-added)
--- v2.1.3 --- (Thanks to : crabman77/crabman, , LeMagnesium/Mg, Gael-de-Sailly)
Crashfix the [carts] mod + some code improvments
--- v2.1.2 --- (Thanks to : ElementW)
Add [stacktraceplus]
--- v2.1.1 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg)
[mff_pclasses] Slight modifications of class informations
--- v2.1.0 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg)
Add alias for bedrock:bedrock
--- 24/08/2016 --- (Thanks to : ElementW, crabman77/crabman, LeMagnesium/Mg)
Addition of "mysql_auth" (Now user nickname/password/privileges/... are stored in a secure and fast MariaDB database) Addition of "mysql_auth" (Now user nickname/password/privileges/... are stored in a secure and fast MariaDB database)
Update of "areas", "name_restrictions" and xban2 (Now compatible with mysql_auth) Update of "areas", "name_restrictions" and xban2 (Now compatible with mysql_auth)
Update of "hudbars" (Remove old duplicated code/textures, the HUD will be faster than before) Update of "hudbars" (Remove old duplicated code/textures, the HUD will be faster than before)
@ -17,7 +128,7 @@ Update of "irc_modpack" (Fix crash on auth_table, code improvments)
Update of "mff_classic/furnace" (Remove old furnace ABMs and rewrite locked furnace code, performance improvments) Update of "mff_classic/furnace" (Remove old furnace ABMs and rewrite locked furnace code, performance improvments)
Update of "carts" (Added missing textures and change textures name because remplaced by boost_carts textures) Update of "carts" (Added missing textures and change textures name because remplaced by boost_carts textures)
---08/08/2016-- (Thanks to : LeMagnesium/Mg, crabman77/crabman, Coethium, ElementW, ezam/ezamlinux) --- 08/08/2016 --- (Thanks to : LeMagnesium/Mg, crabman77/crabman, Coethium, ElementW, ezam/ezamlinux)
Update of "boost_cart" (Do not need mesecons to activate power rails, rails accelerate and max speed set to an highter value, brake rails now deccelerate correctly and add a minimum speed feature on brake rails, all rails -except brakes rails- don't have frictions, so they keep their speed indefinitly, finally, we removed collision to erased the "walled_in" bug) Update of "boost_cart" (Do not need mesecons to activate power rails, rails accelerate and max speed set to an highter value, brake rails now deccelerate correctly and add a minimum speed feature on brake rails, all rails -except brakes rails- don't have frictions, so they keep their speed indefinitly, finally, we removed collision to erased the "walled_in" bug)
Addition of "boost_cart" (Less CPU utilization, less buggy, more up-to-date) Addition of "boost_cart" (Less CPU utilization, less buggy, more up-to-date)
Deletion of "carts" (poorly made carts mod) Deletion of "carts" (poorly made carts mod)
@ -34,12 +145,12 @@ Update of "stairs" (bugfix)
Update of "darkage" (Improve ores textures) Update of "darkage" (Improve ores textures)
Deletion of "bedrocks" (Useless and use ressources) Deletion of "bedrocks" (Useless and use ressources)
---06/07/2016-- (Thanks to : crabman77/crabman, LeMagnesium/Mg, ElementW, ezam/ezamlinux, cessna151) --- 06/07/2016 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, ElementW, ezam/ezamlinux, cessna151)
Update of "runes" (crashfix) Update of "runes" (crashfix)
Update of "mobs" (Last Mese Dragon fixes, now ready !) Update of "mobs" (Last Mese Dragon fixes, now ready !)
update of "u_skins" (Cleanup scripts, make new Python one, compress textures) update of "u_skins" (Cleanup scripts, make new Python one, compress textures)
---03/07/2016-- (Thanks to : crabman77/crabman, LeMagnesium/Mg, ElementW, ezam/ezamlinux, cessna151) --- 03/07/2016 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg, ElementW, ezam/ezamlinux, cessna151)
Update of "u_skins" (Removal of more than 200 skins and keep the best skins) Update of "u_skins" (Removal of more than 200 skins and keep the best skins)
Update of "mobs" (Small bugfixes for the PumpKing Boss, and the Mese Dragon is now done and ready to fight !) Update of "mobs" (Small bugfixes for the PumpKing Boss, and the Mese Dragon is now done and ready to fight !)
@ -139,7 +250,6 @@ Update of "beds" (Fully debuged spawn point)
Addition of "cozy" (just for roleplay, you can sit or lay down/sleep with the commands /sit and /lay) Addition of "cozy" (just for roleplay, you can sit or lay down/sleep with the commands /sit and /lay)
Update of "mobs" (re-add cow dungs) Update of "mobs" (re-add cow dungs)
---Patch Notes---
--- 29/02/2016 --- (Thanks to : LeMagnesium/Mg, crabman77/crabman, Gael-de-Sailly, ObaniGemini/Obani, ElementW) --- 29/02/2016 --- (Thanks to : LeMagnesium/Mg, crabman77/crabman, Gael-de-Sailly, ObaniGemini/Obani, ElementW)
Update of "coloredwood" (bugfix the sounds of this mod nodes) Update of "coloredwood" (bugfix the sounds of this mod nodes)
Addition of "Jumping" (cushions are back and debugged!) Addition of "Jumping" (cushions are back and debugged!)
@ -154,7 +264,6 @@ Update of "mobs" (Mobs no longer spawn within 12 blocks of player or despawn wit
Update of "minetestforfun_game" (trees grow two times faster) Update of "minetestforfun_game" (trees grow two times faster)
Update of "dropondie" (bags are dropped on death with their contents instead of the content itself) Update of "dropondie" (bags are dropped on death with their contents instead of the content itself)
--- 31/01/2016 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg) --- 31/01/2016 --- (Thanks to : crabman77/crabman, LeMagnesium/Mg)
Update of "christmas_craft" (christmas season overrides deactivated) Update of "christmas_craft" (christmas season overrides deactivated)
Update of "3dmushrooms" (aliases created for unknown nodes) Update of "3dmushrooms" (aliases created for unknown nodes)
@ -233,7 +342,6 @@ Update of "boats" (Crashfix)
Update of "unified_inventory" (Add a button to hide/show craftguide) Update of "unified_inventory" (Add a button to hide/show craftguide)
Update of "sethome" (Bugfix, the sounds are now played everytimes when you click this buttons) Update of "sethome" (Bugfix, the sounds are now played everytimes when you click this buttons)
---Patch Notes---
--- 24/11/2015 --- (Thanks to : crabman77/crabman, gravgun, LeMagnesium/Mg) --- 24/11/2015 --- (Thanks to : crabman77/crabman, gravgun, LeMagnesium/Mg)
Update of "mobs" (Add Ent sounds, fix mobs tamed/follow problems) Update of "mobs" (Add Ent sounds, fix mobs tamed/follow problems)
Update of "mff_hud" (Tidy the code) Update of "mff_hud" (Tidy the code)