Initial commit

This commit is contained in:
Wuzzy 2015-06-16 18:40:54 +02:00
commit 70ac89e095
4 changed files with 101 additions and 0 deletions

47
README.md Normal file
View File

@ -0,0 +1,47 @@
# Central Message
## Overview
* Description: Simple API to display short messages at the center of the screen
* Author: Wuzzy
* License of everything: WTFPL
* Shortname: `central_message`
* Version: 0.1.0 (using Semantic Versioning 2.0.0, see [http://semver.org/])
## Longer description
This Minetest mod allows other mods to display a short message at the center of the screen.
Each message is displayed for 5 seconds, then it is removed.
When multiple messages are pushed quickly in succession, the messages will be “stacked”
on the screen.
This mod can be useful to inform about all sorts of events and is an alternative to use the chat log
to display special events.
Some usage examples:
* Messages about game events, like victory, defeat, next round starting, etc.
* Error message directed to a single player
* Informational messages
* Administational messages to warn players about a coming server shutdown
## API
### `cmsg.push_message_player(player, message, color)`
Display a new message to one player only.
#### Parameters
* `player`: An `ObjectRef` to the player to which to send the message
* `message`: A `string` containing the message to be displayed to the player
* `color`: Optional. A `ColorString` for the color of the text. Default: `0xFFFFFF` (white)
#### Return value
Always `nil`.
### `cmsg.push_message_all(message, color)`
Display a new message to all connected players.
#### Parameters
* `player`: An `ObjectRef` to the player to which to send the message
* `message`: A `string` containing the message to be displayed to all players
* `color`: Optional. A `ColorString` for the color of the text. Default: `0xFFFFFF` (white)
#### Return value
Always `nil`.

0
depends.txt Normal file
View File

1
description.txt Normal file
View File

@ -0,0 +1 @@
Simple API to show messages to the center of the screen to players.

53
init.lua Normal file
View File

@ -0,0 +1,53 @@
cmsg = {}
cmsg.hudids = {}
cmsg.active_messages = {}
cmsg.default_color = 0xFFFFFF
cmsg.push_message_player = function(player, text, color)
local pname = player:get_player_name()
if color == nil then color = cmsg.default_color end
if cmsg.hudids[pname] == nil then
cmsg.hudids[pname] = {}
cmsg.active_messages[pname] = 0
else
-- move older HUD IDs up
for hudid,tbl in pairs(cmsg.hudids[pname]) do
minetest.after(0, function()
tbl.stackpos = tbl.stackpos + 1
player:hud_change(hudid, "offset", {x=0,y=-128-(18*tbl.stackpos)})
end)
end
end
local hudid = player:hud_add({
hud_elem_type = "text",
text = text,
number = color,
position = {x=0.5, y=0.5},
offset = {x=0,y=-128},
direction = 0,
alignment = {x=0,y=0},
scale = {x=300,y=18},
})
cmsg.hudids[pname][hudid] = {stackpos=0}
cmsg.active_messages[pname] = cmsg.active_messages[pname] + 1
minetest.after(5, function(param)
local pname = param.player:get_player_name()
param.player:hud_remove(param.hudid)
cmsg.hudids[pname][param.hudid] = nil
cmsg.active_messages[pname] = cmsg.active_messages[pname] - 1
end, {player=player, hudid = hudid})
end
cmsg.push_message_all = function(text, color)
local players = minetest.get_connected_players()
for i=1,#players do
cmsg.push_message_player(players[i], text, color)
end
end
minetest.register_on_leaveplayer(function(player)
cmsg.hudids[player:get_player_name()] = nil
end)