Use minetest.show_formspec for button formspecs.
parent
256a8049f1
commit
80fd11d709
|
@ -21,6 +21,7 @@ end
|
|||
local function button_create(id, name, player_count, xp, pos_string, desc, builders, solo)
|
||||
local pos = minetest.string_to_pos(pos_string)
|
||||
local clean_pos = pos.x..','..pos.y..','..pos.z
|
||||
player_count = player_count or 3
|
||||
builders = builders or ''
|
||||
solo = solo or 'true'
|
||||
local formspec =
|
||||
|
@ -69,11 +70,14 @@ local function button_display(id, name, owner, player_count, xp, pos, desc)
|
|||
return formspec
|
||||
end
|
||||
|
||||
local button_claim =
|
||||
'formspec_version[3]'..
|
||||
'size[12,6]'..
|
||||
'label[4,1;Claim this button (15XP)]'..
|
||||
'button_exit[3.5,4;4,1;claim;Claim This Button]'
|
||||
local function button_claim(pos)
|
||||
formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[12,6]'..
|
||||
'label[4,1;Claim this button (15XP)]'..
|
||||
'button_exit[3.5,4;4,1;claim;Claim This Button]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_node('lobby:button_0', {
|
||||
description = 'Unconfigured Button',
|
||||
|
@ -93,6 +97,7 @@ minetest.register_node('lobby:button_0', {
|
|||
end,
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
local player_name = clicker:get_player_name()
|
||||
lobby.button_pos[player_name] = pos
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string('owner')
|
||||
local id = meta:get_string('id')
|
||||
|
@ -103,10 +108,11 @@ minetest.register_node('lobby:button_0', {
|
|||
local desc = meta:get_string('desc')
|
||||
local builders = meta:get_string('builders')
|
||||
local solo = meta:get_string('solo')
|
||||
meta:set_string('formspec', '')
|
||||
if owner == '' then
|
||||
meta:set_string('formspec', button_claim)
|
||||
minetest.show_formspec(player_name, 'lobby:button_claim', button_claim(pos))
|
||||
elseif owner == player_name or minetest.check_player_privs(clicker, {server = true}) then
|
||||
meta:set_string('formspec', button_create(id, name, player_count, xp, pos, desc, builders, solo))
|
||||
minetest.show_formspec(player_name, 'lobby:button_create', button_create(id, name, player_count, xp, pos, desc, builders, solo))
|
||||
else
|
||||
minetest.show_formspec(player_name, 'lobby:button_display', button_display(id, name, owner, player_count, xp, pos, desc))
|
||||
lobby.stat[player_name] = id
|
||||
|
@ -133,129 +139,6 @@ minetest.register_node('lobby:button_0', {
|
|||
lobby.game[name] = map_id..'_builder'
|
||||
end
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local owner = meta:get_string('owner')
|
||||
local player_name = sender:get_player_name()
|
||||
if fields ['claim'] then --Should make it so only builders can claim a button.
|
||||
if lobby.take_xp(sender, 15) then
|
||||
minetest.show_formspec(player_name, 'lobby:get_started', lobby.getting_started)
|
||||
meta:set_string('owner', player_name)
|
||||
local map_id = lobby.create_id(player_name)
|
||||
lobby.savedata.IDs[map_id] = true
|
||||
meta:set_string('id', map_id)
|
||||
local pos_string = random_pos()
|
||||
local pos = minetest.string_to_pos(pos_string)
|
||||
local run = true
|
||||
while run do
|
||||
if not minetest.is_protected(pos, sender) and run then
|
||||
minetest.load_area(pos)
|
||||
meta:set_string('pos', pos_string)
|
||||
worldedit.cube(pos, 5, 1, 5, 'color:grey_blocks', false)
|
||||
minetest.set_node(pos, {name = 'lights:block_4'})
|
||||
run = false
|
||||
end
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(player_name, 'You need more XP!')
|
||||
end
|
||||
end
|
||||
if owner == player_name or minetest.check_player_privs(sender, {server = true}) then
|
||||
local map_id = meta:get_string('id')
|
||||
if not string.find(map_id, owner) then --Using old player assigned IDs
|
||||
local map_id_new = lobby.create_id(owner)
|
||||
lobby.savedata.IDs[map_id_new] = true
|
||||
meta:set_string('id', map_id_new)
|
||||
if lobby.savedata.stats[map_id] then
|
||||
local stats = lobby.savedata.stats[map_id] or {}
|
||||
local stats_new = {}
|
||||
stats_new.solo_play = stats.solo_play or 0
|
||||
stats_new.multi_play = stats.multi_play or 0
|
||||
stats_new.winner_traitor = stats.winner_traitor or 0
|
||||
stats_new.winner_team = stats.winner_team or 0
|
||||
stats_new.player_count = stats.player_count or 0
|
||||
stats_new.max_players = stats.max_players or 0
|
||||
lobby.savedata.stats[map_id_new] = stats_new
|
||||
lobby.savedata.IDs[map_id] = nil
|
||||
lobby.savedata.stats[map_id] = nil
|
||||
lobby.savedata.data[map_id] = nil
|
||||
end
|
||||
map_id = map_id_new
|
||||
end
|
||||
if fields.solo then
|
||||
meta:set_string('solo', fields.solo)
|
||||
elseif fields ['save'] then
|
||||
meta:set_string('infotext', fields.name)
|
||||
meta:set_string('name', fields.name)
|
||||
meta:set_string('player_count', fields.player_count)
|
||||
meta:set_string('xp', fields.xp)
|
||||
meta:set_string('pos', fields.pos)
|
||||
meta:set_string('desc', fields.desc)
|
||||
meta:set_string('builders', fields.builders)
|
||||
elseif fields ['submit'] then
|
||||
meta:set_string('infotext', fields.name)
|
||||
meta:set_string('name', fields.name)
|
||||
meta:set_string('player_count', fields.player_count)
|
||||
meta:set_string('xp', fields.xp)
|
||||
meta:set_string('pos', fields.pos)
|
||||
meta:set_string('desc', fields.desc)
|
||||
meta:set_string('builders', fields.builders)
|
||||
local dist = tonumber(minetest.settings:get("map_generation_limit") or 31000)
|
||||
local x, y, z = string.match(fields.pos, "^(-?%d+),(-?%d+),(-?%d+)$")
|
||||
local pos_x = tonumber(x)
|
||||
local pos_y = tonumber(y)
|
||||
local pos_z = tonumber(z)
|
||||
local saveable = 0
|
||||
if fields.name == '' then
|
||||
minetest.chat_send_player(player_name, 'Sorry, a name is required. You can always change it later')
|
||||
saveable = 1
|
||||
end
|
||||
if pos_x > dist or pos_x < -dist or pos_y > dist or pos_y < -dist or pos_z > dist or pos_z < -dist then
|
||||
minetest.chat_send_player(player_name, 'Double check your spawn pos, values seem to be invalid.')
|
||||
saveable = 1
|
||||
end
|
||||
if not lobby.is_integer(fields.player_count ) then
|
||||
minetest.chat_send_player(player_name, 'An Integer is a whole number, your required player count is not.')
|
||||
saveable = 1
|
||||
end
|
||||
if not lobby.is_integer(fields.xp) then
|
||||
minetest.chat_send_player(player_name, 'An Integer is a whole number, your required XP amount is not.')
|
||||
saveable = 1
|
||||
end
|
||||
if saveable == 0 then
|
||||
local data = {}
|
||||
data.builders = fields.builers
|
||||
data.description = fields.desc
|
||||
data.level_pos = {x = pos_x, y = pos_y+1, z = pos_z}
|
||||
data.map_name = fields.name
|
||||
data.owner_name = owner
|
||||
data.required_players = math.max(fields.player_count, 3)
|
||||
data.xp = math.max(tonumber(fields.xp),1)
|
||||
lobby.savedata.data[map_id] = data
|
||||
lobby.savedata.name_2_id[fields.name] = map_id
|
||||
lobby.savedata.id_2_name[map_id] = fields.name
|
||||
lobby.savedata.IDs[map_id] = true
|
||||
minetest.swap_node(pos, {name = 'lobby:button_1'})
|
||||
end
|
||||
elseif fields ['discard'] then
|
||||
meta:set_string('owner', '')
|
||||
meta:set_string('infotext', 'Unconfigured/Unclaimed Button')
|
||||
meta:set_string('id', '')
|
||||
meta:set_string('name', '')
|
||||
meta:set_string('player_count', '')
|
||||
meta:set_string('xp', '')
|
||||
meta:set_string('pos', '')
|
||||
meta:set_string('desc', '')
|
||||
meta:set_string('builders', '')
|
||||
meta:set_string('solo', 'true')
|
||||
local stats = lobby.savedata.stats[map_id]
|
||||
if not stats then
|
||||
lobby.savedata.IDs[map_id] = nil
|
||||
end
|
||||
lobby.give_xp(sender, 15)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node('lobby:button_1', {
|
||||
|
@ -299,7 +182,7 @@ minetest.register_node('lobby:button_1', {
|
|||
player_attributes:set_string('mode', 'builder')
|
||||
lobby.game[name] = map_id..'_builder'
|
||||
else
|
||||
local needed_players = tonumber(meta:get_string('player_count'))
|
||||
local needed_players = game_data['required_players']
|
||||
local objs = minetest.get_objects_inside_radius(pos, 3)
|
||||
local player_count = 0
|
||||
local map_players = {}
|
||||
|
@ -410,5 +293,132 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
minetest.chat_send_player(name, 'You need to select a reason.')
|
||||
end
|
||||
end
|
||||
elseif formname == 'lobby:button_claim' then
|
||||
local name = player:get_player_name()
|
||||
if lobby.is_builder(player) then
|
||||
if lobby.take_xp(player, 15) then
|
||||
local pos = lobby.button_pos[name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
minetest.show_formspec(name, 'lobby:get_started', lobby.getting_started)
|
||||
meta:set_string('owner', name)
|
||||
local map_id = lobby.create_id(name)
|
||||
lobby.savedata.IDs[map_id] = true
|
||||
meta:set_string('id', map_id)
|
||||
local pos_string = random_pos()
|
||||
local pos = minetest.string_to_pos(pos_string)
|
||||
local run = true
|
||||
while run do
|
||||
if not minetest.is_protected(pos, player) and run then
|
||||
minetest.load_area(pos)
|
||||
meta:set_string('pos', pos_string)
|
||||
worldedit.cube(pos, 5, 1, 5, 'color:grey_blocks', false)
|
||||
minetest.set_node(pos, {name = 'lights:block_4'})
|
||||
run = false
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, 'You need more XP!')
|
||||
end
|
||||
elseif formname == 'lobby:button_create' then
|
||||
local name = player:get_player_name()
|
||||
local pos = lobby.button_pos[name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
local map_id = meta:get_string('id')
|
||||
local owner = meta:get_string('owner')
|
||||
if owner == name or minetest.check_player_privs(player, {server = true}) then
|
||||
if not string.find(map_id, owner) then --Using old player assigned IDs
|
||||
local map_id_new = lobby.create_id(owner)
|
||||
lobby.savedata.IDs[map_id_new] = true
|
||||
meta:set_string('id', map_id_new)
|
||||
if lobby.savedata.stats[map_id] then
|
||||
local stats = lobby.savedata.stats[map_id] or {}
|
||||
local stats_new = {}
|
||||
stats_new.solo_play = stats.solo_play or 0
|
||||
stats_new.multi_play = stats.multi_play or 0
|
||||
stats_new.winner_traitor = stats.winner_traitor or 0
|
||||
stats_new.winner_team = stats.winner_team or 0
|
||||
stats_new.player_count = stats.player_count or 0
|
||||
stats_new.max_players = stats.max_players or 0
|
||||
lobby.savedata.stats[map_id_new] = stats_new
|
||||
lobby.savedata.IDs[map_id] = nil
|
||||
lobby.savedata.stats[map_id] = nil
|
||||
lobby.savedata.data[map_id] = nil
|
||||
end
|
||||
map_id = map_id_new
|
||||
end
|
||||
if fields.solo then
|
||||
meta:set_string('solo', fields.solo)
|
||||
elseif fields ['save'] then
|
||||
meta:set_string('infotext', fields.name)
|
||||
meta:set_string('name', fields.name)
|
||||
meta:set_string('player_count', fields.player_count)
|
||||
meta:set_string('xp', fields.xp)
|
||||
meta:set_string('pos', fields.pos)
|
||||
meta:set_string('desc', fields.desc)
|
||||
meta:set_string('builders', fields.builders)
|
||||
elseif fields ['submit'] then
|
||||
meta:set_string('infotext', fields.name)
|
||||
meta:set_string('name', fields.name)
|
||||
meta:set_string('player_count', fields.player_count)
|
||||
meta:set_string('xp', fields.xp)
|
||||
meta:set_string('pos', fields.pos)
|
||||
meta:set_string('desc', fields.desc)
|
||||
meta:set_string('builders', fields.builders)
|
||||
local dist = tonumber(minetest.settings:get("map_generation_limit") or 31000)
|
||||
local x, y, z = string.match(fields.pos, "^(-?%d+),(-?%d+),(-?%d+)$")
|
||||
local pos_x = tonumber(x)
|
||||
local pos_y = tonumber(y)
|
||||
local pos_z = tonumber(z)
|
||||
local saveable = 0
|
||||
if fields.name == '' then
|
||||
minetest.chat_send_player(name, 'Sorry, a name is required. You can always change it later')
|
||||
saveable = 1
|
||||
end
|
||||
if pos_x > dist or pos_x < -dist or pos_y > dist or pos_y < -dist or pos_z > dist or pos_z < -dist then
|
||||
minetest.chat_send_player(name, 'Double check your spawn pos, values seem to be invalid.')
|
||||
saveable = 1
|
||||
end
|
||||
if not lobby.is_integer(fields.player_count ) then
|
||||
minetest.chat_send_player(name, 'An Integer is a whole number, your required player count is not.')
|
||||
saveable = 1
|
||||
end
|
||||
if not lobby.is_integer(fields.xp) then
|
||||
minetest.chat_send_player(name, 'An Integer is a whole number, your required XP amount is not.')
|
||||
saveable = 1
|
||||
end
|
||||
if saveable == 0 then
|
||||
local data = {}
|
||||
data.builders = fields.builers
|
||||
data.description = fields.desc
|
||||
data.level_pos = {x = pos_x, y = pos_y+1, z = pos_z}
|
||||
data.map_name = fields.name
|
||||
data.owner_name = owner
|
||||
data.required_players = math.max(fields.player_count, 3)
|
||||
data.xp = math.max(tonumber(fields.xp),1)
|
||||
lobby.savedata.data[map_id] = data
|
||||
lobby.savedata.name_2_id[fields.name] = map_id
|
||||
lobby.savedata.id_2_name[map_id] = fields.name
|
||||
lobby.savedata.IDs[map_id] = true
|
||||
minetest.swap_node(pos, {name = 'lobby:button_1'})
|
||||
end
|
||||
elseif fields ['discard'] then
|
||||
meta:set_string('owner', '')
|
||||
meta:set_string('infotext', 'Unconfigured/Unclaimed Button')
|
||||
meta:set_string('id', '')
|
||||
meta:set_string('name', '')
|
||||
meta:set_string('player_count', '')
|
||||
meta:set_string('xp', '')
|
||||
meta:set_string('pos', '')
|
||||
meta:set_string('desc', '')
|
||||
meta:set_string('builders', '')
|
||||
meta:set_string('solo', 'true')
|
||||
local stats = lobby.savedata.stats[map_id]
|
||||
if not stats then
|
||||
lobby.savedata.IDs[map_id] = nil
|
||||
end
|
||||
lobby.give_xp(player, 15)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
|
|
@ -93,16 +93,21 @@ minetest.register_chatcommand('kick', {
|
|||
local actual_votes = lobby.votes[map_id] or 0
|
||||
if not lobby.voted[name] then
|
||||
lobby.vote_timer[map_id] = 1800
|
||||
minetest.log('action', name..' just voted and reset the timer to 1800.')
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if lobby.vote_timer[map_id] == 1 then
|
||||
lobby.message_to_level(map_id, 'Voting time is over.')
|
||||
minetest.log('action', 'Voting has ended')
|
||||
lobby.vote(map_id, true)
|
||||
elseif lobby.vote_timer[map_id] == 300 then
|
||||
lobby.message_to_level(map_id, 'Thirty seconds left to vote.')
|
||||
minetest.log('action', '30 seconds left to vote.')
|
||||
elseif lobby.vote_timer[map_id] == 600 then
|
||||
lobby.message_to_level(map_id, 'One minute left to vote.')
|
||||
minetest.log('action', '60 seconds left to vote.')
|
||||
elseif lobby.vote_timer[map_id] == 1200 then
|
||||
lobby.message_to_level(map_id, 'Two minutes left to vote')
|
||||
minetest.log('action', '120 seconds left to vote.')
|
||||
end
|
||||
if lobby.vote_timer[map_id] >= 0 then
|
||||
lobby.vote_timer[map_id] = lobby.vote_timer[map_id] - 1
|
||||
|
@ -133,6 +138,7 @@ minetest.register_chatcommand('skip', {
|
|||
if map_id ~= 'lobby' then
|
||||
local actual_votes = lobby.votes[map_id] or 0
|
||||
if not lobby.voted[name] then
|
||||
minetest.log('action', name..' just skipped voting and reset the timer to 1800.')
|
||||
lobby.vote_timer[map_id] = 1800
|
||||
minetest.chat_send_player(name, 'You skipped voting this round.')
|
||||
lobby.voted[name] = true
|
||||
|
|
|
@ -12,7 +12,8 @@ lobby.spawn_pos = {x=29996, y=-4.5, z=30041.5}
|
|||
lobby.spawn_pos = minetest.setting_get_pos('traitor_lobby_spawn') or lobby.spawn_pos
|
||||
lobby.sabotage = {}
|
||||
lobby.sabotage_level = {}
|
||||
lobby.stat = {}
|
||||
lobby.stat = {} --stores what map_id a player is looking at for viewing stats.
|
||||
lobby.button_pos = {} --stores the pos of a button a player is viewing formspecs of.
|
||||
--Yes I know these table names are not very clear.
|
||||
|
||||
--[[
|
||||
|
|
|
@ -94,16 +94,16 @@ function lobby.server_stats()
|
|||
local stats = lobby.savedata.stats['server']
|
||||
local max_players = stats.max_players
|
||||
local max_id = stats.max_players_id
|
||||
local max_name = lobby.savedata.id_2_name[max_id]
|
||||
local max_name = lobby.savedata.id_2_name[max_id] or ''
|
||||
local most_players = stats.most_played
|
||||
local most_id = stats.most_played_id
|
||||
local most_name = lobby.savedata.id_2_name[most_id]
|
||||
local most_name = lobby.savedata.id_2_name[most_id] or ''
|
||||
local traitor_wins = stats.traitor_wins
|
||||
local traitor_id = stats.traitor_wins_id
|
||||
local traitor_name = lobby.savedata.id_2_name[traitor_id]
|
||||
local traitor_name = lobby.savedata.id_2_name[traitor_id] or ''
|
||||
local team_wins = stats.team_wins
|
||||
local team_id = stats.team_wins_id
|
||||
local team_name = lobby.savedata.id_2_name[team_id]
|
||||
local team_name = lobby.savedata.id_2_name[team_id] or ''
|
||||
local formspec =
|
||||
'textarea[.5,5.25;15,3.25;;;Serverwide Stats and Rankings:\n'..
|
||||
max_name..' has the highest player count of any level with '..max_players..' playing at once.\n'..
|
||||
|
|
Loading…
Reference in New Issue