1
0
mirror of git://repo.or.cz/minetest_mana.git synced 2025-06-29 13:40:23 +02:00

1 Commits

Author SHA1 Message Date
65abb7c67e Version MFF. 2018-09-08 00:19:16 +02:00
13 changed files with 97 additions and 89 deletions

2
API.md Normal file → Executable file
View File

@ -1,4 +1,4 @@
API documentation for Mana 1.2.0
API documentation for Mana 1.1.0
================================
## Introduction

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

@ -1,16 +1,18 @@
# Mana [mana]
Mana mod [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/>
* Version: 1.2.0
* Note: This mod uses semantic versioning, as defined by version 2.0.0 of the SemVer standard. See: <http://semver.org/>
## Description
Description
===========
This mod adds basic support for mana to Minetest.
Each player will have an additional attribute: Mana. To be precise:
* Current mana reserves: How much mana the player currently has
* 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)
- Current mana reserves: How much mana the player currently has
- 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)
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
@ -23,14 +25,15 @@ 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
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.
## Configuration
Configuration
=============
This mod can be configured with minetest.conf! The following settings are accepted:
@ -40,9 +43,10 @@ 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
as those could probably stress your machine a lot.
License information
===================
* `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 3.0, originally by Buch, modified by Wuzzy.
* `textures/mana_bar.png`: [WTFPL](http://www.wtfpl.net/txt/copying/) by Wuzzy.
* textures/mana_icon.png: CC-BY 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_bar.png: WTFPL by Wuzzy.
* Everything else: WTFPL.

1
depends.txt Normal file → Executable file
View File

@ -1,2 +1 @@
hudbars?
intllib?

0
description.txt Normal file → Executable file
View File

133
init.lua Normal file → Executable file
View File

@ -1,5 +1,5 @@
--[[
Mana
Mana 1.0.2
This mod adds mana to players, a special attribute
License: WTFPL
@ -9,20 +9,13 @@ License: WTFPL
Initialization
]===]
local S
if (minetest.get_modpath("intllib")) then
S = intllib.Getter()
else
S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
end
mana = {}
mana.playerlist = {}
mana.settings = {}
mana.settings.default_max = 200
mana.settings.default_regen = 1
mana.settings.regen_timer = 0.2
mana.settings.default_regen = 10
mana.settings.regen_timer = 10
do
local default_max = tonumber(minetest.setting_get("mana_default_max"))
@ -42,6 +35,8 @@ do
end
minetest.mkdir(minetest.get_worldpath() .. "/mana/")
--[===[
API functions
]===]
@ -164,35 +159,39 @@ end
-- Load the playerlist from a previous session, if available.
do
local filepath = minetest.get_worldpath().."/mana.mt"
function mana.load_file(playername)
local filepath = minetest.get_worldpath().."/mana/" .. playername
local file = io.open(filepath, "r")
if file then
minetest.log("action", "[mana] mana.mt opened.")
minetest.log("action", "[mana] File opened for player " .. playername .. ".")
local string = file:read()
io.close(file)
if(string ~= nil) then
local savetable = minetest.deserialize(string)
mana.playerlist = savetable.playerlist
minetest.debug("[mana] mana.mt successfully read.")
if savetable and type(savetable) == "table" then
minetest.log("action", "[mana] Data successfully read.")
return savetable
end
end
end
return {}
end
function mana.save_to_file()
local savetable = {}
savetable.playerlist = mana.playerlist
mana.playerlist = {}
function mana.save_to_file(playername)
local savetable = mana.playerlist[playername]
local savestring = minetest.serialize(savetable)
local filepath = minetest.get_worldpath().."/mana.mt"
local filepath = minetest.get_worldpath().."/mana/" .. playername
local file = io.open(filepath, "w")
if file then
file:write(savestring)
io.close(file)
minetest.log("action", "[mana] Wrote mana data into "..filepath..".")
minetest.log("action", "[mana] Wrote mana data for "..playername..".")
else
minetest.log("error", "[mana] Failed to write mana data into "..filepath..".")
minetest.log("error", "[mana] Failed to write mana data for "..playername..".")
end
end
@ -209,19 +208,21 @@ minetest.register_on_leaveplayer(function(player)
if not minetest.get_modpath("hudbars") ~= nil then
mana.hud_remove(playername)
end
mana.save_to_file()
mana.save_to_file(playername)
end)
minetest.register_on_shutdown(function()
minetest.log("action", "[mana] Server shuts down. Rescuing data into mana.mt")
mana.save_to_file()
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(pref:get_player_name())
end
end)
minetest.register_on_joinplayer(function(player)
local playername = player:get_player_name()
if mana.playerlist[playername] == nil then
mana.playerlist[playername] = {}
mana.playerlist[playername] = mana.load_file(playername)
if not mana.playerlist[playername].mana then
mana.playerlist[playername].mana = 0
mana.playerlist[playername].maxmana = mana.settings.default_max
mana.playerlist[playername].regen = mana.settings.default_regen
@ -242,41 +243,38 @@ end)
mana.regen_timer = 0
minetest.register_globalstep(function(dtime)
mana.regen_timer = mana.regen_timer + dtime
if mana.regen_timer >= mana.settings.regen_timer then
local factor = math.floor(mana.regen_timer / mana.settings.regen_timer)
local players = minetest.get_connected_players()
for i=1, #players do
local name = players[i]:get_player_name()
if mana.playerlist[name] ~= nil then
if players[i]:get_hp() > 0 then
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
function mana_regen_step()
local players = minetest.get_connected_players()
for i=1, #players do
local name = players[i]:get_player_name()
if mana.playerlist[name] ~= nil then
if players[i]:get_hp() > 0 then
local plus = mana.playerlist[name].regen
-- 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
mana.regen_timer = mana.regen_timer % mana.settings.regen_timer
end
end)
minetest.after(mana.settings.regen_timer, mana_regen_step)
end
minetest.after(0, mana_regen_step)
--[===[
HUD functions
]===]
if minetest.get_modpath("hudbars") ~= nil then
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)
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)
function mana.hud_update(playername)
local player = minetest.get_player_by_name(playername)
@ -290,28 +288,39 @@ if minetest.get_modpath("hudbars") ~= nil then
else
function mana.manastring(playername)
return S("Mana: @1/@2", mana.get(playername), mana.getmax(playername))
return string.format("Mana: %d/%d", mana.get(playername), mana.getmax(playername))
end
function mana.hud_add(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({
hud_elem_type = "text",
position = { x = 0.5, y=1 },
text = mana.manastring(playername),
scale = { x = 0, y = 0 },
alignment = { x = 1, y = 0},
direction = 1,
number = 0xFFFFFF,
offset = { x = -262, y = -103}
})
hud_elem_type = "statbar",
position = {x=0.5,y=1},
size = {x=24, y=24},
text = "mana_icon_purple.png",
number = mana.get(playername)/10,
alignment = {x=-1,y=-1},
offset = {x=80, y=-186},
}
)
mana.playerlist[playername].hudid = id
return id
end
function mana.hud_update(playername)
local player = minetest.get_player_by_name(playername)
player:hud_change(mana.playerlist[playername].hudid, "text", mana.manastring(playername))
player:hud_change(mana.playerlist[playername].hudid, "number", mana.get(playername)/100)
end
function mana.hud_remove(playername)

View File

@ -1,2 +0,0 @@
Mana = Mana
Mana: @1/@2 = Mana: @1/@2

View File

@ -1,2 +0,0 @@
Mana =
Mana: @1/@2 =

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

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

BIN
textures/mana_bar_purple.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

BIN
textures/mana_bgicon.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

BIN
textures/mana_icon_bg_empty.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

BIN
textures/mana_icon_purple.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B