minetest-mods/animals/mobf_settings/settings_v2.lua

1061 lines
34 KiB
Lua

-------------------------------------------------------------------------------
-- Mob Framework Settings Mod by Sapier
--
-- You may copy, use, modify or do nearly anything except removing this
-- copyright notice.
-- And of course you are NOT allowed to pretend you have written it.
--
--! @file init.lua
--! @brief settings gui for mobf
--! @copyright Sapier
--! @author Sapier
--! @date 2013-05-20
--
-- Contact sapier a t gmx net
-------------------------------------------------------------------------------
minetest.log("action","MOD: mobf_settings mod loading ... ")
mobf_settings = {}
mobf_settings.tabs = {}
mobf_settings.version = "0.9.1"
mobf_settings.formname = "mobf_settings"
local COLOR_RED = "#FF0000"
local COLOR_GREEN = "#00FF00"
------------------------------------------------------------------------------
-- name: contains
--
--! @brief check if element is in table
--! @ingroup mobf_settings
--
--! @param cur_table table to check for element
--! @param element element to find in table
--!
--! @return true/false
-------------------------------------------------------------------------------
function contains(cur_table,element)
if cur_table == nil then
--print("looking in empty table")
return false
end
--print("looking for " .. dump(element) .. " in " .. dump(cur_table))
for i,v in ipairs(cur_table) do
if v == element then
--print("found: " .. element .. " in table")
return true
end
end
--print("didn't find " .. element)
return false
end
------------------------------------------------------------------------------
-- name: handle_event
-- @function [parent=#mobf_settings] handle_event
--
--! @brief do actions according to event
--! @ingroup mobf_settings
--
--! @param player issuing the formspec
--! @param formname form to be shown
--! @param fields event information
--!
--! @return true/false handled or not
-------------------------------------------------------------------------------
function mobf_settings.handle_event(player,formname,fields)
--print("event handler: form: " .. formname)
--print("fields: " .. dump(fields))
if formname ~= mobf_settings.formname then
return false
end
local sender_data = mobf_settings.get_sender_data(fields)
if sender_data ~= nil and sender_data.name == "maintab" then
sender_data.tab = tonumber(sender_data.value)
end
if sender_data ~= nil then
sender_data.player = player
sender_data.formname = formname
sender_data.fields = fields
local playername = player:get_player_name()
local privs = minetest.get_player_privs(playername)
--check admin privs
local privcheck = minetest.check_player_privs(playername, {mobfw_admin=true})
sender_data.is_admin =
privcheck or (player:get_player_name() == "singleplayer")
local realtabidx = sender_data.tab
if not sender_data.is_admin then
for i=1,#mobf_settings.tabs,1 do
if mobf_settings.tabs[i].admin then
realtabidx = realtabidx+1
end
if i == realtabidx then
break
end
end
end
if realtabidx <= #mobf_settings.tabs then
--make sure no admin tab is shown to non admin users
if mobf_settings.tabs[realtabidx].admin then
if not sender_data.is_admin then
local fixed = false
for i=1,#mobf_settings.tabs,1 do
if not mobf_settings.tabs[i].admin then
sender_data.tab = i
sender_data.name = "ukn"
sender_data.fields = {}
sender_data.type = "ukn"
fixed = true
end
end
if not fixed then
return
end
end
end
--print("showing tab: #" .. sender_data.tab .. " " .. dump(mobf_settings.tabs[sender_data.tab]))
mobf_settings.tabs[realtabidx].handler(sender_data)
end
end
return true
end
------------------------------------------------------------------------------
-- name: get_sender_data
-- @function [parent=#mobf_settings] get_sender_data
--
--! @brief find caller of formspec
--! @ingroup mobf_settings
--
--! @param fields to look for sender
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.get_sender_data(fields)
for key,value in pairs(fields) do
local parts = key:split("_")
if #parts >= 3 then
if parts[1] == "btn" or
parts[1] == "cb" or
parts[1] == "tl" or
parts[1] == "th" then
local name = ""
for i=3, #parts,1 do
if name ~= "" then
name = name .. "_"
end
name = name .. parts[i]
end
return {
type = parts[1],
tab = tonumber(parts[2]),
name = name,
value = value
}
end
end
end
return nil
end
------------------------------------------------------------------------------
-- name: handle_statistics_tab
-- @function [parent=#mobf_settings] handle_statistics_tab
--
--! @brief handle events from statistics tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_statistics_tab(sender_data)
mobf_settings.show_statistics_tab(sender_data)
end
------------------------------------------------------------------------------
-- name: handle_info_tab
-- @function [parent=#mobf_settings] handle_info_tab
--
--! @brief handle events from info tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_info_tab(sender_data)
mobf_settings.show_info_tab(sender_data)
end
------------------------------------------------------------------------------
-- name: handle_factions_tab
-- @function [parent=#mobf_settings] handle_factions_tab
--
--! @brief handle events from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_factions_tab(sender_data)
mobf_settings.handle_factions_tab_input(sender_data)
mobf_settings.show_factions_tab(sender_data)
end
------------------------------------------------------------------------------
-- name: handle_main_tab
-- @function [parent=#mobf_settings] handle_main_tab
--
--! @brief handle events from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_main_tab(sender_data)
--check player privs
if sender_data.is_admin then
mobf_settings.handle_main_tab_input(sender_data)
mobf_settings.show_main_tab(sender_data)
else
end
end
------------------------------------------------------------------------------
-- name: handle_settings_tab
-- @function [parent=#mobf_settings] handle_settings_tab
--
--! @brief handle events from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_settings_tab(sender_data)
--check player privs
if sender_data.is_admin then
mobf_settings.handle_settings_tab_input(sender_data)
mobf_settings.show_settings_tab(sender_data)
else
end
end
------------------------------------------------------------------------------
-- name: handle_main_tab
-- @function [parent=#mobf_settings] handle_tools_tab
--
--! @brief handle events from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
--!
--! @return sender information
-------------------------------------------------------------------------------
function mobf_settings.handle_tools_tab(sender_data)
if mobf_settings.handle_tools_tab_input(sender_data) then
mobf_settings.show_tools_tab(sender_data)
end
end
------------------------------------------------------------------------------
-- name: show_main_tab
-- @function [parent=#mobf_settings] show_main_tab
--
--! @brief update formspec to main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_main_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
formspec = formspec .. "label[0.5,0;Mobs:]"
.. "label[0.5,8.5;doubleclick to change!]"
.. "label[4,8.5;green=enabled, red=disabled]"
formspec = formspec .. "textlist[0.5,0.5;7,8;tl_" .. sender_data.tab .. "_mobs;"
local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist")
local mobf_mobs_blacklisted = nil
if mobf_mob_blacklist_string ~= nil then
mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string)
end
local toadd = ""
for i,val in ipairs(mobf_rtd.registred_mob) do
if toadd ~= "" then
toadd = toadd .. ","
end
if contains(mobf_mobs_blacklisted,val) then
toadd = toadd .. COLOR_RED .. val
else
toadd = toadd .. COLOR_GREEN .. val
end
end
formspec = formspec .. toadd .. ";]"
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: show_tools_tab
-- @function [parent=#mobf_settings] show_tools_tab
--
--! @brief update formspec to tools tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_tools_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
formspec = formspec ..
"button[1.5,1;4,0.5;btn_" .. sender_data.tab .. "_pathmaker_tool;Give pathmarker tool]" ..
"button[1.5,1.75;4,0.5;btn_" .. sender_data.tab .. "_preserved_mobs;Show preserved mobs gui]" ..
"button[1.5,2.5;4,0.5;btn_" .. sender_data.tab .. "_path_manager;Show path manager]"
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: printfac
-- @function [parent=#mobf_settings] printfac
--
--! @brief update formspec to tools tab
--! @ingroup mobf_settings
--
--! @param name of facility
--! @param data data to add label
--! @param yval ypos of label
--! @param vs formatstring
--
--! @return formspec label element string
-------------------------------------------------------------------------------
function mobf_settings.printfac(name,data,yval,fs)
return
"label[0.75," .. yval .. ";" .. string.sub(name,1,20) .. "]" ..
"label[2.75," .. yval .. ";" ..
string.format("%10s",string.format(fs,data.current)).. "]" ..
"label[4.25," .. yval .. ";" ..
string.format("%10s",data.maxabs).. "]" ..
"label[6," .. yval .. ";" ..
string.format("%10s",string.format(fs,data.max)).. "]"
end
------------------------------------------------------------------------------
-- name: show_info_tab
-- @function [parent=#mobf_settings] show_info_tab
--
--! @brief update formspec to tools tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_info_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
local adv_stats = adv_spawning.get_statistics()
local mobs_offline = spawning.total_offline_mobs()
local statistics = mobf_get_statistics()
formspec = formspec ..
"label[0.75,0.25;Timesource:]" ..
"label[2.75,0.25;" .. mobf_fixed_size_string(mobf_rtd.timesource,30) .. "]" ..
"label[0.75,0.75;Mobs spawned by internal mapgen this session:]" ..
"label[6,0.75;" .. string.format("%10d",mobf_rtd.total_spawned) .. "]" ..
"label[0.75,1.25;Mobs spawned by adv_spawning this session:]" ..
"label[6,1.25;" .. string.format("%10d",adv_stats.session.entities_created) .. "]" ..
mobf_settings.printfac("Type",{current="cur count",maxabs="",max="max count"},2,"%s") ..
mobf_settings.printfac("--------------------",{current="--------------------",maxabs="",max="--------------------"},2.25,"%s") ..
mobf_settings.printfac("Active mobs",statistics.data.mobs,2.5,"%6d") ..
mobf_settings.printfac("Offline mobs",{current=mobs_offline,maxabs="",max=-1},3,"%6d") ..
mobf_settings.printfac("Jobs in queue",statistics.data.queue,3.5,"%6d") ..
"label[0.75,5.0;Daytime:]" ..
"label[2.5,5.0;" .. string.format("%5d",minetest.get_timeofday()*24000) .. "]"
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: show_statistics_tab
-- @function [parent=#mobf_settings] show_statistics_tab
--
--! @brief update formspec to tools tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_statistics_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
local adv_stats = adv_spawning.get_statistics()
local statistics = mobf_get_statistics()
formspec = formspec ..
mobf_settings.printfac("Facility",{current="Current",maxabs="Abs.Max (ms)",max="Maximum"},"0","%s") ..
mobf_settings.printfac("Total",statistics.data.total,"0.5","%2.2f%%") ..
mobf_settings.printfac("--------------------",{current="--------------------",maxabs="--------------------",max="--------------------"},0.25,"%s") ..
mobf_settings.printfac("Onstep",statistics.data.onstep,"1","%2.2f%%") ..
mobf_settings.printfac("Job processing",statistics.data.queue_load,"1.5","%2.2f%%") ..
mobf_settings.printfac("ABM",statistics.data.abm,"2","%.2f%%") ..
mobf_settings.printfac("MapGen",statistics.data.mapgen,"2.5","%2.2f%%") ..
mobf_settings.printfac("Spawn onstep",statistics.data.spawn_onstep,"3","%2.2f%%") ..
mobf_settings.printfac("Activate",statistics.data.activate,"3.5","%2.2f%%") ..
mobf_settings.printfac("User 1",statistics.data.user_1,"6.5","%2.2f%%") ..
mobf_settings.printfac("User 2",statistics.data.user_2,"7","%2.2f%%") ..
mobf_settings.printfac("User 3",statistics.data.user_3,"7.5","%2.2f%%") ..
mobf_settings.printfac("Adv.Spawning", {
current=adv_stats.load.cur,
maxabs=adv_stats.step.max,
max=adv_stats.load.max},"4","%2.2f%%")
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: show_factions_tab
-- @function [parent=#mobf_settings] show_factions_tab
--
--! @brief update formspec to tools tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_factions_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
local new_dataid = ""
local own_data = sender_data.factions_tab_data
if own_data == nil then
own_data = {}
own_data.available_factions_selected=0
own_data.faction_reputation_selected=0
end
new_dataid = mobf_global_data_store(own_data)
formspec = formspec ..
"label[0.25,-0.25;Available factions:]" ..
"textlist[0.25,0.25;3.5,7.5;" ..
"tl_" .. sender_data.tab .."_available_factions:" .. new_dataid .. ";"
local factionlist = factions.get_faction_list()
local first_element = true
if #factionlist ~= 0 then
for i=1,#factionlist,1 do
if not first_element then
formspec = formspec .. ","
else
first_element = false
end
formspec = formspec .. factionlist[i]
end
else
formspec = formspec .. "no factions available"
end
formspec = formspec .. ";" .. own_data.available_factions_selected .. "]"
local playername = sender_data.player:get_player_name()
if minetest.check_player_privs(playername, {faction_admin=true})
or playername == "singleplayer" then
formspec = formspec ..
"button[0.25,8;3.75,0.5;btn_" .. sender_data.tab .. "_delete:" .. new_dataid .. ";Delete]" ..
"field[4.3,0.75;4,0.5;te_factionname;New Faction;]" ..
"button[4,1.25;4,0.25;btn_" .. sender_data.tab .. "_create:" .. new_dataid .. ";Create]"
end
if minetest.check_player_privs(playername, {faction_admin=true}) or
minetest.check_player_privs(playername, {faction_user=true})
or playername == "singleplayer" then
formspec = formspec ..
"field[4.3,2.75;4,0.5;te_inviteename;Playername:;]" ..
"button[4,3.25;4,0.25;btn_" .. sender_data.tab .. "_invite:" .. new_dataid .. ";Invite]"
end
local selected_rep = ""
formspec = formspec ..
"label[4,3.75;Base reputation:]" ..
"textlist[4,4.25;3.75,3.5;tl_" .. sender_data.tab .. "_faction_reputation:" .. new_dataid .. ";"
if own_data.available_factions_selected > 0 and
own_data.available_factions_selected <= #factionlist then
local first_rep = true
for i=1,#factionlist,1 do
local current_rep = factions.get_base_reputation(
factionlist[i],
factionlist[own_data.available_factions_selected])
if not first_rep then
formspec = formspec .. ","
else
first_rep = false
end
if tonumber(current_rep) > 0 then
formspec = formspec .. COLOR_GREEN
elseif tonumber(current_rep) < 0 then
formspec = formspec .. COLOR_RED
end
formspec = formspec .. "(" .. current_rep .. ") " .. factionlist[i]
end
if own_data.faction_reputation_selected > 0 and
own_data.faction_reputation_selected <= #factionlist then
selected_rep = factions.get_base_reputation(
factionlist[own_data.faction_reputation_selected],
factionlist[own_data.available_factions_selected])
end
end
formspec = formspec ..
";" .. own_data.faction_reputation_selected .."]" ..
"label[4,7.9;New Baserep:]" ..
"field[6.2,8.3;1.1,0.5;te_baserep;;" .. selected_rep .."]" ..
"button[6.9,8;1,0.5;btn_" .. sender_data.tab .. "_set_reputation:" .. new_dataid .. ";set]"
if sender_data.errormessage then
formspec = formspec ..
"label[0.25,8.5;" .. sender_data.errormessage .. "]"
end
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: show_settings_tab
-- @function [parent=#mobf_settings] show_settings_tab
--
--! @brief update formspec to settings tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.show_settings_tab(sender_data)
local formspec = mobf_settings.formspec_header(sender_data)
formspec = formspec .. "checkbox[1,0.5;" ..
"cb_" .. sender_data.tab .. "_disable_animal_spawning;" ..
"Disable mob spawning;" ..
mobf_settings.setting_gettext("mobf_disable_animal_spawning") .."]"
formspec = formspec .. "checkbox[1,1;" ..
"cb_" .. sender_data.tab .. "_disable_3d_mode;" ..
"Disable 3D mobs;" ..
mobf_settings.setting_gettext("mobf_disable_3d_mode") .."]"
formspec = formspec .. "checkbox[1,1.5;" ..
"cb_" .. sender_data.tab .. "_animal_spawning_secondary;" ..
"Enable secondary spawning;" ..
mobf_settings.setting_gettext("mobf_animal_spawning_secondary") .."]"
formspec = formspec .. "checkbox[1,2;" ..
"cb_" .. sender_data.tab .. "_delete_disabled_mobs;" ..
"Delete disabled mobs+spawners;" ..
mobf_settings.setting_gettext("mobf_delete_disabled_mobs") .."]"
formspec = formspec .. "checkbox[1,2.5;" ..
"cb_" .. sender_data.tab .. "_log_bug_warnings;" ..
"Log MOBF bug warnings;" ..
mobf_settings.setting_gettext("mobf_log_bug_warnings") .."]"
formspec = formspec .. "checkbox[1,3;" ..
"cb_" .. sender_data.tab .. "_vombie_3d_burn_animation_enabled;" ..
"Vombie 3D burn animation;" ..
mobf_settings.setting_gettext("vombie_3d_burn_animation_enabled") .."]"
formspec = formspec .. "checkbox[1,3.5;" ..
"cb_" .. sender_data.tab .. "_log_removed_entities;" ..
"Log all removed mobs;" ..
mobf_settings.setting_gettext("mobf_log_removed_entities") .."]"
formspec = formspec .. "checkbox[1,4;" ..
"cb_" .. sender_data.tab .. "_grief_protection;" ..
"Enable grief protection;" ..
mobf_settings.setting_gettext("mobf_grief_protection") .."]"
formspec = formspec .. "checkbox[1,4.5;" ..
"cb_" .. sender_data.tab .. "_lifebar;" ..
"Show mob lifebar;" ..
mobf_settings.setting_gettext("mobf_lifebar") .."]"
formspec = formspec .. "checkbox[1,5;" ..
"cb_" .. sender_data.tab .. "_enable_statistics;" ..
"Enable statistics;" ..
mobf_settings.setting_gettext("mobf_enable_statistics") .."]"
formspec = formspec .. "checkbox[1,5.5;" ..
"cb_" .. sender_data.tab .. "_delayed_spawning;" ..
"Delay spawning at mapgen;" ..
mobf_settings.setting_gettext("mobf_delayed_spawning") .."]"
formspec = formspec .. "checkbox[1,6;" ..
"cb_" .. sender_data.tab .. "_disable_pathfinding;" ..
"Disable core pathfinding support;" ..
mobf_settings.setting_gettext("mobf_disable_pathfinding") .."]"
formspec = formspec .. "checkbox[1,6.5;" ..
"cb_" .. sender_data.tab .. "_show_spawners;" ..
"Show spawner entities;" ..
mobf_settings.setting_gettext("mobf_show_spawners") .."]"
--print("formspec: " .. formspec)
if formspec ~= nil then
minetest.show_formspec(sender_data.player:get_player_name(),
sender_data.formname,
formspec)
end
end
------------------------------------------------------------------------------
-- name: handle_tools_tab_input
-- @function [parent=#mobf_settings] handle_tools_tab_input
--
--! @brief handle input from tools tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.handle_tools_tab_input(sender_data)
if sender_data.name == "pathmaker_tool" then
sender_data.player:get_inventory():add_item("main", "mobf:path_marker 1")
end
local name = sender_data.player:get_player_name()
if sender_data.name == "preserved_mobs" then
mob_preserve.handle_command(name,nil)
return false
end
if sender_data.name == "path_manager" then
mobf_path.show_manage_menu(name,nil)
return false
end
return true
end
------------------------------------------------------------------------------
-- name: handle_factions_tab_input
-- @function [parent=#mobf_settings] handle_factions_tab_input
--
--! @brief handle input from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.handle_factions_tab_input(sender_data)
local parts = string.split(sender_data.name,":")
local action = parts[1]
local dataid = parts[2]
local data = mobf_global_data_get(dataid)
sender_data.factions_tab_data = data
if action == "delete" then
end
if action == "create" then
if sender_data.fields["te_factionname"] ~= nil then
if sender_data.fields["te_factionname"] == "" then
sender_data.errormessage ="Refusing to create faction with no name!"
elseif not factions.exists(sender_data.fields["te_factionname"]) then
if not factions.add_faction(sender_data.fields["te_factionname"]) then
sender_data.errormessage = "Failed to add faction \""
.. sender_data.fields["te_factionname"] .. "\""
else
if not factions.member_add(
sender_data.fields["te_factionname"],sender_data.player) then
sender_data.errormessage = "Unable to add creator to faction!"
elseif not factions.set_admin(
sender_data.fields["te_factionname"],
sender_data.player:get_player_name(),true) then
sender_data.errormessage = "Unable to give admin privileges to creator!"
end
end
else
sender_data.errormessage = "Faction \""
.. sender_data.fields["te_factionname"] .. "\" already exists"
end
end
end
if action == "invite" then
--get faction from faction list
local factionlist = factions.get_faction_list()
if sender_data.factions_tab_data.available_factions_selected > 0 and
sender_data.factions_tab_data.available_factions_selected < #factionlist then
local faction_to_invite = factionlist[sender_data.factions_tab_data.available_factions_selected]
--check if player is in faction he wants to invite for
--TODO privs check
if factions.is_admin(faction_to_invite,sender_data.player:get_player_name()) or
factions.is_free(faction_to_invite) then
if sender_data.fields["te_inviteename"] ~= nil and
sender_data.fields["te_inviteename"] ~= "" then
factions.member_invite(faction_to_invite,sender_data.fields["te_inviteename"])
else
sender_data.errormessage = "You can't invite nobody!"
end
else
sender_data.errormessage = "Not allowed to invite for faction " .. faction_to_invite
end
else
sender_data.errormessage = "No faction selected to invite to"
end
end
if action == "set_reputation" then
if sender_data.factions_tab_data.available_factions_selected ==
sender_data.factions_tab_data.faction_reputation_selected then
sender_data.errormessage = "Can't set base reputation of faction to itself!"
else
local factionlist = factions.get_faction_list()
local faction1 = factionlist[sender_data.factions_tab_data.available_factions_selected]
local faction2 = factionlist[sender_data.factions_tab_data.faction_reputation_selected]
if faction1 ~= nil and faction2 ~= nil and
sender_data.fields["te_baserep"] ~= nil and sender_data.fields["te_baserep"] ~= "" then
if not factions.set_base_reputation(faction1,faction2,sender_data.fields["te_baserep"]) then
sender_data.errormessage = "Failed to set base reputation"
end
else
sender_data.errormessage = "Only one faction selected or no value given!"
end
end
end
if action == "available_factions" then
if sender_data.value ~= nil then
local event = minetest.explode_textlist_event(sender_data.value)
if event.typ ~= "INV" then
sender_data.factions_tab_data.available_factions_selected = event.index
end
end
end
if action == "faction_reputation" then
if sender_data.value ~= nil then
local event = minetest.explode_textlist_event(sender_data.value)
if event.typ ~= "INV" then
sender_data.factions_tab_data.faction_reputation_selected = event.index
end
end
end
end
------------------------------------------------------------------------------
-- name: handle_main_tab_input
-- @function [parent=#mobf_settings] handle_main_tab_input
--
--! @brief handle input from main tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.handle_main_tab_input(sender_data)
if sender_data.name == "mobs" then
local tl_event = minetest.explode_textlist_event(sender_data.value)
if tl_event.type == "DCL" and
tl_event.index <= #mobf_rtd.registred_mob then
local clicked_mob = mobf_rtd.registred_mob[tl_event.index]
local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist")
local mobf_mobs_blacklisted = nil
if mobf_mob_blacklist_string ~= nil then
mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string)
else
mobf_mobs_blacklisted = {}
end
local new_blacklist = {}
if contains(mobf_mobs_blacklisted,clicked_mob) then
for i=1,#mobf_mobs_blacklisted,1 do
if mobf_mobs_blacklisted[i] ~= clicked_mob then
table.insert(new_blacklist,mobf_mobs_blacklisted[i])
end
end
else
new_blacklist = mobf_mobs_blacklisted
table.insert(mobf_mobs_blacklisted,clicked_mob)
end
minetest.world_setting_set("mobf_blacklist",minetest.serialize(new_blacklist))
end
end
end
------------------------------------------------------------------------------
-- name: handle_settings_tab_input
-- @function [parent=#mobf_settings] handle_settings_tab_input
--
--! @brief handle input from settings tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.handle_settings_tab_input(sender_data)
--print("settings tab handler " .. dump(sender_data))
if sender_data.name == "disable_animal_spawning" then
mobf_set_world_setting("mobf_disable_animal_spawning",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "disable_3d_mode" then
mobf_set_world_setting("mobf_disable_3d_mode",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "animal_spawning_secondary" then
mobf_set_world_setting("mobf_animal_spawning_secondary",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "delete_disabled_mobs" then
mobf_set_world_setting("mobf_delete_disabled_mobs",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "log_bug_warnings" then
mobf_set_world_setting("mobf_log_bug_warnings",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "vombie_3d_burn_animation_enabled" then
mobf_set_world_setting("vombie_3d_burn_animation_enabled",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "log_removed_entities" then
mobf_set_world_setting("mobf_log_removed_entities",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "grief_protection" then
mobf_set_world_setting("mobf_grief_protection",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "lifebar" then
mobf_set_world_setting("mobf_lifebar",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "enable_statistics" then
mobf_set_world_setting("mobf_enable_statistics",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "delayed_spawning" then
mobf_set_world_setting("mobf_delayed_spawning",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "disable_pathfinding" then
mobf_set_world_setting("mobf_disable_pathfinding",
minetest.is_yes(sender_data.value))
end
if sender_data.name == "show_spawners" then
mobf_set_world_setting("mobf_show_spawners",
minetest.is_yes(sender_data.value))
end
end
------------------------------------------------------------------------------
-- name: setting_gettext(name)
-- @function [parent=#mobf_settings] setting_gettext
--
--! @brief convert bool to textual value
--! @ingroup mobf_settings
--
--! @param value string
-------------------------------------------------------------------------------
function mobf_settings.setting_gettext(value)
local value = mobf_get_world_setting(value)
if value == nil then
return "false"
end
if value then
return "true"
end
return "false"
end
------------------------------------------------------------------------------
-- name: formspec_header
-- @function [parent=#mobf_settings] formspec_header
--
--! @brief handle input from settings tab
--! @ingroup mobf_settings
--
--! @param sender_data all information gatered
-------------------------------------------------------------------------------
function mobf_settings.formspec_header(sender_data)
local retval = "size[8,9]" ..
--"label[5.5,-0.4;MOBF version: " ..mobf_get_version().."]" ..
"label[-0.25,8.9;MOBF version: " ..mobf_get_version().."]" ..
"tabheader[-0.3,-0.99;th_" .. sender_data.tab .. "_maintab;"
local toadd = ""
for i=1,#mobf_settings.tabs,1 do
if mobf_settings.tabs[i].admin then
if sender_data.is_admin then
if toadd ~= "" then
toadd = toadd .. ","
end
toadd = toadd .. mobf_settings.tabs[i].caption
end
else
if toadd ~= "" then
toadd = toadd .. ","
end
toadd = toadd .. mobf_settings.tabs[i].caption
end
end
retval = retval .. toadd .. ";" .. sender_data.tab .. ";true;false]"
return retval
end
------------------------------------------------------------------------------
-- name: register_tab(caption,adminrequired,tabhandler)
-- @function [parent=#mobf_settings] register_tab
--
--! @brief handle input from settings tab
--! @ingroup mobf_settings
--
--! @param caption of tab button
--! @param adminrequired should this tab be shown to admin only?
--! @param tabhandler function called to handle this tab
-------------------------------------------------------------------------------
function mobf_settings.register_tab(caption,adminrequired,tabhandler)
local tab_to_add = {
admin = adminrequired,
handler = tabhandler,
caption = caption
}
table.insert(mobf_settings.tabs,tab_to_add)
end
mobf_settings.register_tab("Known Mobs",true, mobf_settings.handle_main_tab)
mobf_settings.register_tab("Settings", true, mobf_settings.handle_settings_tab)
mobf_settings.register_tab("Tools", false,mobf_settings.handle_tools_tab)
if minetest.world_setting_get("mobf_enable_statistics") then
mobf_settings.register_tab("Stats", false,mobf_settings.handle_statistics_tab)
end
mobf_settings.register_tab("Info", false,mobf_settings.handle_info_tab)
if mobf_rtd.factions_available then
mobf_settings.register_tab("Factions", false,mobf_settings.handle_factions_tab)
end
------------------------------------------------------------------------------
-- register handler for pressed buttons
------------------------------------------------------------------------------
minetest.register_on_player_receive_fields(mobf_settings.handle_event)
--register chatcommand
minetest.register_chatcommand("mobf_settings",
{
params = "",
description = "show mobf settings" ,
privs = {},
func = function(name,param)
minetest.chat_send_player(name, "MOBF: >mobf_settings< is DEPRECATED use >mobf<")
local player = minetest.get_player_by_name(name)
mobf_settings.handle_event(player,mobf_settings.formname,{btn_1_init="init"})
end
})
--"mobf_settings" will be removed
minetest.register_chatcommand("mobf",
{
params = "",
description = "show mobf settings" ,
privs = {},
func = function(name,param)
local player = minetest.get_player_by_name(name)
mobf_settings.handle_event(player,mobf_settings.formname,{btn_1_init="init"})
end
})
minetest.log("action","MOD: mobf_settings mod version "..mobf_settings.version.." loaded")