-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmenu.lua
More file actions
285 lines (227 loc) · 8.21 KB
/
menu.lua
File metadata and controls
285 lines (227 loc) · 8.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
--[[
Mod MultiChat para Minetest
Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
Recebeste uma cópia da GNU Lesser General
Public License junto com esse software,
se não, veja em <http://www.gnu.org/licenses/>.
Menu Multichat
]]
local S = multichat.S
-- Remover grupo de um jogador offline
local remover_grupo = function(name)
multichat.salas[name] = nil
end
-- Comando de acesso ao menu
multichat.acessar_menu = function(name)
if not name then return end
local player = minetest.get_player_by_name(name)
local st = player:get_attribute("multichat_status")
local status = S("Atualmente").."\n"
-- Caso esteja no Publico
if st == nil or st == "pub" then
status = status .. minetest.colorize("#00FF00", S("em Publico"))
-- Caso esteja Desativado
elseif st == "off" then
status = status .. minetest.colorize("#FF0000", S("Desativado"))
-- Caso esteja no Grupo Privado
elseif st == "grupo" then
status = status .. minetest.colorize("#3366FF", S("em Privado"))
-- Caso esteja no Grupo da Guilda
elseif st == "guilda" then
status = status .. minetest.colorize("#3366FF", S("em Grupo"))
-- Caso nenhuma situação prevista
else
status = status .. S("Erro")
end
-- Avisos sonoros
local st_som = player:get_attribute("multichat_som") or "true"
local st_chamada = player:get_attribute("multichat_chamada") or "true"
local formspec = ""
if multichat.guild == true then
formspec = formspec .. "size[4,6]"
else
formspec = formspec .. "size[4,5]"
end
formspec = formspec
..default.gui_bg
..default.gui_bg_img
.."label[0,0;"..S("Meu Bate-Papo").."\n"..status.."]"
.."image[3,0;1,1;multichat_botao.png]"
.."checkbox[0,1;som;"..S("Som")..";"..st_som.."]"
.."checkbox[0,1.5;chamada;"..S("Chamada")..";"..st_chamada.."]"
.."button_exit[3,1.2;1,1;sair;"..S("Sair").."]"
.."button[0,2.2;4,1;desativar;"..S("Desativar").."]"
.."button[0,3.2;4,1;publico;"..S("Publico").."]"
.."button[0,4.2;3.3,1;privado;"..S("Privado").."]"
.."image_button[3.15,4.3;0.825,0.825;default_book_written.png;grupo;]"
-- Botão de grupo
if multichat.guild == true then
formspec = formspec .. "button_exit[0,5.2;4,1;guild;"..S("Grupo").."]"
end
minetest.show_formspec(name, "multichat:menu", formspec)
end
-- Acessar menu do grupo
local acessar_menu_grupo = function(name)
-- Prepara e armazena tabelas exibidas
local tb_grupo = multichat.grupos[name] or {}
multichat.online[name].tb_grupo = {}
local st_grupo = ""
for np,v in pairs(tb_grupo) do
if st_grupo ~= "" then st_grupo = st_grupo .. "," end
st_grupo = st_grupo .. np
table.insert(multichat.online[name].tb_grupo, np)
end
local tb_online = minetest.get_connected_players()
multichat.online[name].tb_online = {}
local st_online = ""
local i = 1
while i <= table.maxn(tb_online) do
local np = tb_online[i]:get_player_name()
-- Remove o proprio nome da lista
if np == name then
table.remove(tb_online, i)
-- Remove nomes que estao no grupo
elseif tb_grupo[np] then
table.remove(tb_online, i)
-- Insere na lista
else
if st_online ~= "" then st_online = st_online .. "," end
st_online = st_online .. np
table.insert(multichat.online[name].tb_online, np)
i = i + 1
end
end
minetest.show_formspec(name, "multichat:menu_grupo", "size[8,6]"
..default.gui_bg
..default.gui_bg_img
.."label[0,0;"..S("Meu Bate-Papo Privado").."]"
.."button[6.1,-0.1;2,1;voltar;"..S("Voltar").."]"
.."label[0,1.1;"..S("Ignorados").."]"
.."textlist[0,1.6;3,4.5;online;"..st_online.."]"
.."image[3.5,1.7;1,1;gui_furnace_arrow_bg.png^[transformR270]"
.."button[3.1,2.5;1.9,1;adicionar;"..S("Adicionar").."]"
.."button[3.1,4.3;1.9,1;remover;"..S("Remover").."]"
.."image[3.5,5;1,1;gui_furnace_arrow_bg.png^[transformR90]"
.."label[4.85,1.1;"..S("Conversando").."]"
.."textlist[4.85,1.6;3,4.5;grupo;"..st_grupo.."]"
)
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "multichat:menu" then
local name = player:get_player_name()
-- Botao de desativar bate-papo
if fields.desativar then
player:set_attribute("multichat_status", "off")
minetest.chat_send_player(name, S("Bate-papo desativado"))
multichat.acessar_menu(name)
elseif fields.publico then
player:set_attribute("multichat_status", "pub")
minetest.chat_send_player(name, S("Foste para o bate-papo publico"))
multichat.acessar_menu(name)
elseif fields.privado then
player:set_attribute("multichat_status", "grupo")
minetest.chat_send_player(player:get_player_name(), S("Foste para o bate-papo privado"))
multichat.acessar_menu(name)
elseif fields.grupo then
acessar_menu_grupo(name)
-- Guilda
elseif fields.guild then
-- Manipulus
if multichat.mod_guild == "manipulus" then
local grupo = manipulus.get_player_grupo(name)
if grupo == nil or manipulus.existe_grupo(grupo) == false then
minetest.chat_send_player(name, S("Precisa entrar em um grupo"))
else
player:set_attribute("multichat_status", "guilda")
minetest.chat_send_player(name, S("Foste para o bate-papo do grupo @1", "'"..grupo.."'"))
end
end
-- Caixas de seleção (avisos sonoros)
elseif fields.som then
player:set_attribute("multichat_som", fields.som)
elseif fields.chamada then
player:set_attribute("multichat_chamada", fields.chamada)
end
elseif formname == "multichat:menu_grupo" then
-- Limpa variaveis quando sair (evitar o uso delas no futuro)
if fields.quit then
multichat.online[player:get_player_name()].sl_tb_online = nil
multichat.online[player:get_player_name()].sl_tb_grupo = nil
-- Verifica seleções
elseif fields.online then
multichat.online[player:get_player_name()].sl_tb_online = string.split(fields.online, ":")[2]
elseif fields.grupo then
multichat.online[player:get_player_name()].sl_tb_grupo = string.split(fields.grupo, ":")[2]
-- Voltar ao menu principal
elseif fields.voltar then
multichat.acessar_menu(player:get_player_name())
return
-- Adicionar jogador para conversar
elseif fields.adicionar then
local name = player:get_player_name()
-- Verifica se tem algum jogador na tabela
if table.maxn(multichat.online[name].tb_online) == 0 then return end
-- Verifica se selecionou umjogador
if not tonumber(multichat.online[name].sl_tb_online) then return end
-- Caso o grupo esteja vazio cria
if multichat.grupos[name] == nil then multichat.grupos[name] = {} end
-- Adiciona jogador
local sl = tonumber(multichat.online[name].sl_tb_online)
local grupo = multichat.online[name].tb_online[sl]
multichat.grupos[name][grupo] = true
-- Atualiza menu do grupo
acessar_menu_grupo(name)
return
-- Remover jogador
elseif fields.remover then
local name = player:get_player_name()
-- Verifica se tem algum jogador na tabela
if table.maxn(multichat.online[name].tb_grupo) == 0 then return end
-- Verifica se selecionou umjogador
if not tonumber(multichat.online[name].sl_tb_grupo) then return end
-- Remove jogador do grupo
local sl = tonumber(multichat.online[name].sl_tb_grupo)
if multichat.grupos[name] ~= nil
and multichat.online[name].tb_grupo ~= nil
and multichat.online[name].tb_grupo[sl] ~= nil
then
multichat.grupos[name][multichat.online[name].tb_grupo[sl]] = nil
end
-- Atualiza menu do grupo
acessar_menu_grupo(name)
return
end
end
end)
-- Registrar em 'sfinv'
if mymenu then
-- Registrar metodo de tradução instantanea
mymenu.register_tr(SS)
-- Registrar botao
mymenu.register_button("multichat:abrir_menu", S("Bate-Papo"))
-- Receber botao do inventario
minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields["multichat:abrir_menu"] then
multichat.acessar_menu(player:get_player_name())
end
end)
end
if minetest.global_exists("sfinv_menu") then
sfinv_menu.register_button("multichat:menu", {
title = S("Bate-Papo"),
icon = "multichat_botao.png",
func = function(player)
multichat.acessar_menu(player:get_player_name())
end,
})
end
if minetest.global_exists("unified_inventory") then
unified_inventory.register_button("multichat:menu", {
type = "image",
image = "multichat_botao.png",
tooltip = S("Bate-Papo"),
action = function(player)
multichat.acessar_menu(player:get_player_name())
end,
})
end