mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-28 12:05:21 +09:00
Dev modules, Popup additions (#82)
* Chat/Mention popup * Damage Popup * fixed config dep
This commit is contained in:
56
modules/ChatPopup/control.lua
Normal file
56
modules/ChatPopup/control.lua
Normal file
@@ -0,0 +1,56 @@
|
||||
--- Creates flying text above player when they send a message.
|
||||
-- @module ChatPopup@4.0.0
|
||||
-- @author badgamernl
|
||||
-- @license https://github.com/explosivegaming/scenario/blob/master/LICENSE
|
||||
-- @alais ChatPopup
|
||||
|
||||
-- Module Require
|
||||
local Game = require('FactorioStdLib.Game@^0.8.0')
|
||||
local Color = require('FactorioStdLib.Color@^0.8.0')
|
||||
|
||||
local ChatPopup = {}
|
||||
|
||||
function ChatPopup.sendFlyingText(player, text)
|
||||
local _player = Game.get_player(player)
|
||||
if not _player then return end
|
||||
-- Split long text in chunks
|
||||
local chunkSize = 40
|
||||
local chunks = {}
|
||||
for i=1, #text, chunkSize do
|
||||
chunks[#chunks+1] = text:sub(i,i+chunkSize - 1)
|
||||
end
|
||||
-- Itterate over text chunks and create them as floating text centered above the player
|
||||
-- Disabled false centering because of not being able to disable scaling: (1 / 7.9 * #value)
|
||||
for i,value in ipairs(chunks) do
|
||||
_player.surface.create_entity{
|
||||
name="flying-text",
|
||||
color=_player.chat_color,
|
||||
text=value,
|
||||
position={_player.position.x, _player.position.y-(2 - (1 * i))}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
Event.register(defines.events.on_console_chat, function(event)
|
||||
local player = game.players[event.player_index]
|
||||
if not player then return end
|
||||
if not event.message then return end
|
||||
|
||||
-- Send message player send to player itself
|
||||
local message = player.name .. ': ' .. event.message
|
||||
ChatPopup.sendFlyingText(player, message)
|
||||
|
||||
-- parse message for players and if it includes player, send him a notification that he has been mentioned in the chat
|
||||
local player_message = event.message:lower():gsub("%s+", "")
|
||||
|
||||
for i,_player in ipairs(game.connected_players) do
|
||||
if _player.index ~= player.index then
|
||||
if player_message:match(_player.name:lower()) then
|
||||
ChatPopup.sendFlyingText(_player, 'You\'ve been mentioned by: ' ..player.name .. ' in chat!')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
return ChatPopup
|
||||
Reference in New Issue
Block a user