237 lines
7.0 KiB
Lua
237 lines
7.0 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 tab_feature_config.lua
|
|
--! @brief settings gui for mobf
|
|
--! @copyright Sapier
|
|
--! @author Sapier
|
|
--! @date 2014-05-30
|
|
--
|
|
-- Contact sapier a t gmx net
|
|
--------------------------------------------------------------------------------
|
|
|
|
local function get_formspec(tabview, name, tabdata)
|
|
|
|
if not tabdata.is_admin then
|
|
return "label[0.75,0.25;" ..
|
|
fgettext("Insufficient permissions to view this tab.")
|
|
.. "]"
|
|
end
|
|
|
|
if tabdata.available_factions_selected == nil then
|
|
tabdata.available_factions_selected = 0
|
|
end
|
|
|
|
if tabdata.faction_reputation_selected == nil then
|
|
tabdata.faction_reputation_selected = 0
|
|
end
|
|
|
|
local retval = ""
|
|
retval = retval ..
|
|
"label[0.25,-0.25;Available factions:]" ..
|
|
"textlist[0.25,0.25;3.5,7.5;tl_factions_available_factions;"
|
|
|
|
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
|
|
retval = retval .. ","
|
|
else
|
|
first_element = false
|
|
end
|
|
retval = retval .. factionlist[i]
|
|
end
|
|
else
|
|
retval = retval .. "no factions available"
|
|
end
|
|
|
|
retval = retval .. ";" .. tabdata.available_factions_selected .. "]"
|
|
|
|
if tabdata.is_admin then
|
|
retval = retval ..
|
|
"button[0.25,8;3.75,0.5;btn_factions_delete;Delete]" ..
|
|
"field[4.3,0.75;4,0.5;te_factionname;New Faction;]" ..
|
|
"button[4,1.25;4,0.25;btn_factions_create;Create]"
|
|
end
|
|
|
|
if core.check_player_privs(tabdata.playername, {faction_admin=true}) or
|
|
core.check_player_privs(tabdata.playername, {faction_user=true})
|
|
or tabdata.playername == "singleplayer" then
|
|
retval = retval ..
|
|
"field[4.3,2.75;4,0.5;te_inviteename;Playername:;]" ..
|
|
"button[4,3.25;4,0.25;btn_factions_invite;Invite]"
|
|
end
|
|
|
|
|
|
local selected_rep = ""
|
|
retval = retval ..
|
|
"label[4,3.75;Base reputation:]" ..
|
|
"textlist[4,4.25;3.75,3.5;tl_factions_faction_reputation;"
|
|
|
|
if tabdata.available_factions_selected > 0 and
|
|
tabdata.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[tabdata.available_factions_selected])
|
|
|
|
if not first_rep then
|
|
retval = retval .. ","
|
|
else
|
|
first_rep = false
|
|
end
|
|
if tonumber(current_rep) > 0 then
|
|
retval = retval .. COLOR_GREEN
|
|
elseif tonumber(current_rep) < 0 then
|
|
retval = retval .. COLOR_RED
|
|
end
|
|
retval = retval .. "(" .. current_rep .. ") " .. factionlist[i]
|
|
end
|
|
|
|
if tabdata.faction_reputation_selected > 0 and
|
|
tabdata.faction_reputation_selected <= #factionlist then
|
|
selected_rep = factions.get_base_reputation(
|
|
factionlist[tabdata.faction_reputation_selected],
|
|
factionlist[tabdata.available_factions_selected])
|
|
end
|
|
end
|
|
|
|
retval = retval ..
|
|
";" .. tabdata.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_factions_set_reputation;set]"
|
|
|
|
if tabdata.errormessage then
|
|
retval = retval ..
|
|
"label[0.25,8.5;" .. tabdata.errormessage .. "]"
|
|
end
|
|
|
|
return retval
|
|
end
|
|
|
|
local function handle_settings_buttons(self, fields, tabname, tabdata)
|
|
|
|
if not tabdata.is_admin then
|
|
core.log("error", "MOBF_Settings: someone managed to press a button " ..
|
|
"she/he shouldn't even see!")
|
|
end
|
|
|
|
if fields["btn_factions_delete"] then
|
|
tabdata.errormessage = "delete faction is not implemented yet"
|
|
return true
|
|
end
|
|
|
|
if fields["btn_factions_create"] then
|
|
if fields["te_factionname"] ~= nil then
|
|
if fields["te_factionname"] == "" then
|
|
tabdata.errormessage ="Refusing to create faction with no name!"
|
|
elseif not factions.exists(fields["te_factionname"]) then
|
|
if not factions.add_faction(fields["te_factionname"]) then
|
|
tabdata.errormessage = "Failed to add faction \""
|
|
.. fields["te_factionname"] .. "\""
|
|
else
|
|
local player = minetest.get_player_by_name(tabdata.playername)
|
|
if not player or not factions.member_add(
|
|
fields["te_factionname"], player) then
|
|
tabdata.errormessage = "Unable to add creator to faction!"
|
|
elseif not factions.set_admin(
|
|
fields["te_factionname"],
|
|
tabdata.playername, true) then
|
|
tabdata.errormessage = "Unable to give admin privileges to creator!"
|
|
end
|
|
end
|
|
else
|
|
tabdata.errormessage = "Faction \""
|
|
.. sender_data.fields["te_factionname"] .. "\" already exists"
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
if fields["btn_factions_invite"] then
|
|
--get faction from faction list
|
|
local factionlist = factions.get_faction_list()
|
|
if tabdata.available_factions_selected > 0 and
|
|
tabdata.available_factions_selected < #factionlist then
|
|
|
|
local faction_to_invite = factionlist[tabdata.available_factions_selected]
|
|
|
|
--check if player is in faction he wants to invite for
|
|
--TODO privs check
|
|
if factions.is_admin(faction_to_invite, tabdata.playername) or
|
|
factions.is_free(faction_to_invite) then
|
|
if fields["te_inviteename"] ~= nil and
|
|
fields["te_inviteename"] ~= "" then
|
|
factions.member_invite(faction_to_invite,fields["te_inviteename"])
|
|
else
|
|
tabdata.errormessage = "You can't invite nobody!"
|
|
end
|
|
else
|
|
tabdata.errormessage = "Not allowed to invite for faction " .. faction_to_invite
|
|
end
|
|
else
|
|
tabdata.errormessage = "No faction selected to invite to"
|
|
end
|
|
return true
|
|
end
|
|
|
|
if fields["btn_factions_set_reputation"] then
|
|
if tabdata.available_factions_selected ==
|
|
tabdata.faction_reputation_selected then
|
|
tabdata.errormessage = "Can't set base reputation of faction to itself!"
|
|
else
|
|
local factionlist = factions.get_faction_list()
|
|
local faction1 = factionlist[tabdata.available_factions_selected]
|
|
local faction2 = factionlist[tabdata.faction_reputation_selected]
|
|
|
|
if faction1 ~= nil and faction2 ~= nil and
|
|
fields["te_baserep"] ~= nil and
|
|
fields["te_baserep"] ~= "" then
|
|
if not factions.set_base_reputation(faction1, faction2,
|
|
fields["te_baserep"]) then
|
|
tabdata.errormessage = "Failed to set base reputation"
|
|
end
|
|
else
|
|
tabdata.errormessage = "Only one faction selected or no value given!"
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
if fields["tl_factions_available_factions"] then
|
|
local event = core.explode_textlist_event(
|
|
fields["tl_factions_available_factions"])
|
|
|
|
if event.typ ~= "INV" then
|
|
tabdata.available_factions_selected = event.index
|
|
end
|
|
return true
|
|
end
|
|
|
|
if fields["tl_factions_faction_reputation"] then
|
|
local event = core.explode_textlist_event(
|
|
fields["tl_factions_faction_reputation"])
|
|
|
|
if event.typ ~= "INV" then
|
|
tabdata.faction_reputation_selected = event.index
|
|
end
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
mobf_settings_tab_factions = {
|
|
name = "factions",
|
|
caption = fgettext("Factions"),
|
|
cbf_formspec = get_formspec,
|
|
cbf_button_handler = handle_settings_buttons
|
|
} |