Hopefully stop lag
|
@ -94,14 +94,18 @@ function chatplus.clean_players()
|
||||||
(not value.inbox or #value.inbox==0) and
|
(not value.inbox or #value.inbox==0) and
|
||||||
(not value.ignore or #value.ignore==0)
|
(not value.ignore or #value.ignore==0)
|
||||||
) then
|
) then
|
||||||
minetest.log("Deleting blank player "..key)
|
|
||||||
value[key] = nil
|
value[key] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
chatplus.save()
|
chatplus.save()
|
||||||
minetest.log("[Chatplus] Clean complete")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function cp_tick()
|
||||||
|
chatplus.clean_players()
|
||||||
|
minetest.after(30*60, cp_tick)
|
||||||
|
end
|
||||||
|
minetest.after(30*60, cp_tick)
|
||||||
|
|
||||||
function chatplus.poke(name,player)
|
function chatplus.poke(name,player)
|
||||||
local function check(name,value)
|
local function check(name,value)
|
||||||
if not chatplus.players[name][value] then
|
if not chatplus.players[name][value] then
|
||||||
|
@ -364,7 +368,7 @@ minetest.register_globalstep(function(dtime)
|
||||||
hud_elem_type = "text",
|
hud_elem_type = "text",
|
||||||
name = "MailText",
|
name = "MailText",
|
||||||
position = {x=0.55, y=0.52},
|
position = {x=0.55, y=0.52},
|
||||||
text=#value.inbox,
|
text=#value.inbox .. " /inbox",
|
||||||
scale = {x=1,y=1},
|
scale = {x=1,y=1},
|
||||||
alignment = {x=0.5, y=0.5},
|
alignment = {x=0.5, y=0.5},
|
||||||
})
|
})
|
||||||
|
|
22
mods/chatplus/tmp.lua
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
--[[
|
||||||
|
if #msg > 200 then
|
||||||
|
local warn = warned[from] or { count = 0 }
|
||||||
|
warned[from] = warn
|
||||||
|
warn.count = warn.count + 1
|
||||||
|
warn.time = minetest.get_gametime()
|
||||||
|
|
||||||
|
if warn.count > 3 then
|
||||||
|
if been_kicked[from] then
|
||||||
|
minetest.kick_player(from, "Too long chat message! ")
|
||||||
|
been_kicked =
|
||||||
|
else
|
||||||
|
minetest.kick_player(from, "Too long chat message! Next time is temp-ban.")
|
||||||
|
been_kicked
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(from, "That chat message was rather long! " ..
|
||||||
|
(2 - warn.count) .. " warnings remaining.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
]]
|
|
@ -1,174 +0,0 @@
|
||||||
API documentation for the HUD bars mod 1.2.1
|
|
||||||
============================================
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
This API allows you to add, change, hide and unhide custom HUD bars for this mod.
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
To give you a *very* brief overview over this API, here is the basic workflow on how to add your own custom HUD bar:
|
|
||||||
|
|
||||||
* Create images for your HUD bar
|
|
||||||
* Call `hb.register_hudbar` to make the definition of the HUD bar known to this mod
|
|
||||||
* Call `hb.init_hudbar` for each player for which you want to use previously defined HUD bar
|
|
||||||
* Use `hb.change_hudbar` whenever you need to change the values of a HUD bar of a certain player
|
|
||||||
* If you need it: Use `hb.hide_hudbar` and `hb.unhide_hudbar` to hide or unhide HUD bars of a certain player
|
|
||||||
|
|
||||||
## The basic rules
|
|
||||||
In order to use this API, you should be aware of a few basic rules in order to understand it:
|
|
||||||
|
|
||||||
* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%.
|
|
||||||
* The current value must always be equal to or smaller then the maximum
|
|
||||||
* Both current value and maximum must not be smaller than 0
|
|
||||||
* Both current value and maximum must be real numbers. So no NaN, infinity, etc.
|
|
||||||
* The HUD bar will be hidden if the maximum equals 0. This is intentional.
|
|
||||||
* The health and breath HUD bars are hardcoded.
|
|
||||||
|
|
||||||
These are soft rules, the HUD bars mod will not enforce all of these.
|
|
||||||
But this mod has been programmed under the assumption that these rules are followed, for integrity.
|
|
||||||
|
|
||||||
## Adding a HUD bar
|
|
||||||
To make a new HUD bar known to this mod, you need …
|
|
||||||
|
|
||||||
* … an image of size 2×16 for the bar
|
|
||||||
* … an icon of size 16×16 (optional)
|
|
||||||
* … to register it with `hb.register_hudbar`
|
|
||||||
|
|
||||||
### Bar image
|
|
||||||
The image for the bar will be repeated horizontally to denote the “value” of the HUD bar.
|
|
||||||
It **must** be of size 2×16.
|
|
||||||
If neccessary, the image will be split vertically in half, and only the left half of the image
|
|
||||||
is displayed. So the final HUD bar will always be displayed on a per-pixel basis.
|
|
||||||
|
|
||||||
The default bar images are single-colored, but you can use other styles as well, for instance,
|
|
||||||
a vertical gradient.
|
|
||||||
|
|
||||||
### Icon
|
|
||||||
A 16×16 image shown left of the HUD bar. This is optional.
|
|
||||||
|
|
||||||
### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)`
|
|
||||||
This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden
|
|
||||||
and unhidden on a per-player basis.
|
|
||||||
Note this does not yet display the HUD bar.
|
|
||||||
|
|
||||||
The HUD bars will be displayed in a “first come, first serve” order. This mod does not allow fow a custom order or a way to set it
|
|
||||||
manually in a reliable way.
|
|
||||||
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `identifier`: A globally unique internal name for the HUD bar, will be used later to refer to it. Please only rely on alphanumeric characters for now. The identifiers “`health`” and “`breath`” are used internally for the built-in health and breath bar, respectively. Please do not use these names.
|
|
||||||
* `text_color`: A 3-octet number defining the color of the text. The octets denote, in this order red, green and blue and range from `0x00` (complete lack of this component) to `0xFF` (full intensity of this component). Example: `0xFFFFFF` for white.
|
|
||||||
* `label`: A string which is displayed on the HUD bar itself to describe the HUD bar. Try to keep this string short.
|
|
||||||
* `textures`: A table with the following fields:
|
|
||||||
* `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section).
|
|
||||||
* `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used.
|
|
||||||
* `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode.
|
|
||||||
* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
|
|
||||||
* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
|
|
||||||
* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
|
|
||||||
* `format_string`: This is optional; You can specify an alternative format string display the final text on the HUD bar. The default format string is “`%s: %d/%d`” (in this order: Label, current value, maximum value). See also the Lua documentation of `string.format`.
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
Always `nil`.
|
|
||||||
|
|
||||||
|
|
||||||
## Displaying a HUD bar
|
|
||||||
After a HUD bar has been registered, they are not yet displayed yet for any player. HUD bars must be
|
|
||||||
explicitly initialized on a per-player basis.
|
|
||||||
|
|
||||||
You probably want to do this in the `minetest.register_on_joinplayer`.
|
|
||||||
|
|
||||||
### `hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)`
|
|
||||||
This function initialzes and activates a previously registered HUD bar and assigns it to a
|
|
||||||
certain client/player. This has only to be done once per player and after that, you can change
|
|
||||||
the values using `hb.change_hudbar`.
|
|
||||||
|
|
||||||
However, if `start_hidden` was set to `true` for the HUD bar (in `hb.register_hudbar`), the HUD bar
|
|
||||||
will initially be hidden, but the HUD elements are still sent to the client. Otherwise,
|
|
||||||
the HUD bar will be initially be shown to the player.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `player`: `ObjectRef` of the player to which the new HUD bar should be displayed to.
|
|
||||||
* `identifier`: The identifier of the HUD bar type, as specified in `hb.register_hudbar`.
|
|
||||||
* `start_value`: The initial current value of the HUD bar. This is optional, `default_start_value` of the registration function will be used, if this is `nil`.
|
|
||||||
* `start_max`: The initial maximum value of the HUD bar. This is optional, `default_start_max` of the registration function will be used, if this is `nil`
|
|
||||||
* `start_hidden`: Whether the HUD bar is initially hidden. This is optional, `default_start_hidden` of the registration function will be used as default
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
Always `nil`.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Modifying a HUD bar
|
|
||||||
After a HUD bar has been added, you can change the current and maximum value on a per-player basis.
|
|
||||||
You use the function `hb.change_hudbar` for this.
|
|
||||||
|
|
||||||
### `hb.change_hudbar(player, identifier, new_value, new_max_value)`
|
|
||||||
Changes the values of an initialized HUD bar for a certain player. `new_value` and `new_max_value`
|
|
||||||
can be `nil`; if one of them is `nil`, that means the value is unchanged. If both values
|
|
||||||
are `nil`, this function is a no-op.
|
|
||||||
This function also tries minimize the amount of calls to `hud_change` of the Minetest Lua API, and
|
|
||||||
therefore, network traffic. `hud_change` is only called if it is actually needed, i.e. when the
|
|
||||||
actual length of the bar or the displayed string changed, so you do not have to worry about it.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
|
||||||
* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`.
|
|
||||||
* `new_value`: The new current value of the HUD bar
|
|
||||||
* `new_max_value`: The new maximum value of the HUD bar
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
Always `nil`.
|
|
||||||
|
|
||||||
|
|
||||||
## Hiding and unhiding a HUD bar
|
|
||||||
You can also hide custom HUD bars, meaning they will not be displayed for a certain player. You can still
|
|
||||||
use `hb.change_hudbar` on a hidden HUD bar, the new values will be correctly displayed after the HUD bar
|
|
||||||
has been unhidden. Both functions will only call `hud_change` if there has been an actual change to avoid
|
|
||||||
unneccessary traffic.
|
|
||||||
|
|
||||||
Note that the hidden state of a HUD bar will *not* be saved by this mod on server shutdown, so you may need
|
|
||||||
to write your own routines for this or by setting the correct value for `start_hidden` when calling
|
|
||||||
`hb.init_hudbar`.
|
|
||||||
|
|
||||||
### `hb.hide_hudbar(player, identifier)`
|
|
||||||
Hides the specified HUD bar from the screen of the specified player.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
|
||||||
* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
Always `nil`.
|
|
||||||
|
|
||||||
|
|
||||||
### `hb.unhide_hudbar(player, identifier)`
|
|
||||||
Makes a previously hidden HUD bar visible again to a player.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
|
||||||
* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`.
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
Always `nil`.
|
|
||||||
|
|
||||||
|
|
||||||
## Reading HUD bar information
|
|
||||||
It is also possible to read information about an active HUD bar.
|
|
||||||
|
|
||||||
### `hb.get_hudbar_state(player, identifier)`
|
|
||||||
Returns the current state of the active player's HUD bar.
|
|
||||||
|
|
||||||
#### Parameters
|
|
||||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
|
||||||
* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
|
|
||||||
|
|
||||||
#### Return value
|
|
||||||
A table which holds information on the current state of the HUD bar. Note the table is a deep
|
|
||||||
copy of the internal HUD bar state, it is *not* a reference; the information hold by the table is
|
|
||||||
only true for the moment you called this function. The fields of this table are:
|
|
||||||
|
|
||||||
* `value`: Current value of HUD bar.
|
|
||||||
* `max`: Current maximum value of HUD bar.
|
|
||||||
* `hidden`: Boolean denoting whether the HUD bar is hidden.
|
|
||||||
* `barlength`: The length of the HUD bar in pixels. This field is meaningless if the HUD bar is currently hidden.
|
|
||||||
* `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden.
|
|
|
@ -1,109 +0,0 @@
|
||||||
Minetest mod: HUD bars
|
|
||||||
======================
|
|
||||||
Version: 1.2.1
|
|
||||||
|
|
||||||
This software uses semantic versioning, as defined by version 2.0.0 of the SemVer
|
|
||||||
standard. <http://semver.org/>
|
|
||||||
|
|
||||||
|
|
||||||
License of source code: WTFPL
|
|
||||||
-----------------------------
|
|
||||||
Author: Wuzzy (2015)
|
|
||||||
Forked from the “Better HUD” [hud] mod by BlockMen.
|
|
||||||
|
|
||||||
|
|
||||||
Using the mod:
|
|
||||||
--------------
|
|
||||||
This mod changes the HUD of Minetest. It replaces the default health and breath symbols by horizontal colored bars with text showing
|
|
||||||
the number.
|
|
||||||
|
|
||||||
Furthermore, it enables other mods to add their own custom bars to the HUD, this mod will place them accordingly.
|
|
||||||
|
|
||||||
You can create a “hudbars.conf” file to customize the positions of the health and breath bars. Take a look at “hudbars.conf.example”
|
|
||||||
to get more infos. The lines starting with “--” are comments, remove the two dashes to activate a setting. Settings which are not
|
|
||||||
set will use a default value instead.
|
|
||||||
|
|
||||||
|
|
||||||
IMPORTANT:
|
|
||||||
Keep in mind if running a server with this mod, that the custom position should be displayed correctly on every screen size!
|
|
||||||
|
|
||||||
Settings:
|
|
||||||
---------
|
|
||||||
This mod can be configured by editing minetest.conf. Currently, the following setting is recognized:
|
|
||||||
|
|
||||||
- hudbars_autohide_breath: A boolean setting, it can be either “true” or “false”. If set to “true”,
|
|
||||||
the breath bar will be automatically hidden shortly after the breathbar has been filled up. If set
|
|
||||||
to “false”, the breath bar will always be displayed. The default value is “true”.
|
|
||||||
|
|
||||||
- hudbars_sorting: This setting allows you to specify the “slot” positions of the HUD bars manually.
|
|
||||||
|
|
||||||
The setting has to be specified as a comma-seperated list of key=value pairs, where a key refers to the
|
|
||||||
identifier of a HUD bar and the value refers to the slot number of where the HUD bar should be placed.
|
|
||||||
The slot number must be an integer greater of equal to 0. The slot positions start (slot 0) at the
|
|
||||||
bottom (nearest to hotbar in default configuration) left side, the following slot 1 is at the right
|
|
||||||
side, slot `2` is on the right side again, but placed over the first HUD bar (slot 0), and it goes on,
|
|
||||||
in a zig-zag pattern.
|
|
||||||
All HUD bars to which no sorting rule has been applied will fill in all slots which have not been occupied
|
|
||||||
by the HUD bars specified in this setting, the slots will be filled in from the lowest slot number.
|
|
||||||
Note that the order of those remaining HUD bars is *not* fixed, it basically just boils down on which mod
|
|
||||||
“came” first. Don't worry, the mod will still work perfectly fine, this setting is entirely optional.
|
|
||||||
|
|
||||||
Be careful not to use slot indices twice, or else different HUD bars will be drawn over each other!
|
|
||||||
|
|
||||||
If this setting is not set, by default the health and breath bar are displayed at slot positions 0 and 1,
|
|
||||||
respectively (health bar at left bottom-most positoin, breath bar right from it). All other HUD bars are
|
|
||||||
placed automatically.
|
|
||||||
|
|
||||||
Example value:
|
|
||||||
breath=0, health=1
|
|
||||||
This places the breath bar at the left side, and the health bar to the right side.
|
|
||||||
|
|
||||||
- hudbars_bar_type: Specifies the style of bars. You can select between the default progress-bar-like bars and the good old statbars
|
|
||||||
like you know from vanilla Minetest. Note that the classic and modern statbars are still a little bit experimental.
|
|
||||||
These values are possible:
|
|
||||||
- progress_bar: A horizontal progress-bar-like bar with a label, showing numerical value (current, maximum), and an icon.
|
|
||||||
These bars usually convey the most information. This is the default and recommended value..
|
|
||||||
- statbar_classic: Classic statbar, like in vanilla Minetest. Made out of up to 20 half-symbols. Those bars represent the vague ratio between
|
|
||||||
the current value and the maximum value. 1 half-symbol stands for approximately 5% of the maximum value.
|
|
||||||
- statbar_modern: Like the classic statbar, but also supports background images, this kind of statbar may be considered to be more user-friendly
|
|
||||||
than the classic statbar. This bar type closely resembles the [hud] mod.
|
|
||||||
|
|
||||||
- hudbars_vmargin: The vertical distance between two HUD bars in pixels (default: 24)
|
|
||||||
- hudbars_tick: The number of seconds between two updates of the HUD bars. Increase this number if you have a slow server (default: 0.1)
|
|
||||||
|
|
||||||
Position settings:
|
|
||||||
With these settings you can configure the positions of the HUD bars. All settings must be specified as a number.
|
|
||||||
The pos settings are specified as a floating-point number between 0 to 1 each, the start_offset settings are
|
|
||||||
specified as whole numbers, they specify a number of pixels.
|
|
||||||
The left and right variants are used for the zig-zag mode. In the stack_up and stack_down modes, only the left variant is used for
|
|
||||||
the base position
|
|
||||||
|
|
||||||
- hudbars_pos_left_x, hudbars_pos_left_y: Screen position (x and y) of the left HUD bar in zigzag mode. 0 is left-most/top, 1 is right-most/bottom.
|
|
||||||
Defaults: 0.5 (x) and 1 (y)
|
|
||||||
- hudbars_pos_right_x, hudbars_pos_right_y: Same as above, but for the right one.
|
|
||||||
Defaults: 0.5 and 1.
|
|
||||||
- hudbars_start_offset_left_x, hudbars_start_offset_left_y: Offset in pixels from the basic screen position specified in hudbars_pos_left_x/hudbars_pos_left_y.
|
|
||||||
Defaults: -175 and -86
|
|
||||||
- hudbars_start_offset_right_x, hudbars_start_offset_right_y: Same as above, but for the right one.
|
|
||||||
Defaults: 15 and -86
|
|
||||||
|
|
||||||
API:
|
|
||||||
----
|
|
||||||
The API is used to add your own custom HUD bars.
|
|
||||||
Documentation for the API of this mod can be found in API.md.
|
|
||||||
|
|
||||||
|
|
||||||
License of textures:
|
|
||||||
--------------------
|
|
||||||
hudbars_icon_health.png - celeron55 (CC BY-SA 3.0), modified by BlockMen
|
|
||||||
hudbars_bgicon_health.png - celeron55 (CC BY-SA 3.0), modified by BlockMen
|
|
||||||
hudbars_icon_breath.png - kaeza (WTFPL), modified by BlockMen
|
|
||||||
hudbars_bar_health.png - Wuzzy (WTFPL)
|
|
||||||
hudbars_bar_breath.png - Wuzzy (WTFPL)
|
|
||||||
hudbars_bar_background.png - Wuzzy(WTFPL)
|
|
||||||
|
|
||||||
This program is free software. It comes without any warranty, to
|
|
||||||
the extent permitted by applicable law. You can redistribute it
|
|
||||||
and/or modify it under the terms of the Do What The Fuck You Want
|
|
||||||
To Public License, Version 2, as published by Sam Hocevar. See
|
|
||||||
http://sam.zoy.org/wtfpl/COPYING for more details.
|
|
|
@ -1,66 +0,0 @@
|
||||||
Note: This software uses semantic versioning,
|
|
||||||
as of version 2.0.0 of the standard <http://semver.org/>.
|
|
||||||
|
|
||||||
0.1.0
|
|
||||||
-----
|
|
||||||
- Initial release, forked from mod “Better HUD” [hud].
|
|
||||||
|
|
||||||
0.2.0
|
|
||||||
-----
|
|
||||||
- Add API documentation
|
|
||||||
|
|
||||||
0.3.0
|
|
||||||
-----
|
|
||||||
- Rename main table from “hud” to “hb” (affects function names!)
|
|
||||||
- Arguments 3-4 of hb.change_hudbar can be nil for values which should not change
|
|
||||||
- Add proper function hb.init_hudbar, replaces odd call to hud.hudtables[identifier].add_all
|
|
||||||
- Update API documentation and fix mistakes
|
|
||||||
- Use “hudbars.conf” instead of “hud.conf”
|
|
||||||
|
|
||||||
0.4.0
|
|
||||||
-----
|
|
||||||
- New function: hb.get_hudbar_state to get information about the state of an active HUD bar, such as values, whether it is hidden, etc.
|
|
||||||
- hb.change_hudbar has been optimized to call hud_change fewer times, which is hopefully good for networking
|
|
||||||
- Rename hb.register_hudbar parameter “start_hide” to “start_hidden”
|
|
||||||
- start_hidden parameter now finally works
|
|
||||||
- Do not affect other HUD flags (crosshair, wielditem, etc.) when starting mod
|
|
||||||
- Show error message when trying to call hb.init_hudbar or hb.change_hudbar with bad values
|
|
||||||
- Update documentation
|
|
||||||
- Lots of refactoring
|
|
||||||
- Health and breath bar now use API
|
|
||||||
|
|
||||||
1.0.0
|
|
||||||
-----
|
|
||||||
- Add new parameter start_hidden to hb.init_hudbar, specified whether HUD bar is hidden on start
|
|
||||||
- Copy-editing of API.md and README.txt
|
|
||||||
- Internal: Fix add_all weirdness
|
|
||||||
|
|
||||||
1.0.1
|
|
||||||
-----
|
|
||||||
- Fix race condition causing crash at start of server
|
|
||||||
|
|
||||||
1.0.2
|
|
||||||
-----
|
|
||||||
- Fix other HUD elements disappearing for rejoining players
|
|
||||||
- Remove pointless delays for initializing the HUD for new or rejoining players
|
|
||||||
|
|
||||||
1.0.3
|
|
||||||
-----
|
|
||||||
- Adjust default HUD bars position for Minetest 0.4.12
|
|
||||||
|
|
||||||
1.1.0
|
|
||||||
-----
|
|
||||||
- Add boolean minetest.conf setting support (hudbars_autohide_breathbar) to control whether the breath bar is automatically hidden when full (default: yes)
|
|
||||||
|
|
||||||
1.2.0
|
|
||||||
-----
|
|
||||||
- New setting: hudbars_sorting. You can now manually sort all the HUD bars. Useful if you don't like automatic order
|
|
||||||
- New setting: hudbars_bar_type. You now can change the appearance of the HUD bars.
|
|
||||||
- New HUD bar types, slightly experimental: Classic statbars and modern [hud]-style statbars
|
|
||||||
- New experimental/unfinished setting: hudbars_alignment_pattern: You can now make the HUD bars stack vertically instead of the current zig-zag pattern. Note you probably need to change source code to productively use this feature
|
|
||||||
- Various position-related HUD bar settings (see README.txt)
|
|
||||||
- Remove hudbars.conf support and hudbars.conf.example (was never officially supported anyways)
|
|
||||||
|
|
||||||
1.2.1
|
|
||||||
-----
|
|
||||||
- Fix crash when enable_damage is changed in mid-game
|
|
|
@ -1,477 +0,0 @@
|
||||||
hb = {}
|
|
||||||
|
|
||||||
hb.hudtables = {}
|
|
||||||
|
|
||||||
-- number of registered HUD bars
|
|
||||||
hb.hudbars_count = 0
|
|
||||||
|
|
||||||
-- table which records which HUD bar slots have been “registered” so far; used for automatic positioning
|
|
||||||
hb.registered_slots = {}
|
|
||||||
|
|
||||||
hb.settings = {}
|
|
||||||
|
|
||||||
function hb.load_setting(sname, stype, defaultval, valid_values)
|
|
||||||
local sval
|
|
||||||
if stype == "string" then
|
|
||||||
sval = minetest.setting_get(sname)
|
|
||||||
elseif stype == "bool" then
|
|
||||||
sval = minetest.setting_getbool(sname)
|
|
||||||
elseif stype == "number" then
|
|
||||||
sval = tonumber(minetest.setting_get(sname))
|
|
||||||
end
|
|
||||||
if sval ~= nil then
|
|
||||||
if valid_values ~= nil then
|
|
||||||
local valid = false
|
|
||||||
for i=1,#valid_values do
|
|
||||||
if sval == valid_values[i] then
|
|
||||||
valid = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not valid then
|
|
||||||
minetest.log("error", "[hudbars] Invalid value for "..sname.."! Using default value ("..tostring(defaultval)..").")
|
|
||||||
return defaultval
|
|
||||||
else
|
|
||||||
return sval
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return sval
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return defaultval
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- (hardcoded) default settings
|
|
||||||
hb.settings.max_bar_length = 160
|
|
||||||
hb.settings.statbar_length = 20
|
|
||||||
|
|
||||||
-- statbar positions
|
|
||||||
hb.settings.pos_left = {}
|
|
||||||
hb.settings.pos_right = {}
|
|
||||||
hb.settings.start_offset_left = {}
|
|
||||||
hb.settings.start_offset_right= {}
|
|
||||||
hb.settings.pos_left.x = hb.load_setting("hudbars_pos_left_x", "number", 0.5)
|
|
||||||
hb.settings.pos_left.y = hb.load_setting("hudbars_pos_left_y", "number", 1)
|
|
||||||
hb.settings.pos_right.x = hb.load_setting("hudbars_pos_right_x", "number", 0.5)
|
|
||||||
hb.settings.pos_right.y = hb.load_setting("hudbars_pos_right_y", "number", 1)
|
|
||||||
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175)
|
|
||||||
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86)
|
|
||||||
hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15)
|
|
||||||
hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86)
|
|
||||||
|
|
||||||
hb.settings.vmargin = hb.load_setting("hudbars_tick", "number", 24)
|
|
||||||
hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1)
|
|
||||||
|
|
||||||
-- experimental setting: Changing this setting is not officially supported, do NOT rely on it!
|
|
||||||
hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true)
|
|
||||||
|
|
||||||
--[[
|
|
||||||
- hudbars_alignment_pattern: This setting changes the way the HUD bars are ordered on the display. You can choose
|
|
||||||
between a zig-zag pattern or a vertically stacked pattern.
|
|
||||||
The following values are allowed:
|
|
||||||
zigzag: Starting from the left bottom, the next is right from the first,
|
|
||||||
the next is above the first, the next is right of the third, etc.
|
|
||||||
This is the default.
|
|
||||||
stack_up: The HUD bars are stacked vertically, going upwards.
|
|
||||||
stack_down: The HUD bars are stacked vertically, going downwards.
|
|
||||||
]]
|
|
||||||
|
|
||||||
-- Misc. settings
|
|
||||||
hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"})
|
|
||||||
hb.settings.bar_type = hb.load_setting("hudbars_bar_type", "string", "progress_bar", {"progress_bar", "statbar_classic", "statbar_modern"})
|
|
||||||
hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true)
|
|
||||||
|
|
||||||
local sorting = minetest.setting_get("hudbars_sorting")
|
|
||||||
if sorting ~= nil then
|
|
||||||
hb.settings.sorting = {}
|
|
||||||
hb.settings.sorting_reverse = {}
|
|
||||||
for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do
|
|
||||||
hb.settings.sorting[k] = tonumber(v)
|
|
||||||
hb.settings.sorting_reverse[tonumber(v)] = k
|
|
||||||
end
|
|
||||||
else
|
|
||||||
hb.settings.sorting = { ["health"] = 0, ["breath"] = 1 }
|
|
||||||
hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" }
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Table which contains all players with active default HUD bars (only for internal use)
|
|
||||||
hb.players = {}
|
|
||||||
|
|
||||||
function hb.value_to_barlength(value, max)
|
|
||||||
if max == 0 then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
local x
|
|
||||||
if value < 0 then x=-0.5 else x = 0.5 end
|
|
||||||
local ret = math.modf((value/max) * hb.settings.max_bar_length + x)
|
|
||||||
return ret
|
|
||||||
else
|
|
||||||
local x
|
|
||||||
if value < 0 then x=-0.5 else x = 0.5 end
|
|
||||||
local ret = math.modf((value/max) * hb.settings.statbar_length + x)
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.get_hudtable(identifier)
|
|
||||||
return hb.hudtables[identifier]
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.get_hudbar_position_index(identifier)
|
|
||||||
if hb.settings.sorting[identifier] ~= nil then
|
|
||||||
return hb.settings.sorting[identifier]
|
|
||||||
else
|
|
||||||
local i = 0
|
|
||||||
while true do
|
|
||||||
if hb.registered_slots[i] ~= true and hb.settings.sorting_reverse[i] == nil then
|
|
||||||
return i
|
|
||||||
end
|
|
||||||
i = i + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)
|
|
||||||
minetest.log("action", "hb.register_hudbar: "..tostring(identifier))
|
|
||||||
local hudtable = {}
|
|
||||||
local pos, offset
|
|
||||||
local index = math.floor(hb.get_hudbar_position_index(identifier))
|
|
||||||
hb.registered_slots[index] = true
|
|
||||||
if hb.settings.alignment_pattern == "stack_up" then
|
|
||||||
pos = hb.settings.pos_left
|
|
||||||
offset = {
|
|
||||||
x = hb.settings.start_offset_left.x,
|
|
||||||
y = hb.settings.start_offset_left.y - hb.settings.vmargin * index
|
|
||||||
}
|
|
||||||
elseif hb.settings.alignment_pattern == "stack_down" then
|
|
||||||
pos = hb.settings.pos_left
|
|
||||||
offset = {
|
|
||||||
x = hb.settings.start_offset_left.x,
|
|
||||||
y = hb.settings.start_offset_left.y + hb.settings.vmargin * index
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if index % 2 == 0 then
|
|
||||||
pos = hb.settings.pos_left
|
|
||||||
offset = {
|
|
||||||
x = hb.settings.start_offset_left.x,
|
|
||||||
y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2)
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pos = hb.settings.pos_right
|
|
||||||
offset = {
|
|
||||||
x = hb.settings.start_offset_right.x,
|
|
||||||
y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if format_string == nil then
|
|
||||||
format_string = "%s: %d/%d"
|
|
||||||
end
|
|
||||||
|
|
||||||
hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden)
|
|
||||||
if start_value == nil then start_value = hudtable.default_start_value end
|
|
||||||
if start_max == nil then start_max = hudtable.default_start_max end
|
|
||||||
if start_hidden == nil then start_hidden = hudtable.default_start_hidden end
|
|
||||||
local ids = {}
|
|
||||||
local state = {}
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local bgscale, iconscale, text, barnumber
|
|
||||||
if start_max == 0 or start_hidden then
|
|
||||||
bgscale = { x=0, y=0 }
|
|
||||||
else
|
|
||||||
bgscale = { x=1, y=1 }
|
|
||||||
end
|
|
||||||
if start_hidden then
|
|
||||||
iconscale = { x=0, y=0 }
|
|
||||||
barnumber = 0
|
|
||||||
text = ""
|
|
||||||
else
|
|
||||||
iconscale = { x=1, y=1 }
|
|
||||||
barnumber = hb.value_to_barlength(start_value, start_max)
|
|
||||||
text = string.format(format_string, label, start_value, start_max)
|
|
||||||
end
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
ids.bg = player:hud_add({
|
|
||||||
hud_elem_type = "image",
|
|
||||||
position = pos,
|
|
||||||
scale = bgscale,
|
|
||||||
text = "hudbars_bar_background.png",
|
|
||||||
alignment = {x=1,y=1},
|
|
||||||
offset = { x = offset.x - 1, y = offset.y - 1 },
|
|
||||||
})
|
|
||||||
if textures.icon ~= nil then
|
|
||||||
ids.icon = player:hud_add({
|
|
||||||
hud_elem_type = "image",
|
|
||||||
position = pos,
|
|
||||||
scale = iconscale,
|
|
||||||
text = textures.icon,
|
|
||||||
alignment = {x=-1,y=1},
|
|
||||||
offset = { x = offset.x - 3, y = offset.y },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
elseif hb.settings.bar_type == "statbar_modern" then
|
|
||||||
if textures.bgicon ~= nil then
|
|
||||||
ids.bg = player:hud_add({
|
|
||||||
hud_elem_type = "statbar",
|
|
||||||
position = pos,
|
|
||||||
scale = bgscale,
|
|
||||||
text = textures.bgicon,
|
|
||||||
number = hb.settings.statbar_length,
|
|
||||||
alignment = {x=-1,y=-1},
|
|
||||||
offset = { x = offset.x, y = offset.y },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local bar_image
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
bar_image = textures.bar
|
|
||||||
elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then
|
|
||||||
bar_image = textures.icon
|
|
||||||
end
|
|
||||||
ids.bar = player:hud_add({
|
|
||||||
hud_elem_type = "statbar",
|
|
||||||
position = pos,
|
|
||||||
text = bar_image,
|
|
||||||
number = barnumber,
|
|
||||||
alignment = {x=-1,y=-1},
|
|
||||||
offset = offset,
|
|
||||||
})
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
ids.text = player:hud_add({
|
|
||||||
hud_elem_type = "text",
|
|
||||||
position = pos,
|
|
||||||
text = text,
|
|
||||||
alignment = {x=1,y=1},
|
|
||||||
number = text_color,
|
|
||||||
direction = 0,
|
|
||||||
offset = { x = offset.x + 2, y = offset.y },
|
|
||||||
})
|
|
||||||
end
|
|
||||||
-- Do not forget to update hb.get_hudbar_state if you add new fields to the state table
|
|
||||||
state.hidden = start_hidden
|
|
||||||
state.value = start_value
|
|
||||||
state.max = start_max
|
|
||||||
state.text = text
|
|
||||||
state.barlength = hb.value_to_barlength(start_value, start_max)
|
|
||||||
|
|
||||||
local main_error_text =
|
|
||||||
"[hudbars] Bad initial values of HUD bar identifier “"..tostring(identifier).."” for player "..name..". "
|
|
||||||
|
|
||||||
if start_max < start_value then
|
|
||||||
minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than start_value ("..start_value..")!")
|
|
||||||
end
|
|
||||||
if start_max < 0 then
|
|
||||||
minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than 0!")
|
|
||||||
end
|
|
||||||
if start_value < 0 then
|
|
||||||
minetest.log("error", main_error_text.."start_value ("..start_value..") is smaller than 0!")
|
|
||||||
end
|
|
||||||
|
|
||||||
hb.hudtables[identifier].hudids[name] = ids
|
|
||||||
hb.hudtables[identifier].hudstate[name] = state
|
|
||||||
end
|
|
||||||
|
|
||||||
hudtable.identifier = identifier
|
|
||||||
hudtable.format_string = format_string
|
|
||||||
hudtable.label = label
|
|
||||||
hudtable.hudids = {}
|
|
||||||
hudtable.hudstate = {}
|
|
||||||
hudtable.default_start_hidden = default_start_hidden
|
|
||||||
hudtable.default_start_value = default_start_value
|
|
||||||
hudtable.default_start_max = default_start_max
|
|
||||||
|
|
||||||
hb.hudbars_count= hb.hudbars_count + 1
|
|
||||||
|
|
||||||
hb.hudtables[identifier] = hudtable
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)
|
|
||||||
local hudtable = hb.get_hudtable(identifier)
|
|
||||||
hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.change_hudbar(player, identifier, new_value, new_max_value)
|
|
||||||
if new_value == nil and new_max_value == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local hudtable = hb.get_hudtable(identifier)
|
|
||||||
local value_changed, max_changed = false, false
|
|
||||||
|
|
||||||
if new_value ~= nil then
|
|
||||||
if new_value ~= hudtable.hudstate[name].value then
|
|
||||||
hudtable.hudstate[name].value = new_value
|
|
||||||
value_changed = true
|
|
||||||
end
|
|
||||||
else
|
|
||||||
new_value = hudtable.hudstate[name].value
|
|
||||||
end
|
|
||||||
if new_max_value ~= nil then
|
|
||||||
if new_max_value ~= hudtable.hudstate[name].max then
|
|
||||||
hudtable.hudstate[name].max = new_max_value
|
|
||||||
max_changed = true
|
|
||||||
end
|
|
||||||
else
|
|
||||||
new_max_value = hudtable.hudstate[name].max
|
|
||||||
end
|
|
||||||
|
|
||||||
local main_error_text =
|
|
||||||
"[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. "
|
|
||||||
if new_max_value < new_value then
|
|
||||||
minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than new_value ("..new_value..")!")
|
|
||||||
end
|
|
||||||
if new_max_value < 0 then
|
|
||||||
minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than 0!")
|
|
||||||
end
|
|
||||||
if new_value < 0 then
|
|
||||||
minetest.log("error", main_error_text.."new_value ("..new_value..") is smaller than 0!")
|
|
||||||
end
|
|
||||||
|
|
||||||
if hudtable.hudstate[name].hidden == false then
|
|
||||||
if max_changed and hb.settings.bar_type == "progress_bar" then
|
|
||||||
if hudtable.hudstate[name].max == 0 then
|
|
||||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
|
|
||||||
else
|
|
||||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if value_changed or max_changed then
|
|
||||||
local new_barlength = hb.value_to_barlength(new_value, new_max_value)
|
|
||||||
if new_barlength ~= hudtable.hudstate[name].barlength then
|
|
||||||
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value))
|
|
||||||
hudtable.hudstate[name].barlength = new_barlength
|
|
||||||
end
|
|
||||||
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
local new_text = string.format(hudtable.format_string, hudtable.label, new_value, new_max_value)
|
|
||||||
if new_text ~= hudtable.hudstate[name].text then
|
|
||||||
player:hud_change(hudtable.hudids[name].text, "text", new_text)
|
|
||||||
hudtable.hudstate[name].text = new_text
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.hide_hudbar(player, identifier)
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local hudtable = hb.get_hudtable(identifier)
|
|
||||||
if(hudtable.hudstate[name].hidden == false) then
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
if hudtable.hudids[name].icon ~= nil then
|
|
||||||
player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0})
|
|
||||||
end
|
|
||||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
|
|
||||||
player:hud_change(hudtable.hudids[name].text, "text", "")
|
|
||||||
end
|
|
||||||
player:hud_change(hudtable.hudids[name].bar, "number", 0)
|
|
||||||
hudtable.hudstate[name].hidden = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.unhide_hudbar(player, identifier)
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local hudtable = hb.get_hudtable(identifier)
|
|
||||||
if(hudtable.hudstate[name].hidden) then
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local value = hudtable.hudstate[name].value
|
|
||||||
local max = hudtable.hudstate[name].max
|
|
||||||
if hb.settings.bar_type == "progress_bar" then
|
|
||||||
if hudtable.hudids[name].icon ~= nil then
|
|
||||||
player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1})
|
|
||||||
end
|
|
||||||
if hudtable.hudstate[name].max ~= 0 then
|
|
||||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
|
|
||||||
end
|
|
||||||
player:hud_change(hudtable.hudids[name].text, "text", tostring(string.format(hudtable.format_string, hudtable.label, value, max)))
|
|
||||||
end
|
|
||||||
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
|
|
||||||
hudtable.hudstate[name].hidden = false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function hb.get_hudbar_state(player, identifier)
|
|
||||||
local ref = hb.get_hudtable(identifier).hudstate[player:get_player_name()]
|
|
||||||
-- Do not forget to update this chunk of code in case the state changes
|
|
||||||
local copy = {
|
|
||||||
hidden = ref.hidden,
|
|
||||||
value = ref.value,
|
|
||||||
max = ref.max,
|
|
||||||
text = ref.text,
|
|
||||||
barlength = ref.barlength,
|
|
||||||
}
|
|
||||||
return copy
|
|
||||||
end
|
|
||||||
|
|
||||||
--register built-in HUD bars
|
|
||||||
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
|
|
||||||
hb.register_hudbar("health", 0xFFFFFF, "Health", { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false)
|
|
||||||
hb.register_hudbar("breath", 0xFFFFFF, "Breath", { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png" }, 10, 10, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function hide_builtin(player)
|
|
||||||
local flags = player:hud_get_flags()
|
|
||||||
flags.healthbar = false
|
|
||||||
flags.breathbar = false
|
|
||||||
player:hud_set_flags(flags)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
local function custom_hud(player)
|
|
||||||
local hide = false
|
|
||||||
hb.init_hudbar(player, "health", player:get_hp(), nil, hide)
|
|
||||||
local breath = player:get_breath()
|
|
||||||
local hide_breath
|
|
||||||
if breath == 11 and hb.settings.autohide_breath == true then hide_breath = true else hide_breath = false end
|
|
||||||
hb.init_hudbar(player, "breath", math.min(breath, 10), nil, hide_breath or hide)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- update built-in HUD bars
|
|
||||||
local function update_hud(player)
|
|
||||||
if hb.settings.forceload_default_hudbars then
|
|
||||||
hb.unhide_hudbar(player, "health")
|
|
||||||
end
|
|
||||||
--air
|
|
||||||
local breath = player:get_breath()
|
|
||||||
|
|
||||||
if breath == 11 and hb.settings.autohide_breath == true then
|
|
||||||
hb.hide_hudbar(player, "breath")
|
|
||||||
else
|
|
||||||
hb.unhide_hudbar(player, "breath")
|
|
||||||
hb.change_hudbar(player, "breath", math.min(breath, 10))
|
|
||||||
end
|
|
||||||
|
|
||||||
--health
|
|
||||||
hb.change_hudbar(player, "health", player:get_hp())
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
hide_builtin(player)
|
|
||||||
custom_hud(player)
|
|
||||||
hb.players[player:get_player_name()] = player
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
|
||||||
hb.players[player:get_player_name()] = nil
|
|
||||||
end)
|
|
||||||
|
|
||||||
local main_timer = 0
|
|
||||||
local timer = 0
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
main_timer = main_timer + dtime
|
|
||||||
timer = timer + dtime
|
|
||||||
if main_timer > hb.settings.tick or timer > 4 then
|
|
||||||
if main_timer > hb.settings.tick then main_timer = 0 end
|
|
||||||
-- only proceed if damage is enabled
|
|
||||||
for playername, player in pairs(hb.players) do
|
|
||||||
-- update all hud elements
|
|
||||||
update_hud(player)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if timer > 4 then timer = 0 end
|
|
||||||
end)
|
|
Before Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 80 B |
Before Width: | Height: | Size: 80 B |
Before Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 544 B |
Before Width: | Height: | Size: 321 B |
|
@ -50,7 +50,7 @@ end
|
||||||
function join_fs.show_next_slide(player)
|
function join_fs.show_next_slide(player)
|
||||||
for _, def in pairs(join_fs.slides) do
|
for _, def in pairs(join_fs.slides) do
|
||||||
local pids = join_fs.players[player:get_player_name()] or {}
|
local pids = join_fs.players[player:get_player_name()] or {}
|
||||||
if not pids[def.name] and def.should_show(player) then
|
if def.should_show(player, pids[def.name]) then
|
||||||
def.show(player)
|
def.show(player)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ dofile(minetest.get_modpath("join_fs") .. "/api.lua")
|
||||||
|
|
||||||
join_fs.register_slide({
|
join_fs.register_slide({
|
||||||
name = "rules",
|
name = "rules",
|
||||||
should_show = function(player)
|
should_show = function(player, has_been_shown_before)
|
||||||
return not minetest.check_player_privs(player:get_player_name(), {interact=true})
|
return not minetest.check_player_privs(player:get_player_name(), {interact=true})
|
||||||
end,
|
end,
|
||||||
show = function(player)
|
show = function(player)
|
||||||
|
@ -62,39 +62,3 @@ minetest.register_on_player_receive_fields(function(player, form, fields)
|
||||||
join_fs.show_next_slide(player)
|
join_fs.show_next_slide(player)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
join_fs.register_slide({
|
|
||||||
name = "blood",
|
|
||||||
should_show = function(player)
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
show = function(player)
|
|
||||||
local fs = "size[8,1.75]label[0,0;Would you like to see blood splatters when using a gun?]"
|
|
||||||
fs = fs .. " button_exit[0.5,0.5;3.5,2;yes;" ..
|
|
||||||
minetest.formspec_escape("Yes: Enable blood") .. "]"
|
|
||||||
fs = fs .. " button_exit[4,0.5;3.5,2;no;" ..
|
|
||||||
minetest.formspec_escape("No: Disable blood") .. "]"
|
|
||||||
minetest.show_formspec(player:get_player_name(), "join_fs:blood", fs)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, form, fields)
|
|
||||||
if form == "join_fs:blood" then
|
|
||||||
local name = player:get_player_name()
|
|
||||||
|
|
||||||
if fields.yes then
|
|
||||||
shooter:enable_blood(name)
|
|
||||||
minetest.chat_send_player(name, "You have choosen to see blood!")
|
|
||||||
elseif fields.no then
|
|
||||||
shooter:disable_blood(name)
|
|
||||||
minetest.chat_send_player(name, "You will no longer see blood!")
|
|
||||||
else
|
|
||||||
minetest.chat_send_player(name, "You need to choose an option!")
|
|
||||||
join_fs.show_next_slide(player)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
join_fs.confirm(name, "blood")
|
|
||||||
join_fs.show_next_slide(player)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
|
@ -23,5 +23,3 @@ end
|
||||||
if SHOOTER_ENABLE_TURRETS == true then
|
if SHOOTER_ENABLE_TURRETS == true then
|
||||||
dofile(modpath.."/turret.lua")
|
dofile(modpath.."/turret.lua")
|
||||||
end
|
end
|
||||||
|
|
||||||
shooter:load_player_config()
|
|
||||||
|
|
|
@ -4,8 +4,7 @@ shooter = {
|
||||||
rounds = {},
|
rounds = {},
|
||||||
shots = {},
|
shots = {},
|
||||||
update_time = 0,
|
update_time = 0,
|
||||||
reload_time = 0,
|
reload_time = 0
|
||||||
players_enabled_blood = {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SHOOTER_ADMIN_WEAPONS = false
|
SHOOTER_ADMIN_WEAPONS = false
|
||||||
|
@ -71,43 +70,6 @@ local function get_particle_pos(p, v, d)
|
||||||
return vector.add(p, vector.multiply(v, {x=d, y=d, z=d}))
|
return vector.add(p, vector.multiply(v, {x=d, y=d, z=d}))
|
||||||
end
|
end
|
||||||
|
|
||||||
function shooter:load_player_config()
|
|
||||||
local filepath = minetest.get_worldpath() .. "/shooter_player_config.txt"
|
|
||||||
local file = io.open(filepath, "r")
|
|
||||||
if file then
|
|
||||||
local table = minetest.deserialize(file:read("*all"))
|
|
||||||
if type(table) == "table" then
|
|
||||||
self.players_enabled_blood = table.eblood
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function shooter:save_player_config()
|
|
||||||
local filepath = minetest.get_worldpath() .. "/shooter_player_config.txt"
|
|
||||||
local file = io.open(filepath, "w")
|
|
||||||
if file then
|
|
||||||
file:write(minetest.serialize({
|
|
||||||
eblood = self.players_enabled_blood
|
|
||||||
}))
|
|
||||||
file:close()
|
|
||||||
else
|
|
||||||
minetest.log("warning", "Failed to save shooter player config!")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_shutdown(function()
|
|
||||||
shooter:save_player_config()
|
|
||||||
end)
|
|
||||||
|
|
||||||
function shooter:enable_blood(name)
|
|
||||||
self.players_enabled_blood[name] = true
|
|
||||||
end
|
|
||||||
|
|
||||||
function shooter:disable_blood(name)
|
|
||||||
self.players_enabled_blood[name] = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
function shooter:spawn_particles(pos, texture)
|
function shooter:spawn_particles(pos, texture)
|
||||||
if not SHOOTER_ENABLE_PARTICLE_FX then
|
if not SHOOTER_ENABLE_PARTICLE_FX then
|
||||||
return
|
return
|
||||||
|
@ -117,47 +79,22 @@ function shooter:spawn_particles(pos, texture)
|
||||||
texture = SHOOTER_EXPLOSION_TEXTURE
|
texture = SHOOTER_EXPLOSION_TEXTURE
|
||||||
end
|
end
|
||||||
local spread = {x=0.1, y=0.1, z=0.1}
|
local spread = {x=0.1, y=0.1, z=0.1}
|
||||||
if texture == SHOOTER_EXPLOSION_TEXTURE then
|
minetest.add_particlespawner({
|
||||||
for _, player in pairs(minetest.get_connected_players()) do
|
amount = 15,
|
||||||
local name = player:get_player_name()
|
time = 0.3,
|
||||||
if shooter.players_enabled_blood[name] then
|
minpos = vector.subtract(pos, spread),
|
||||||
minetest.add_particlespawner({
|
maxpos = vector.add(pos, spread),
|
||||||
amount = 15,
|
minvel = {x=-1, y=1, z=-1},
|
||||||
time = 0.3,
|
maxvel = {x=1, y=2, z=1},
|
||||||
minpos = vector.subtract(pos, spread),
|
minacc = {x=-2, y=-2, z=-2},
|
||||||
maxpos = vector.add(pos, spread),
|
maxacc = {x=2, y=-2, z=2},
|
||||||
minvel = {x=-1, y=1, z=-1},
|
minexptime = 0.1,
|
||||||
maxvel = {x=1, y=2, z=1},
|
maxexptime = 0.75,
|
||||||
minacc = {x=-2, y=-2, z=-2},
|
minsize = 1,
|
||||||
maxacc = {x=2, y=-2, z=2},
|
maxsize = 2,
|
||||||
minexptime = 0.1,
|
collisiondetection = false,
|
||||||
maxexptime = 0.75,
|
texture = texture
|
||||||
minsize = 1,
|
})
|
||||||
maxsize = 2,
|
|
||||||
collisiondetection = false,
|
|
||||||
texture = texture,
|
|
||||||
playername = name
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
minetest.add_particlespawner({
|
|
||||||
amount = 15,
|
|
||||||
time = 0.3,
|
|
||||||
minpos = vector.subtract(pos, spread),
|
|
||||||
maxpos = vector.add(pos, spread),
|
|
||||||
minvel = {x=-1, y=1, z=-1},
|
|
||||||
maxvel = {x=1, y=2, z=1},
|
|
||||||
minacc = {x=-2, y=-2, z=-2},
|
|
||||||
maxacc = {x=2, y=-2, z=2},
|
|
||||||
minexptime = 0.1,
|
|
||||||
maxexptime = 0.75,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 2,
|
|
||||||
collisiondetection = false,
|
|
||||||
texture = texture
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function shooter:play_node_sound(node, pos)
|
function shooter:play_node_sound(node, pos)
|
||||||
|
|
Before Width: | Height: | Size: 659 B After Width: | Height: | Size: 621 B |