diff --git a/mods/chatplus/init.lua b/mods/chatplus/init.lua index d4202a6..c841b31 100644 --- a/mods/chatplus/init.lua +++ b/mods/chatplus/init.lua @@ -94,14 +94,18 @@ function chatplus.clean_players() (not value.inbox or #value.inbox==0) and (not value.ignore or #value.ignore==0) ) then - minetest.log("Deleting blank player "..key) value[key] = nil end end chatplus.save() - minetest.log("[Chatplus] Clean complete") 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) local function check(name,value) if not chatplus.players[name][value] then @@ -364,7 +368,7 @@ minetest.register_globalstep(function(dtime) hud_elem_type = "text", name = "MailText", position = {x=0.55, y=0.52}, - text=#value.inbox, + text=#value.inbox .. " /inbox", scale = {x=1,y=1}, alignment = {x=0.5, y=0.5}, }) diff --git a/mods/chatplus/tmp.lua b/mods/chatplus/tmp.lua new file mode 100644 index 0000000..55a2015 --- /dev/null +++ b/mods/chatplus/tmp.lua @@ -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 +]] diff --git a/mods/hudbars/API.md b/mods/hudbars/API.md deleted file mode 100644 index d18f05b..0000000 --- a/mods/hudbars/API.md +++ /dev/null @@ -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. diff --git a/mods/hudbars/README.txt b/mods/hudbars/README.txt deleted file mode 100644 index 2fe7127..0000000 --- a/mods/hudbars/README.txt +++ /dev/null @@ -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. - - -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. diff --git a/mods/hudbars/changelog.txt b/mods/hudbars/changelog.txt deleted file mode 100644 index 3c4f0bc..0000000 --- a/mods/hudbars/changelog.txt +++ /dev/null @@ -1,66 +0,0 @@ -Note: This software uses semantic versioning, -as of version 2.0.0 of the standard . - -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 diff --git a/mods/hudbars/depends.txt b/mods/hudbars/depends.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mods/hudbars/init.lua b/mods/hudbars/init.lua deleted file mode 100644 index 81e61b4..0000000 --- a/mods/hudbars/init.lua +++ /dev/null @@ -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) diff --git a/mods/hudbars/textures/hudbars_bar_background.png b/mods/hudbars/textures/hudbars_bar_background.png deleted file mode 100644 index cbc6c3f..0000000 Binary files a/mods/hudbars/textures/hudbars_bar_background.png and /dev/null differ diff --git a/mods/hudbars/textures/hudbars_bar_breath.png b/mods/hudbars/textures/hudbars_bar_breath.png deleted file mode 100644 index 7d19a57..0000000 Binary files a/mods/hudbars/textures/hudbars_bar_breath.png and /dev/null differ diff --git a/mods/hudbars/textures/hudbars_bar_health.png b/mods/hudbars/textures/hudbars_bar_health.png deleted file mode 100644 index 6530916..0000000 Binary files a/mods/hudbars/textures/hudbars_bar_health.png and /dev/null differ diff --git a/mods/hudbars/textures/hudbars_bgicon_health.png b/mods/hudbars/textures/hudbars_bgicon_health.png deleted file mode 100644 index e2be276..0000000 Binary files a/mods/hudbars/textures/hudbars_bgicon_health.png and /dev/null differ diff --git a/mods/hudbars/textures/hudbars_icon_breath.png b/mods/hudbars/textures/hudbars_icon_breath.png deleted file mode 100644 index f48aa35..0000000 Binary files a/mods/hudbars/textures/hudbars_icon_breath.png and /dev/null differ diff --git a/mods/hudbars/textures/hudbars_icon_health.png b/mods/hudbars/textures/hudbars_icon_health.png deleted file mode 100644 index 941e973..0000000 Binary files a/mods/hudbars/textures/hudbars_icon_health.png and /dev/null differ diff --git a/mods/join_fs/api.lua b/mods/join_fs/api.lua index 6f9c555..f1d48b0 100644 --- a/mods/join_fs/api.lua +++ b/mods/join_fs/api.lua @@ -50,7 +50,7 @@ end function join_fs.show_next_slide(player) for _, def in pairs(join_fs.slides) do 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) break end diff --git a/mods/join_fs/init.lua b/mods/join_fs/init.lua index b72765d..689e3d1 100644 --- a/mods/join_fs/init.lua +++ b/mods/join_fs/init.lua @@ -4,7 +4,7 @@ dofile(minetest.get_modpath("join_fs") .. "/api.lua") join_fs.register_slide({ 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}) end, show = function(player) @@ -62,39 +62,3 @@ minetest.register_on_player_receive_fields(function(player, form, fields) join_fs.show_next_slide(player) 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) diff --git a/mods/shooter/init.lua b/mods/shooter/init.lua index 8e50305..7891dbb 100644 --- a/mods/shooter/init.lua +++ b/mods/shooter/init.lua @@ -23,5 +23,3 @@ end if SHOOTER_ENABLE_TURRETS == true then dofile(modpath.."/turret.lua") end - -shooter:load_player_config() diff --git a/mods/shooter/shooter.lua b/mods/shooter/shooter.lua index 0fd31fb..dc1df21 100644 --- a/mods/shooter/shooter.lua +++ b/mods/shooter/shooter.lua @@ -4,8 +4,7 @@ shooter = { rounds = {}, shots = {}, update_time = 0, - reload_time = 0, - players_enabled_blood = {} + reload_time = 0 } 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})) 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) if not SHOOTER_ENABLE_PARTICLE_FX then return @@ -117,47 +79,22 @@ function shooter:spawn_particles(pos, texture) texture = SHOOTER_EXPLOSION_TEXTURE end local spread = {x=0.1, y=0.1, z=0.1} - if texture == SHOOTER_EXPLOSION_TEXTURE then - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - if shooter.players_enabled_blood[name] then - 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, - 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 + 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 function shooter:play_node_sound(node, pos) diff --git a/mods/shooter/textures/shooter_hit.png b/mods/shooter/textures/shooter_hit.png index 46d95b2..9d04179 100644 Binary files a/mods/shooter/textures/shooter_hit.png and b/mods/shooter/textures/shooter_hit.png differ