14 Commits

Author SHA1 Message Date
31250df93e Version 1.3.1 2019-03-22 16:27:42 +01:00
f1e6d37614 Remove word “subgame” 2019-03-22 16:27:25 +01:00
6d36fc9526 Version 1.3.0 2019-03-22 16:23:27 +01:00
d63422eef3 Add screenshot 2019-03-22 12:31:38 +01:00
3e7f533bee Use new 5.0.0 mod.conf file 2019-03-22 12:24:16 +01:00
ba42cf3e38 Change license to MIT 2019-03-22 12:23:10 +01:00
7efd3064bb Use new 5.0.0 translation system 2019-03-22 12:19:57 +01:00
f4a0c31301 Update for 0.4.16 settings syntax 2017-06-20 16:57:11 +02:00
838d1df687 Version 1.2.0 2016-11-12 20:33:16 +01:00
374d9742f8 Update outdated inttlib boilerplate 2016-11-09 01:58:50 +01:00
93477205a4 Fix CC-BY 3.0 link 2016-10-29 15:29:09 +02:00
3b8097e44a Use Markdown format for README file 2016-10-29 15:27:00 +02:00
fc0efd94fb Remove redundant version number from init.lua 2016-10-29 15:23:22 +02:00
7b0ef7204b Add intllib support 2016-08-05 17:43:55 +02:00
15 changed files with 95 additions and 107 deletions

4
API.md Executable file → Normal file
View File

@ -1,5 +1,5 @@
API documentation for Mana 1.1.0 API documentation for Mana mod
================================ ==============================
## Introduction ## Introduction
The API of the Mana mod allows you to set and receive The API of the Mana mod allows you to set and receive

37
README.txt → README.md Executable file → Normal file
View File

@ -1,22 +1,20 @@
Mana mod [mana] # Mana [mana]
===============
Version: 1.1.0
Note: This mod uses semantic versioning, as defined by version 2.0.0 of the SemVer standard.
See: <http://semver.org/>
Description * Version: 1.3.1
=========== * Note: This mod uses semantic versioning, as defined by version 2.0.0 of the SemVer standard. See: <http://semver.org/>
## Description
This mod adds basic support for mana to Minetest. This mod adds basic support for mana to Minetest.
Each player will have an additional attribute: Mana. To be precise: Each player will have an additional attribute: Mana. To be precise:
- Current mana reserves: How much mana the player currently has * Current mana reserves: How much mana the player currently has
- Maximum possible mana: How much mana the player can have at maximum * Maximum possible mana: How much mana the player can have at maximum
- Mana regeneration amont: How much mana will be generated each “mana tick” (default 0.2 seconds) * Mana regeneration amont: How much mana will be generated each “mana tick” (default 0.2 seconds)
By default, each player spawns with 0/200 mana, and regenerates 1 mana per fifth of a second. All By default, each player spawns with 0/200 mana, and regenerates 1 mana per fifth of a second. All
these values can be configured with the server settings (`minetest.conf`) and it is highly advised to do these values can be configured with the server settings (`minetest.conf`) and it is highly advised to do
so if you plan to integrate this mod into a subgame. so if you plan to integrate this mod into a game.
The mana regeneration rate (the “mana tick”) is a global setting and is *not* configured on a The mana regeneration rate (the “mana tick”) is a global setting and is *not* configured on a
per-player basis. per-player basis.
@ -25,15 +23,13 @@ The mod provides a simple API to set, get, add and subtract the mana (and maximu
for setting the regeneration amount. Note that this mod itself does *not* change the gameplay in a meaningful for setting the regeneration amount. Note that this mod itself does *not* change the gameplay in a meaningful
way. You should install other mods which use the Mana mod as a dependency. way. You should install other mods which use the Mana mod as a dependency.
The API documentation is in the file API.md. The API documentation is in the file `API.md`.
If the mod “HUD bars” [hudbars] is installed, a blue bar will be added to the HUD showing the player's mana reserves. If the mod “HUD bars” [`hudbars`] is installed, a blue bar will be added to the HUD showing the player's mana reserves.
It currently only works with version 0.3.0 of this mod.
Otherwise, the mana is just shown as text. Otherwise, the mana is just shown as text.
Configuration ## Configuration
=============
This mod can be configured with minetest.conf! The following settings are accepted: This mod can be configured with minetest.conf! The following settings are accepted:
@ -43,10 +39,9 @@ This mod can be configured with minetest.conf! The following settings are accept
regen value per mana tick. Default: `0.2`. This value must be positive, also try to avoid very small values regen value per mana tick. Default: `0.2`. This value must be positive, also try to avoid very small values
as those could probably stress your machine a lot. as those could probably stress your machine a lot.
License information License information
=================== ===================
* textures/mana_icon.png: CC-BY by Buch <http://opengameart.org/users/Buch>. * `textures/mana_icon.png`: [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) by [Buch](http://opengameart.org/users/Buch).
* textures/mana_bgicon.png: CC-BY, originally by Buch <http://opengameart.org/users/Buch>, modified by Wuzzy. * `textures/mana_bgicon.png`: CC BY 3.0, originally by Buch, modified by Wuzzy.
* textures/mana_bar.png: WTFPL by Wuzzy. * `textures/mana_bar.png`: [MIT License](https://opensource.org/licenses/MIT) by Wuzzy.
* Everything else: WTFPL. * Everything else: MIT License.

View File

@ -1 +0,0 @@
hudbars?

View File

@ -1 +0,0 @@
Adds a mana attribute to players, can be used as energy source for magical items, etc.

136
init.lua Executable file → Normal file
View File

@ -1,42 +1,42 @@
--[[ --[[
Mana 1.0.2 Mana
This mod adds mana to players, a special attribute This mod adds mana to players, a special attribute
License: WTFPL License: MIT License
]] ]]
--[===[ --[===[
Initialization Initialization
]===] ]===]
local S = minetest.get_translator("mana")
mana = {} mana = {}
mana.playerlist = {} mana.playerlist = {}
mana.settings = {} mana.settings = {}
mana.settings.default_max = 200 mana.settings.default_max = 200
mana.settings.default_regen = 10 mana.settings.default_regen = 1
mana.settings.regen_timer = 10 mana.settings.regen_timer = 0.2
do do
local default_max = tonumber(minetest.setting_get("mana_default_max")) local default_max = tonumber(minetest.settings:get("mana_default_max"))
if default_max ~= nil then if default_max ~= nil then
mana.settings.default_max = default_max mana.settings.default_max = default_max
end end
local default_regen = tonumber(minetest.setting_get("mana_default_regen")) local default_regen = tonumber(minetest.settings:get("mana_default_regen"))
if default_regen ~= nil then if default_regen ~= nil then
mana.settings.default_regen = default_regen mana.settings.default_regen = default_regen
end end
local regen_timer = tonumber(minetest.setting_get("mana_regen_timer")) local regen_timer = tonumber(minetest.settings:get("mana_regen_timer"))
if regen_timer ~= nil then if regen_timer ~= nil then
mana.settings.regen_timer = regen_timer mana.settings.regen_timer = regen_timer
end end
end end
minetest.mkdir(minetest.get_worldpath() .. "/mana/")
--[===[ --[===[
API functions API functions
]===] ]===]
@ -159,39 +159,35 @@ end
-- Load the playerlist from a previous session, if available. -- Load the playerlist from a previous session, if available.
function mana.load_file(playername) do
local filepath = minetest.get_worldpath().."/mana/" .. playername local filepath = minetest.get_worldpath().."/mana.mt"
local file = io.open(filepath, "r") local file = io.open(filepath, "r")
if file then if file then
minetest.log("action", "[mana] File opened for player " .. playername .. ".") minetest.log("action", "[mana] mana.mt opened.")
local string = file:read() local string = file:read()
io.close(file) io.close(file)
if(string ~= nil) then if(string ~= nil) then
local savetable = minetest.deserialize(string) local savetable = minetest.deserialize(string)
if savetable and type(savetable) == "table" then mana.playerlist = savetable.playerlist
minetest.log("action", "[mana] Data successfully read.") minetest.debug("[mana] mana.mt successfully read.")
return savetable
end
end end
end end
return {}
end end
mana.playerlist = {} function mana.save_to_file()
local savetable = {}
function mana.save_to_file(playername) savetable.playerlist = mana.playerlist
local savetable = mana.playerlist[playername]
local savestring = minetest.serialize(savetable) local savestring = minetest.serialize(savetable)
local filepath = minetest.get_worldpath().."/mana/" .. playername local filepath = minetest.get_worldpath().."/mana.mt"
local file = io.open(filepath, "w") local file = io.open(filepath, "w")
if file then if file then
file:write(savestring) file:write(savestring)
io.close(file) io.close(file)
minetest.log("action", "[mana] Wrote mana data for "..playername..".") minetest.log("action", "[mana] Wrote mana data into "..filepath..".")
else else
minetest.log("error", "[mana] Failed to write mana data for "..playername..".") minetest.log("error", "[mana] Failed to write mana data into "..filepath..".")
end end
end end
@ -208,21 +204,19 @@ minetest.register_on_leaveplayer(function(player)
if not minetest.get_modpath("hudbars") ~= nil then if not minetest.get_modpath("hudbars") ~= nil then
mana.hud_remove(playername) mana.hud_remove(playername)
end end
mana.save_to_file(playername) mana.save_to_file()
end) end)
minetest.register_on_shutdown(function() minetest.register_on_shutdown(function()
minetest.log("action", "[mana] Server shuts down. Rescuing data into mana.mt") minetest.log("action", "[mana] Server shuts down. Rescuing data into mana.mt")
for _, pref in pairs(minetest.get_connected_players()) do mana.save_to_file()
mana.save_to_file(pref:get_player_name())
end
end) end)
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
local playername = player:get_player_name() local playername = player:get_player_name()
mana.playerlist[playername] = mana.load_file(playername) if mana.playerlist[playername] == nil then
if not mana.playerlist[playername].mana then mana.playerlist[playername] = {}
mana.playerlist[playername].mana = 0 mana.playerlist[playername].mana = 0
mana.playerlist[playername].maxmana = mana.settings.default_max mana.playerlist[playername].maxmana = mana.settings.default_max
mana.playerlist[playername].regen = mana.settings.default_regen mana.playerlist[playername].regen = mana.settings.default_regen
@ -243,38 +237,41 @@ end)
mana.regen_timer = 0 mana.regen_timer = 0
function mana_regen_step() minetest.register_globalstep(function(dtime)
local players = minetest.get_connected_players() mana.regen_timer = mana.regen_timer + dtime
for i=1, #players do if mana.regen_timer >= mana.settings.regen_timer then
local name = players[i]:get_player_name() local factor = math.floor(mana.regen_timer / mana.settings.regen_timer)
if mana.playerlist[name] ~= nil then local players = minetest.get_connected_players()
if players[i]:get_hp() > 0 then for i=1, #players do
local plus = mana.playerlist[name].regen local name = players[i]:get_player_name()
-- Compability check for version <= 1.0.2 which did not have the remainder field if mana.playerlist[name] ~= nil then
if mana.playerlist[name].remainder ~= nil then if players[i]:get_hp() > 0 then
plus = plus + mana.playerlist[name].remainder local plus = mana.playerlist[name].regen * factor
-- Compability check for version <= 1.0.2 which did not have the remainder field
if mana.playerlist[name].remainder ~= nil then
plus = plus + mana.playerlist[name].remainder
end
local plus_now = math.floor(plus)
local floor = plus - plus_now
if plus_now > 0 then
mana.add_up_to(name, plus_now)
else
mana.subtract_up_to(name, math.abs(plus_now))
end
mana.playerlist[name].remainder = floor
end end
local plus_now = math.floor(plus)
local floor = plus - plus_now
if plus_now > 0 then
mana.add_up_to(name, plus_now)
else
mana.subtract_up_to(name, math.abs(plus_now))
end
mana.playerlist[name].remainder = floor
end end
end end
mana.regen_timer = mana.regen_timer % mana.settings.regen_timer
end end
minetest.after(mana.settings.regen_timer, mana_regen_step) end)
end
minetest.after(0, mana_regen_step)
--[===[ --[===[
HUD functions HUD functions
]===] ]===]
if minetest.get_modpath("hudbars") ~= nil then if minetest.get_modpath("hudbars") ~= nil then
hb.register_hudbar("mana", 0xFFFFFF, "Mana", { bar = "mana_bar_purple.png", icon = "mana_icon_purple.png", bgicon = "mana_bgicon.png" }, 0, mana.settings.default_max, false) hb.register_hudbar("mana", 0xFFFFFF, S("Mana"), { bar = "mana_bar.png", icon = "mana_icon.png", bgicon = "mana_bgicon.png" }, 0, mana.settings.default_max, false)
function mana.hud_update(playername) function mana.hud_update(playername)
local player = minetest.get_player_by_name(playername) local player = minetest.get_player_by_name(playername)
@ -288,39 +285,28 @@ if minetest.get_modpath("hudbars") ~= nil then
else else
function mana.manastring(playername) function mana.manastring(playername)
return string.format("Mana: %d/%d", mana.get(playername), mana.getmax(playername)) return S("Mana: @1/@2", mana.get(playername), mana.getmax(playername))
end end
function mana.hud_add(playername) function mana.hud_add(playername)
local player = minetest.get_player_by_name(playername) local player = minetest.get_player_by_name(playername)
player:hud_add({
hud_elem_type = "statbar",
position = {x=0.5,y=1},
size = {x=24, y=24},
text = "mana_icon_bg_empty.png",
number = 20,
alignment = {x=-1,y=-1},
offset = {x=80, y=-186},
}
)
local id = player:hud_add({ local id = player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "text",
position = {x=0.5,y=1}, position = { x = 0.5, y=1 },
size = {x=24, y=24}, text = mana.manastring(playername),
text = "mana_icon_purple.png", scale = { x = 0, y = 0 },
number = mana.get(playername)/10, alignment = { x = 1, y = 0},
alignment = {x=-1,y=-1}, direction = 1,
offset = {x=80, y=-186}, number = 0xFFFFFF,
} offset = { x = -262, y = -103}
) })
mana.playerlist[playername].hudid = id mana.playerlist[playername].hudid = id
return id return id
end end
function mana.hud_update(playername) function mana.hud_update(playername)
local player = minetest.get_player_by_name(playername) local player = minetest.get_player_by_name(playername)
player:hud_change(mana.playerlist[playername].hudid, "number", mana.get(playername)/100) player:hud_change(mana.playerlist[playername].hudid, "text", mana.manastring(playername))
end end
function mana.hud_remove(playername) function mana.hud_remove(playername)

3
locale/mana.de.tr Normal file
View File

@ -0,0 +1,3 @@
# textdomain:mana
Mana=Mana
Mana: @1/@2=Mana: @1/@2

3
locale/template.txt Normal file
View File

@ -0,0 +1,3 @@
# textdomain:mana
Mana=
Mana: @1/@2=

3
mod.conf Normal file
View File

@ -0,0 +1,3 @@
name = mana
description = Adds a mana attribute to players, can be used as energy source for magical items, etc.
optional_depends = hudbars

BIN
screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

0
textures/mana_bar.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 B

BIN
textures/mana_bgicon.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
textures/mana_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 B