Implementation.

master
Beha 2019-07-11 13:12:00 -04:00
parent 3edc558128
commit 14c3c0b6aa
6 changed files with 90 additions and 0 deletions

15
LICENSE.md Normal file
View File

@ -0,0 +1,15 @@
ISC License
Copyright (c) 2019, Beha
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -1 +1,74 @@
local S = minetest.get_translator("xmana")
xmana = {}
function xmana.level_to_mana(level)
return math.pow(1.1, level) * 100
end
function xmana.mana_to_level(mana)
return math.max(0, math.log(math.max(0.001, mana / 100)) / math.log(1.1))
end
-- Maximum mana possible.
xmana.MAX_LEVEL = tonumber(minetest.settings:get("xmana.max_level")) or 30
xmana.MAX = math.ceil(xmana.level_to_mana(xmana.MAX_LEVEL))
-- Access a player object's mana. If set is false, return current value. If set is a number, set to that. If relative is true, add the current value to the set.
function xmana.mana(player, set, relative)
if set then
-- Actual amount set when relative is true is current + set.
local set = relative and (set + xmana.mana(player)) or set
-- Clamp to reasonable values.
set = math.max(0, math.min(set, xmana.MAX))
player:get_meta():set_float("xmana:mana", set)
hb.change_hudbar(player, "xmana", math.floor(xmana.mana_to_level(xmana.mana(player)) + 0.5), xmana.MAX_LEVEL)
else
return player:get_meta():get_float("xmana:mana", set)
end
end
minetest.register_on_respawnplayer(function(player)
xmana.mana(player, 0)
end)
minetest.register_on_joinplayer(function(player)
hb.init_hudbar(player, "xmana", 0, xmana.MAX_LEVEL)
xmana.mana(player, 0)
end)
hb.register_hudbar("xmana", 0xFFFFFF, S"Mana", {
bar = "xmana_bg.png",
icon = "xmana_icon.png",
bgicon = "xmana_bgicon.png"
}, 0, xmana.MAX_LEVEL, false)
minetest.register_privilege("xmana", {
"Can modify player mana.",
give_to_singleplayer = false
})
minetest.register_chatcommand("xmana", {
params = "<amount> [<username or self>] [<absolute boolean>]",
description = "Set player mana.",
privs = {xmana = true},
func = function(caller, param)
local split = param:split(" ")
local amount = tonumber(split[1])
local target = split[2] and minetest.get_player_by_name(split[1]) or minetest.get_player_by_name(caller)
local relative = not minetest.is_yes(split[3])
if not amount then
return false, S"Invalid amount."
end
if not target then
return false, S"Invalid target."
end
xmana.mana(target, amount, relative)
return true, S("@1 now has @2 levels (@3 mana)", target:get_player_name(), math.floor(xmana.mana_to_level(xmana.mana(target)) + 0.5), xmana.mana(target))
end,
})

View File

@ -1 +1,3 @@
name = xmana
description = A thematic XP-like mana system.
depends = hudbars

BIN
textures/xmana_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

BIN
textures/xmana_bgicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

BIN
textures/xmana_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B