mirror of
https://github.com/MinetestForFun/fishing.git
synced 2025-01-09 18:30:16 +01:00
start adding concours
This commit is contained in:
parent
3a37098aab
commit
957aaa91f5
224
functions.lua
224
functions.lua
@ -59,6 +59,14 @@ function fishing_setting.func.set_settings(new_settings, settings)
|
|||||||
new_settings["escape_chance"] = settings["escape_chance"]
|
new_settings["escape_chance"] = settings["escape_chance"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if settings["concours"] ~= nil then
|
||||||
|
new_settings["concours"] = settings["concours"]
|
||||||
|
end
|
||||||
|
if settings["duration"] ~= nil then
|
||||||
|
new_settings["duration"] = settings["duration"]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -202,12 +210,16 @@ local inc = function(value, field, min, max)
|
|||||||
v = value + 10
|
v = value + 10
|
||||||
elseif field == "+60" then
|
elseif field == "+60" then
|
||||||
v = value + 60
|
v = value + 60
|
||||||
|
elseif field == "+600" then
|
||||||
|
v = value + 600
|
||||||
elseif field == "-1" then
|
elseif field == "-1" then
|
||||||
v = value - 1
|
v = value - 1
|
||||||
elseif field == "-10" then
|
elseif field == "-10" then
|
||||||
v = value - 10
|
v = value - 10
|
||||||
elseif field == "-60" then
|
elseif field == "-60" then
|
||||||
v = value - 60
|
v = value - 60
|
||||||
|
elseif field == "-600" then
|
||||||
|
v = value - 600
|
||||||
else -- useless, prevent crash
|
else -- useless, prevent crash
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
@ -302,6 +314,9 @@ end
|
|||||||
minetest.register_on_shutdown(function()
|
minetest.register_on_shutdown(function()
|
||||||
minetest.log("action", "[fishing] Server shuts down. saving trophies table")
|
minetest.log("action", "[fishing] Server shuts down. saving trophies table")
|
||||||
fishing_setting.func.save_trophies()
|
fishing_setting.func.save_trophies()
|
||||||
|
--if fishing_setting.settings["concours"] == true then
|
||||||
|
fishing_setting.func.save_concours()
|
||||||
|
--end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
@ -328,6 +343,18 @@ function fishing_setting.func.add_to_trophies(player, fish, desc)
|
|||||||
minetest.spawn_item(player:getpos(), {name=name, count=1, wear=0, metadata=""})
|
minetest.spawn_item(player:getpos(), {name=name, count=1, wear=0, metadata=""})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if fishing_setting.settings["concours"] == true then
|
||||||
|
if fishing_setting.concours[fish] == nil then
|
||||||
|
fishing_setting.concours[fish] = {}
|
||||||
|
end
|
||||||
|
if fishing_setting.concours[fish][player_name] == nil then
|
||||||
|
fishing_setting.concours[fish][player_name] = 1
|
||||||
|
else
|
||||||
|
fishing_setting.concours[fish][player_name] = fishing_setting.concours[fish][player_name] + 1
|
||||||
|
end
|
||||||
|
minetest.chat_send_all(fishing_setting.func.S("Yeah, %s catch "..desc):format(player_name))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -363,3 +390,200 @@ minetest.register_chatcommand("fishing_config", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--function save settings
|
||||||
|
function fishing_setting.func.save_concours()
|
||||||
|
local input = io.open(fishing_setting.file_concours, "w")
|
||||||
|
if input then
|
||||||
|
input:write(minetest.serialize(fishing_setting.concours))
|
||||||
|
input:close()
|
||||||
|
else
|
||||||
|
minetest.log("action","Open failed (mode:w) of " .. fishing_setting.file_concours)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--function load councours data from file
|
||||||
|
function fishing_setting.func.load_concours()
|
||||||
|
local file = io.open(fishing_setting.file_concours, "r")
|
||||||
|
local settings = {}
|
||||||
|
fishing_setting.concours = {}
|
||||||
|
if file then
|
||||||
|
fishing_setting.concours= minetest.deserialize(file:read("*all"))
|
||||||
|
file:close()
|
||||||
|
if settings == nil or type(settings) ~= "table" then
|
||||||
|
fishing_setting.concours = {}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--Menu fishing configuration
|
||||||
|
fishing_setting.func.on_show_settings_concours = function(player_name)
|
||||||
|
|
||||||
|
if not fishing_setting.tmp_setting then
|
||||||
|
fishing_setting.tmp_setting = {}
|
||||||
|
fishing_setting.func.set_settings(fishing_setting.tmp_setting, fishing_setting.settings)
|
||||||
|
end
|
||||||
|
|
||||||
|
local formspec = "size[6,6]bgcolor[#99a8ba;]label[2,0;FISHING CONCOURS]"..
|
||||||
|
--Time concours
|
||||||
|
"label[1.6,0.5;Duration]"..
|
||||||
|
"button[0,1;1,1;duration;-60]"..
|
||||||
|
"button[1,1;1,1;duration;-600]"..
|
||||||
|
"label[2.1,1.2;"..tostring(fishing_setting.tmp_setting["duration"]).."]"..
|
||||||
|
"button[2.7,1;1,1;duration;+600]"..
|
||||||
|
"button[3.7,1;1,1;duration;+60]"..
|
||||||
|
--concours enable
|
||||||
|
"label[0.5,2.5;concours enable]"..
|
||||||
|
"button[3.5,2.3;1,1;concours;"..tostring(fishing_setting.tmp_setting["concours"]).."]"..
|
||||||
|
"label[0.5,4.8;reset classements]"..
|
||||||
|
"field[3,5;1,1;reset;;]"..
|
||||||
|
|
||||||
|
|
||||||
|
"button_exit[0.5,5.2;1.5,1;save;Abort]"..
|
||||||
|
"button_exit[4,5.2;1.5,1;save;Ok]"
|
||||||
|
|
||||||
|
minetest.show_formspec(player_name, "fishing:concours", formspec)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
if formname == "fishing:concours" then
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if not name then return end
|
||||||
|
if fields["save"] == "Ok" then
|
||||||
|
fishing_setting.func.set_settings(fishing_setting.settings, fishing_setting.tmp_setting)
|
||||||
|
fishing_setting.func.save()
|
||||||
|
fishing_setting.tmp_setting = nil
|
||||||
|
return
|
||||||
|
elseif fields["quit"] or fields["abort"] then
|
||||||
|
fishing_setting.tmp_setting = nil
|
||||||
|
return
|
||||||
|
elseif fields["duration"] then
|
||||||
|
fishing_setting.tmp_setting["duration"] = inc(fishing_setting.tmp_setting["duration"], fields["duration"], 120, 14400)
|
||||||
|
elseif fields["concours"] then
|
||||||
|
fishing_setting.tmp_setting["concours"] = bool(fields["concours"])
|
||||||
|
elseif fields["reset"] and fields["reset"]:lower() == "yes" then
|
||||||
|
fishing_setting.concours = {}
|
||||||
|
fishing_setting.func.save_concours()
|
||||||
|
else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
fishing_setting.func.on_show_settings_concours(name)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_chatcommand("fishing_concours", {
|
||||||
|
params = "fishing_concours <true|false> <time-in-sec>",
|
||||||
|
description = "enable|disable fishing concours (admin only)",
|
||||||
|
privs = {server=true},
|
||||||
|
func = function(player_name, param)
|
||||||
|
if not player_name then return end
|
||||||
|
fishing_setting.func.on_show_settings_concours(player_name)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function spairs(t, order)
|
||||||
|
-- collect the keys
|
||||||
|
local keys = {}
|
||||||
|
for k in pairs(t) do keys[#keys+1] = k end
|
||||||
|
-- if order function given, sort by it by passing the table and keys a, b,
|
||||||
|
-- otherwise just sort the keys
|
||||||
|
if order then
|
||||||
|
table.sort(keys, function(a,b) return order(t, a, b) end)
|
||||||
|
else
|
||||||
|
table.sort(keys)
|
||||||
|
end
|
||||||
|
-- return the iterator function
|
||||||
|
local i = 0
|
||||||
|
return function()
|
||||||
|
i = i + 1
|
||||||
|
if keys[i] then
|
||||||
|
return keys[i], t[keys[i]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function fishing_setting.func.set_winners(list)
|
||||||
|
local win = {}
|
||||||
|
local i = 1
|
||||||
|
-- this uses an custom sorting function ordering by score descending
|
||||||
|
for k,v in spairs(list, function(t,a,b) return t[b] < t[a] end) do
|
||||||
|
table.insert(win, {[k]=v})
|
||||||
|
end
|
||||||
|
return win
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function fishing_setting.func.get_stat()
|
||||||
|
local winners= {}
|
||||||
|
for k,v in pairs(fishing_setting.concours) do
|
||||||
|
if fishing_setting.concours[k] ~= nil then
|
||||||
|
winners[k] = fishing_setting.func.set_winners(fishing_setting.concours[k])
|
||||||
|
else
|
||||||
|
winners[k] = {}
|
||||||
|
end
|
||||||
|
end --bgcolor[#99a8ba;]
|
||||||
|
local formspec = {"size[11,8]bgcolor[#99a8ba;]label[3.5,0;FISHING CONCOURS CLASSEMENT]"}
|
||||||
|
|
||||||
|
local X = 0
|
||||||
|
local Y
|
||||||
|
|
||||||
|
for fish,fishers in pairs(winners) do
|
||||||
|
Y = 1.5
|
||||||
|
table.insert(formspec, "label["..(X+0.4)..",1;"..tostring(fish):upper().."]") --fish name
|
||||||
|
for _,s in ipairs(fishers) do
|
||||||
|
for pl,nb in pairs(s) do
|
||||||
|
table.insert(formspec, "label["..(X) ..","..Y..";"..tostring(nb).."]") -- nb fish catched
|
||||||
|
table.insert(formspec, "label["..(X+0.4) ..","..Y..";"..tostring(pl).."]") -- playername
|
||||||
|
end
|
||||||
|
Y = Y + 0.5
|
||||||
|
end
|
||||||
|
X = X + 2.2
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(formspec)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_chatcommand("fishing_class", {
|
||||||
|
params = "display classement",
|
||||||
|
description = "",
|
||||||
|
privs = {interact=true},
|
||||||
|
func = function(player_name, param)
|
||||||
|
if not player_name then return end
|
||||||
|
local formspec = fishing_setting.func.get_stat()
|
||||||
|
|
||||||
|
minetest.show_formspec(player_name, "fishing:classement", formspec)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
8
init.lua
8
init.lua
@ -21,8 +21,9 @@ fishing_setting.func = {}
|
|||||||
fishing_setting.is_creative_mode = minetest.setting_getbool("creative_mode")
|
fishing_setting.is_creative_mode = minetest.setting_getbool("creative_mode")
|
||||||
fishing_setting.file_settings = minetest.get_worldpath() .. "/fishing_config.txt"
|
fishing_setting.file_settings = minetest.get_worldpath() .. "/fishing_config.txt"
|
||||||
fishing_setting.file_trophies = minetest.get_worldpath() .. "/fishing_trophies.txt"
|
fishing_setting.file_trophies = minetest.get_worldpath() .. "/fishing_trophies.txt"
|
||||||
|
fishing_setting.file_concours = minetest.get_worldpath() .. "/fishing_concours.txt"
|
||||||
fishing_setting.settings = {}
|
fishing_setting.settings = {}
|
||||||
|
fishing_setting.concours = {}
|
||||||
--for random object
|
--for random object
|
||||||
random_objects = {}
|
random_objects = {}
|
||||||
fishing_setting.baits = {}
|
fishing_setting.baits = {}
|
||||||
@ -53,6 +54,8 @@ fishing_setting.settings["shark_chance"] = SHARK_CHANCE
|
|||||||
fishing_setting.settings["tresor_chance"] = TRESOR_CHANCE
|
fishing_setting.settings["tresor_chance"] = TRESOR_CHANCE
|
||||||
fishing_setting.settings["tresor_enable"] = TRESOR_RANDOM_ENABLE
|
fishing_setting.settings["tresor_enable"] = TRESOR_RANDOM_ENABLE
|
||||||
fishing_setting.settings["escape_chance"] = ESCAPE_CHANCE
|
fishing_setting.settings["escape_chance"] = ESCAPE_CHANCE
|
||||||
|
fishing_setting.settings["concours"] = CONCOURS
|
||||||
|
fishing_setting.settings["duration"] = DURATION
|
||||||
-- load config file if exist in worldpath
|
-- load config file if exist in worldpath
|
||||||
fishing_setting.func.load()
|
fishing_setting.func.load()
|
||||||
|
|
||||||
@ -72,7 +75,8 @@ dofile(path .."poles.lua")
|
|||||||
fishing_setting.func.hungry_random()
|
fishing_setting.func.hungry_random()
|
||||||
--load table catched fish by players
|
--load table catched fish by players
|
||||||
fishing_setting.func.load_trophies()
|
fishing_setting.func.load_trophies()
|
||||||
|
--load table concours
|
||||||
|
fishing_setting.func.load_concours()
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
|
minetest.log("action", "[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...")
|
||||||
-----------------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------------
|
||||||
|
@ -10,3 +10,5 @@ SHARK_CHANCE = 50
|
|||||||
TRESOR_CHANCE = 5
|
TRESOR_CHANCE = 5
|
||||||
TRESOR_RANDOM_ENABLE = true
|
TRESOR_RANDOM_ENABLE = true
|
||||||
ESCAPE_CHANCE = 5
|
ESCAPE_CHANCE = 5
|
||||||
|
CONCOURS = false
|
||||||
|
DURATION = 1800
|
||||||
|
Loading…
Reference in New Issue
Block a user