forked from mff/fishing
620 lines
20 KiB
Lua
620 lines
20 KiB
Lua
|
|
--function save settings
|
|
function fishing_setting.func.save()
|
|
local input = io.open(fishing_setting.file_settings, "w")
|
|
if input then
|
|
input:write(minetest.serialize(fishing_setting.settings))
|
|
input:close()
|
|
else
|
|
minetest.log("action","Open failed (mode:w) of " .. fishing_setting.file_settings)
|
|
end
|
|
end
|
|
|
|
|
|
function fishing_setting.func.set_settings(new_settings, settings)
|
|
if settings["message"] ~= nil then
|
|
new_settings["message"] = settings["message"]
|
|
end
|
|
|
|
if settings["worm_is_mob"] ~= nil then
|
|
new_settings["worm_is_mob"] = settings["worm_is_mob"]
|
|
end
|
|
|
|
if settings["worm_chance"] ~= nil then
|
|
new_settings["worm_chance"] = settings["worm_chance"]
|
|
end
|
|
|
|
if settings["new_worm_source"] ~= nil then
|
|
new_settings["new_worm_source"] = settings["new_worm_source"]
|
|
end
|
|
if settings["wear_out"] ~= nil then
|
|
new_settings["wear_out"] = settings["wear_out"]
|
|
end
|
|
|
|
if settings["bobber_view_range"] ~= nil then
|
|
new_settings["bobber_view_range"] = settings["bobber_view_range"]
|
|
end
|
|
|
|
if settings["simple_deco_fishing_pole"] ~= nil then
|
|
new_settings["simple_deco_fishing_pole"] = settings["simple_deco_fishing_pole"]
|
|
end
|
|
|
|
if settings["fish_chance"] ~= nil then
|
|
new_settings["fish_chance"] = settings["fish_chance"]
|
|
end
|
|
|
|
if settings["tresor_chance"] ~= nil then
|
|
new_settings["tresor_chance"] = settings["tresor_chance"]
|
|
end
|
|
|
|
if settings["shark_chance"] ~= nil then
|
|
new_settings["shark_chance"] = settings["shark_chance"]
|
|
end
|
|
|
|
if settings["tresor_enable"] ~= nil then
|
|
new_settings["tresor_enable"] = settings["tresor_enable"]
|
|
end
|
|
|
|
if settings["escape_chance"] ~= nil then
|
|
new_settings["escape_chance"] = settings["escape_chance"]
|
|
end
|
|
end
|
|
|
|
|
|
--function load settings from file
|
|
function fishing_setting.func.load()
|
|
local file = io.open(fishing_setting.file_settings, "r")
|
|
local settings = {}
|
|
if file then
|
|
settings = minetest.deserialize(file:read("*all"))
|
|
file:close()
|
|
if settings and type(settings) == "table" then
|
|
fishing_setting.func.set_settings(fishing_setting.settings, settings)
|
|
end
|
|
end
|
|
end
|
|
|
|
--function return wear tool value (old or new)
|
|
function fishing_setting.func.wear_value(wear)
|
|
local used = 0
|
|
if wear == "random" then
|
|
used = (2000*(math.random(20, 29)))
|
|
elseif wear == "randomtools" then
|
|
used = (65535/(30-(math.random(15, 29))))
|
|
end
|
|
return used
|
|
end
|
|
|
|
|
|
-- function return table where mods actived
|
|
function fishing_setting.func.ignore_mod(list)
|
|
local listOk = {}
|
|
for i,v in ipairs(list) do
|
|
if minetest.get_modpath(v[1]) ~= nil then
|
|
table.insert(listOk, v)
|
|
end
|
|
end
|
|
return listOk
|
|
end
|
|
|
|
--function random hungry by bait type
|
|
function fishing_setting.func.hungry_random()
|
|
for i,a in pairs(fishing_setting.baits) do
|
|
fishing_setting.baits[i]["hungry"] = math.random(15, 80)
|
|
end
|
|
--change hungry after random time, min 0h30, max 6h00
|
|
minetest.after(math.random(1, 12)*1800,function() fishing_setting.func.hungry_random() end)
|
|
end
|
|
|
|
|
|
-- show notification when player catch tresor
|
|
function fishing_setting.func.notify(f_name, tresor)
|
|
local title = fishing_setting.func.S("Good luck to %s, He catch the tresor, %s!"):format(f_name, tresor[4])
|
|
for _, player in ipairs(minetest.get_connected_players()) do
|
|
local player_name = player:get_player_name()
|
|
if player_name == f_name then
|
|
minetest.chat_send_player(player_name, fishing_setting.func.S("You catch the tresor, %s!"):format(tresor[4]))
|
|
else
|
|
minetest.chat_send_player(player_name, title)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--Menu fishing configuration
|
|
fishing_setting.func.on_show_settings = 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[11,9]bgcolor[#99a8ba;]label[4,0;FISHING CONFIGURATION]"..
|
|
--Chance fish
|
|
"label[1.6,0.5;Chance fish]"..
|
|
"button[0,1;1,1;cfish;-1]"..
|
|
"button[1,1;1,1;cfish;-10]"..
|
|
"label[2.1,1.2;"..tostring(fishing_setting.tmp_setting["fish_chance"]).."]"..
|
|
"button[2.7,1;1,1;cfish;+10]"..
|
|
"button[3.7,1;1,1;cfish;+1]"..
|
|
--Chance shark
|
|
"label[1.5,2;Chance shark]"..
|
|
"button[0,2.5;1,1;cshark;-1]"..
|
|
"button[1,2.5;1,1;cshark;-10]"..
|
|
"label[2.1,2.7;"..tostring(fishing_setting.tmp_setting["shark_chance"]).."]"..
|
|
"button[2.7,2.5;1,1;cshark;+10]"..
|
|
"button[3.7,2.5;1,1;cshark;+1]"..
|
|
--Chance tresor
|
|
"label[1.5,3.5;Chance tresor]"..
|
|
"button[0,4.;1,1;ctresor;-1]"..
|
|
"button[1,4;1,1;ctresor;-10]"..
|
|
"label[2.1,4.2;"..tostring(fishing_setting.tmp_setting["tresor_chance"]).."]"..
|
|
"button[2.7,4;1,1;ctresor;+10]"..
|
|
"button[3.7,4;1,1;ctresor;+1]"..
|
|
--Chance worm
|
|
"label[7.5,0.5;Chance worm]"..
|
|
"button[6,1;1,1;cworm;-1]"..
|
|
"button[7,1;1,1;cworm;-10]"..
|
|
"label[8.1,1.2;"..tostring(fishing_setting.tmp_setting["worm_chance"]).."]"..
|
|
"button[8.7,1;1,1;cworm;+10]"..
|
|
"button[9.7,1;1,1;cworm;+1]"..
|
|
--Chance escape
|
|
"label[7.3,2;Chance escape]"..
|
|
"button[7,2.5;1,1;cescape;-1]"..
|
|
"label[8.1,2.7;"..tostring(fishing_setting.tmp_setting["escape_chance"]).."]"..
|
|
"button[8.7,2.5;1,1;cescape;+1]"..
|
|
--Bobber view range
|
|
"label[7.2,3.5;Bobber view range]"..
|
|
"button[7,4;1,1;bvrange;-1]"..
|
|
"label[8.1,4.2;"..tostring(fishing_setting.tmp_setting["bobber_view_range"]).."]"..
|
|
"button[8.7,4;1,1;bvrange;+1]"..
|
|
--messages display
|
|
"label[0,5.7;Display messages in chat]"..
|
|
"button[3.7,5.5;1,1;dmessages;"..tostring(fishing_setting.tmp_setting["message"]).."]"..
|
|
--poledeco
|
|
"label[0,6.5;Simple pole deco]"..
|
|
"button[3.7,6.3;1,1;poledeco;"..tostring(fishing_setting.tmp_setting["simple_deco_fishing_pole"]).."]"..
|
|
--wearout
|
|
"label[0,7.3;Poles Wear]"..
|
|
"button[3.7,7.1;1,1;wearout;"..tostring(fishing_setting.tmp_setting["wear_out"]).."]"..
|
|
--TRESOR_ENABLE
|
|
"label[6,5.7;Tresor enable]"..
|
|
"button[9.7,5.5;1,1;tresorenable;"..tostring(fishing_setting.tmp_setting["tresor_enable"]).."]"..
|
|
--NEW_WORM_SOURCE
|
|
"label[6,6.5;New worm source]"..
|
|
"button[9.7,6.3;1,1;newworm;"..tostring(fishing_setting.tmp_setting["new_worm_source"]).."]"..
|
|
--WORM_IS_MOB
|
|
"label[6,7.3;Worm is mob]"..
|
|
"button[9.7,7.1;1,1;wormmob;"..tostring(fishing_setting.tmp_setting["worm_is_mob"]).."]"..
|
|
"button_exit[0.5,8.2;1.5,1;save;Abort]"..
|
|
"button_exit[9,8.2;1.5,1;save;Ok]"
|
|
|
|
minetest.show_formspec(player_name, "fishing:settings", formspec)
|
|
end
|
|
|
|
|
|
local inc = function(value, field, min, max)
|
|
local v
|
|
if field == "+1" then
|
|
v = value + 1
|
|
elseif field == "+10" then
|
|
v = value + 10
|
|
elseif field == "+60" then
|
|
v = value + 60
|
|
elseif field == "+600" then
|
|
v = value + 600
|
|
elseif field == "-1" then
|
|
v = value - 1
|
|
elseif field == "-10" then
|
|
v = value - 10
|
|
elseif field == "-60" then
|
|
v = value - 60
|
|
elseif field == "-600" then
|
|
v = value - 600
|
|
else -- useless, prevent crash
|
|
return value
|
|
end
|
|
|
|
if v > max then
|
|
v = max
|
|
end
|
|
if v < min then
|
|
v = min
|
|
end
|
|
return v
|
|
end
|
|
|
|
|
|
local bool = function(field)
|
|
local v
|
|
if field == "true" then
|
|
v = false
|
|
else
|
|
v = true
|
|
end
|
|
return v
|
|
end
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname == "fishing:settings" 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["cfish"] then
|
|
fishing_setting.tmp_setting["fish_chance"] = inc(fishing_setting.tmp_setting["fish_chance"], fields["cfish"], 1, 100)
|
|
elseif fields["cshark"] then
|
|
fishing_setting.tmp_setting["shark_chance"] = inc(fishing_setting.tmp_setting["shark_chance"], fields["cshark"], 1, 100)
|
|
elseif fields["ctresor"] then
|
|
fishing_setting.tmp_setting["tresor_chance"] = inc(fishing_setting.tmp_setting["tresor_chance"], fields["ctresor"], 1, 100)
|
|
elseif fields["bvrange"] then
|
|
fishing_setting.tmp_setting["bobber_view_range"] = inc(fishing_setting.tmp_setting["bobber_view_range"], fields["bvrange"], 4, 20)
|
|
elseif fields["cworm"] then
|
|
fishing_setting.tmp_setting["worm_chance"] = inc(fishing_setting.tmp_setting["worm_chance"], fields["cworm"], 1, 100)
|
|
elseif fields["cescape"] then
|
|
fishing_setting.tmp_setting["escape_chance"] = inc(fishing_setting.tmp_setting["escape_chance"], fields["cescape"], 1, 30)
|
|
elseif fields["dmessages"] then
|
|
fishing_setting.tmp_setting["message"] = bool(fields["dmessages"])
|
|
elseif fields["poledeco"] then
|
|
fishing_setting.tmp_setting["simple_deco_fishing_pole"] = bool(fields["poledeco"])
|
|
elseif fields["wearout"] then
|
|
fishing_setting.tmp_setting["wear_out"] = bool(fields["wearout"])
|
|
elseif fields["tresorenable"] then
|
|
fishing_setting.tmp_setting["tresor_enable"] = bool(fields["tresorenable"])
|
|
elseif fields["newworm"] then
|
|
fishing_setting.tmp_setting["new_worm_source"] = bool(fields["newworm"])
|
|
elseif fields["wormmob"] then
|
|
fishing_setting.tmp_setting["worm_is_mob"] = bool(fields["wormmob"])
|
|
else
|
|
return
|
|
end
|
|
|
|
fishing_setting.func.on_show_settings(name)
|
|
end
|
|
end)
|
|
|
|
--function load settings from file
|
|
function fishing_setting.func.load_trophies()
|
|
local file = io.open(fishing_setting.file_trophies, "r")
|
|
fishing_setting.trophies = {}
|
|
if file then
|
|
fishing_setting.trophies = minetest.deserialize(file:read("*all"))
|
|
file:close()
|
|
if not fishing_setting.trophies or type(fishing_setting.trophies) ~= "table" then
|
|
fishing_setting.trophies = {}
|
|
end
|
|
end
|
|
end
|
|
|
|
function fishing_setting.func.save_trophies()
|
|
local input = io.open(fishing_setting.file_trophies, "w")
|
|
if input then
|
|
input:write(minetest.serialize(fishing_setting.trophies))
|
|
input:close()
|
|
else
|
|
minetest.log("action","Open failed (mode:w) of " .. fishing_setting.file_trophies)
|
|
end
|
|
end
|
|
|
|
minetest.register_on_shutdown(function()
|
|
minetest.log("action", "[fishing] Server shuts down. saving trophies table")
|
|
fishing_setting.func.save_trophies()
|
|
fishing_setting.func.save_concours()
|
|
end)
|
|
|
|
|
|
--[[
|
|
minetest.register_on_joinplayer(function(player)
|
|
local playername = player:get_player_name()
|
|
-- if fishing_setting.trophies[fish][playername] == nil then
|
|
-- fishing_setting.trophies[fish][playername] = { ["fish_raw"] = 0,["shark_raw"] = 0, ["pike_raw"] = 0, ["clownfish_raw"]= 0, ["bluefish_raw"] = 0 }
|
|
-- end
|
|
end)
|
|
--]]
|
|
|
|
function fishing_setting.func.add_to_trophies(player, fish, desc)
|
|
local player_name = player:get_player_name()
|
|
if not player_name then return end
|
|
if fish == "fish_raw" or fish == "shark_raw" or fish == "pike_raw" or fish == "clownfish_raw" or fish == "bluefish_raw" then
|
|
if fishing_setting.trophies[fish] == nil then
|
|
fishing_setting.trophies[fish] = {}
|
|
end
|
|
fishing_setting.trophies[fish][player_name] = (fishing_setting.trophies[fish][player_name] or 0) + 1
|
|
if fishing_setting.trophies[fish][player_name]%100 == 0 then
|
|
minetest.chat_send_player(player_name, fishing_setting.func.S("You win a new trophie, you have catched %s " .. fish.."."):format(fishing_setting.trophies[fish][player_name]))
|
|
local inv = player:get_inventory()
|
|
local name = "fishing:trophy_"..fish
|
|
if inv:room_for_item("main", {name=name, count=1, wear=0, metadata=""}) then
|
|
inv:add_item("main", {name=name, count=1, wear=0, metadata=""})
|
|
else
|
|
minetest.spawn_item(player:getpos(), {name=name, count=1, wear=0, metadata=""})
|
|
end
|
|
end
|
|
|
|
if fishing_setting.concours["concours"] ~= nil and fishing_setting.concours["concours"] == true then
|
|
if fishing_setting.concours[fish] == nil then
|
|
fishing_setting.concours[fish] = {}
|
|
end
|
|
fishing_setting.concours[fish][player_name] = (fishing_setting.concours[fish][player_name] or 0) + 1
|
|
minetest.chat_send_all(fishing_setting.func.S("Yeah, %s catch "..desc):format(player_name))
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
if (minetest.get_modpath("unified_inventory")) then
|
|
unified_inventory.register_button("menu_fishing", {
|
|
type = "image",
|
|
image = "fishing_fish_raw.png",
|
|
tooltip = "fishing menu configuration",
|
|
action = function(player)
|
|
local player_name = player:get_player_name()
|
|
if not player_name then return end
|
|
if minetest.check_player_privs(player_name, {server=true}) then
|
|
fishing_setting.func.on_show_settings(player_name)
|
|
else
|
|
minetest.chat_send_player(player_name, fishing_setting.func.S("You don't have the server priviledge!"))
|
|
|
|
end
|
|
|
|
end,
|
|
})
|
|
end
|
|
|
|
minetest.register_chatcommand("fishing_config", {
|
|
params = "",
|
|
description = "Display fishing configuration menu (admin only)",
|
|
privs = {server=true},
|
|
func = function(player_name, param)
|
|
if not player_name then return end
|
|
fishing_setting.func.on_show_settings(player_name)
|
|
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 = {["concours"] = false, ["duration"] = 3600}
|
|
if file then
|
|
fishing_setting.concours= minetest.deserialize(file:read("*all"))
|
|
file:close()
|
|
if settings == nil or type(settings) ~= "table" then
|
|
fishing_setting.concours = {["concours"] = false, ["duration"] = 3600}
|
|
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 = {["concours"] = (fishing_setting.concours["concours"] or false), ["duration"] = 3600, ["reset"] = ""}
|
|
end
|
|
|
|
local formspec = "size[6,6]bgcolor[#99a8ba;]label[1.8,0;FISHING CONCOURS]"..
|
|
--Time concours
|
|
"label[2,0.5;Duration]"..
|
|
"button[1,1;1,1;duration;-60]"..
|
|
"button[2,1;1,1;duration;-600]"..
|
|
"label[2.9,1.2;"..tostring(fishing_setting.tmp_setting["duration"]).."]"..
|
|
"button[3.7,1;1,1;duration;+600]"..
|
|
"button[4.7,1;1,1;duration;+60]"..
|
|
--concours enable
|
|
"label[1,2.5;concours enable]"..
|
|
"button[4.7,2.3;1,1;concours;"..tostring(fishing_setting.tmp_setting["concours"]).."]"..
|
|
--reset
|
|
"label[1,3.3;reset classements(type 'yes')]"..
|
|
"field[5,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
|
|
|
|
local function timetostr(time)
|
|
--TODO transform time in H:M:S str
|
|
|
|
|
|
|
|
return time
|
|
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
|
|
if fields["reset"] and fields["reset"]:lower() == "yes" then
|
|
fishing_setting.concours["fish_raw"] = {}
|
|
fishing_setting.concours["clownfish_raw"] = {}
|
|
fishing_setting.concours["bluefish_raw"] = {}
|
|
fishing_setting.concours["shark_raw"] = {}
|
|
fishing_setting.concours["pike_raw"] = {}
|
|
end
|
|
|
|
local progress = (fishing_setting.concours["concours"] or false)
|
|
fishing_setting.concours["duration"] = fishing_setting.tmp_setting["duration"]
|
|
fishing_setting.concours["concours"] = fishing_setting.tmp_setting["concours"]
|
|
|
|
if progress == false and fishing_setting.tmp_setting["concours"] == true then
|
|
fishing_setting.concours["concours"] = true
|
|
fishing_setting.concours["warning_said"] = false
|
|
--TODO show time in H:M:S
|
|
local time = timetostr(fishing_setting.concours["duration"])
|
|
minetest.chat_send_all(fishing_setting.func.S("Attention, Fishing contest go(duration %s)!!!"):format(time))
|
|
--TODO play sound go contest
|
|
|
|
elseif progress == true and fishing_setting.tmp_setting["concours"] == false then
|
|
fishing_setting.concours["concours"] = false
|
|
end
|
|
fishing_setting.func.save_concours()
|
|
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"])
|
|
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})
|
|
if #win >= 6 then
|
|
break
|
|
end
|
|
end
|
|
return win
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function fishing_setting.func.get_stat()
|
|
local winners= {}
|
|
for k,v in pairs(fishing_setting.concours) do
|
|
if string.find(k, "_raw") ~= nil then
|
|
if fishing_setting.concours[k] ~= nil then
|
|
winners[k] = fishing_setting.func.set_winners(fishing_setting.concours[k])
|
|
else
|
|
winners[k] = {}
|
|
end
|
|
end
|
|
end
|
|
local formspec = {"size[12,8]bgcolor[#99a8ba;]label[3.5,0;FISHING CONCOURS CLASSEMENT]"}
|
|
local X = 0
|
|
local Y
|
|
for fish, fishers in pairs(winners) do
|
|
Y = 1.4
|
|
table.insert(formspec, "label["..(X+0.4)..",0.5;"..string.gsub(fish, "_raw", ""):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.5) ..","..Y..";"..tostring(pl).."]") -- playername
|
|
end
|
|
Y = Y + 0.4
|
|
end
|
|
X = X + 2.3
|
|
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
|
|
})
|
|
|
|
local function show_result()
|
|
minetest.after(3, function()
|
|
print("debug1")
|
|
local formspec = fishing_setting.func.get_stat()
|
|
for _,player in pairs(minetest.get_connected_players()) do
|
|
local player_name = player:get_player_name()
|
|
if player_name ~= nil then
|
|
print("debug2")
|
|
minetest.show_formspec(player_name, "fishing:classement", formspec)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
minetest.register_globalstep(function(dtime)
|
|
if fishing_setting.concours["concours"] == true then
|
|
fishing_setting.concours["duration"] = fishing_setting.concours["duration"] - dtime
|
|
|
|
if fishing_setting.concours["duration"] < 30 and fishing_setting.concours["warning_said"] ~= true then
|
|
minetest.chat_send_all("WARNING, Fishing contest will finish in 30 seconds")
|
|
fishing_setting.concours["warning_said"] = true
|
|
end
|
|
if fishing_setting.concours["duration"] < 0 then
|
|
minetest.chat_send_all("End of fishing contest")
|
|
fishing_setting.concours["concours"] = false
|
|
show_result()
|
|
end
|
|
end
|
|
end)
|
|
|