mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-06-16 05:38:06 +02:00
added showing of npc logfile via trade list
This commit is contained in:
parent
96a798ba5f
commit
db5a67b333
107
fs_show_log.lua
107
fs_show_log.lua
@ -68,3 +68,110 @@ yl_speak_up.log_with_position = function(pname, n_id, text, log_level)
|
||||
yl_speak_up.log_change(pname, n_id,
|
||||
"NPC at position "..pos_str.." "..tostring(text), log_level)
|
||||
end
|
||||
|
||||
|
||||
yl_speak_up.input_show_log = function(player, formname, fields)
|
||||
local pname = player:get_player_name()
|
||||
local n_id = yl_speak_up.speak_to[pname].n_id
|
||||
if(not(yl_speak_up.may_edit_npc(player, n_id))) then
|
||||
return
|
||||
end
|
||||
if(fields.back) then
|
||||
-- back to the normal trade list
|
||||
yl_speak_up.show_fs(player, "trade_list")
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- TODO: make use of log_type and toggle between trade entries and full log?
|
||||
yl_speak_up.get_fs_show_log = function(player, log_type)
|
||||
local pname = player:get_player_name()
|
||||
local n_id = yl_speak_up.speak_to[pname].n_id
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
if(not(yl_speak_up.may_edit_npc(player, n_id))) then
|
||||
return "size[5,1]label[0,0;Error: You do not own this NPC.]"
|
||||
end
|
||||
|
||||
local file, err = io.open(yl_speak_up.worldpath..yl_speak_up.log_path..DIR_DELIM..
|
||||
"log_"..tostring(n_id)..".txt", "r")
|
||||
local formspec = {'size[18,12]'..
|
||||
'button[0.5,11.1;17,0.8;back;Back]'..
|
||||
'label[4.5,0.5;Log of ',
|
||||
minetest.formspec_escape(tostring(dialog.n_npc)..
|
||||
" [ID: "..tostring(n_id).."]"),
|
||||
']',
|
||||
'tablecolumns[' ..
|
||||
'color;text,align=left;'.. -- the date
|
||||
'color;text,align=center;'.. -- name of the player
|
||||
'color;text,align=right;'.. -- how many times the entry was repeated
|
||||
'color;text,align=left]'.. -- actual log file entry
|
||||
'table[0.1,1.0;17.8,9.8;show_log_of_npc;'..
|
||||
'#FFFFFF,Date,#FFFFFF,Player,#FFFFFF,,#FFFFFF,Log entry,',
|
||||
}
|
||||
-- without the time information, some entries (in particular when someone buys from a shpo)
|
||||
-- may be the same. Those entries are combined into one when viewing the log.
|
||||
local text = {}
|
||||
local last_line = ""
|
||||
local last_day = ""
|
||||
local last_who = ""
|
||||
local same_lines = 0
|
||||
local count = 0
|
||||
if(err) then
|
||||
-- we don't want to get too much into detail here for players
|
||||
return "size[5,1]label[0,0;Error reading NPC logfile.]"
|
||||
else
|
||||
for line in file:lines() do
|
||||
local parts = string.split(line, " ")
|
||||
-- suppress the time information as that would be too detailled;
|
||||
-- it is still logged so that admins can check
|
||||
local this_line = table.concat(parts, " ", 4)
|
||||
if(this_line == last_line and parts[1] == last_day
|
||||
and #parts > 3 and parts[3] == last_who) then
|
||||
-- just count the line
|
||||
same_lines = same_lines + 1
|
||||
else
|
||||
table.insert(text, '#AAAAAA')
|
||||
table.insert(text, minetest.formspec_escape(last_day))
|
||||
table.insert(text, '#FFFF00')
|
||||
table.insert(text, minetest.formspec_escape(last_who))
|
||||
table.insert(text, '#AAAAAA')
|
||||
if(same_lines > 1) then
|
||||
table.insert(text, tostring(same_lines).."x")
|
||||
else
|
||||
table.insert(text, "")
|
||||
end
|
||||
table.insert(text, '#FFFFFF')
|
||||
table.insert(text, minetest.formspec_escape(last_line))
|
||||
-- store information about the next line
|
||||
same_lines = 0
|
||||
last_line = this_line
|
||||
last_day = parts[1]
|
||||
last_who = parts[3]
|
||||
end
|
||||
count = count + 1
|
||||
end
|
||||
-- cover the last line
|
||||
table.insert(text, '#AAAAAA')
|
||||
table.insert(text, minetest.formspec_escape(last_day))
|
||||
table.insert(text, '#FFFF00')
|
||||
table.insert(text, minetest.formspec_escape(last_who))
|
||||
table.insert(text, '#AAAAAA')
|
||||
if(same_lines > 1) then
|
||||
table.insert(text, tostring(same_lines).."x")
|
||||
else
|
||||
table.insert(text, "")
|
||||
end
|
||||
table.insert(text, '#FFFFFF')
|
||||
table.insert(text, minetest.formspec_escape(last_line))
|
||||
file:close()
|
||||
|
||||
table.insert(formspec, table.concat(text, ','))
|
||||
end
|
||||
|
||||
-- selected row
|
||||
table.insert(formspec, ";1]")
|
||||
-- TODO: show lines read? (count)
|
||||
return table.concat(formspec, '')
|
||||
end
|
||||
|
||||
|
@ -25,6 +25,12 @@ yl_speak_up.input_trade_list = function(player, formname, fields)
|
||||
return
|
||||
end
|
||||
|
||||
if(fields.show_log) then
|
||||
-- show a log
|
||||
yl_speak_up.show_fs(player, "show_log")
|
||||
return
|
||||
end
|
||||
|
||||
-- toggle between view of dialog option trades and trade list trades
|
||||
if(fields.show_dialog_option_trades
|
||||
or fields.show_trade_list) then
|
||||
@ -211,11 +217,19 @@ yl_speak_up.get_fs_trade_list = function(player, show_dialog_option_trades)
|
||||
text, text,
|
||||
true, nil, nil, pname_for_old_fs)
|
||||
-- show a list of how much the NPC will buy and sell
|
||||
text = "Limits: Do not buy or sell more than what I will tell you."
|
||||
text = minetest.formspec_escape(
|
||||
"[Limits] Do not buy or sell more than what I will tell you.")
|
||||
h = yl_speak_up.add_edit_button_fs_talkdialog(formspec, h,
|
||||
"trade_limit",
|
||||
text, text,
|
||||
true, nil, nil, pname_for_old_fs)
|
||||
-- button "show log" for those who can edit the NPC (entering edit mode is not required)
|
||||
text = minetest.formspec_escape(
|
||||
"[Log] Show me who gave you which orders and who bought what.")
|
||||
h = yl_speak_up.add_edit_button_fs_talkdialog(formspec, h,
|
||||
"show_log",
|
||||
text, text,
|
||||
true, nil, nil, pname_for_old_fs)
|
||||
end
|
||||
|
||||
local text = "That was all. Let's continue talking."
|
||||
|
10
show_fs.lua
10
show_fs.lua
@ -56,6 +56,9 @@ minetest.register_on_player_receive_fields( function(player, formname, fields)
|
||||
elseif formname == "yl_speak_up:trade_limit" then
|
||||
yl_speak_up.input_trade_limit(player, formname, fields)
|
||||
return true
|
||||
elseif formname == "yl_speak_up:show_log" then
|
||||
yl_speak_up.input_show_log(player, formname, fields)
|
||||
return true
|
||||
elseif formname == "yl_speak_up:edit_trade_limit" then
|
||||
yl_speak_up.input_edit_trade_limit(player, formname, fields)
|
||||
return true
|
||||
@ -323,6 +326,13 @@ yl_speak_up.show_fs = function(player, fs_name, param)
|
||||
yl_speak_up.show_fs_ver(pname, "yl_speak_up:trade_limit",
|
||||
yl_speak_up.get_fs_trade_limit(player, param.selected))
|
||||
|
||||
elseif(fs_name == "show_log") then
|
||||
if(not(param)) then
|
||||
param = {}
|
||||
end
|
||||
yl_speak_up.show_fs_ver(pname, "yl_speak_up:show_log",
|
||||
yl_speak_up.get_fs_show_log(player, param.log_type))
|
||||
|
||||
elseif(fs_name == "edit_trade_limit") then
|
||||
if(not(param)) then
|
||||
param = {}
|
||||
|
Loading…
Reference in New Issue
Block a user