Updated tasks to use sabotage data.
parent
40e5dfe52b
commit
d11aef2922
|
@ -310,12 +310,15 @@ minetest.register_node('lobby:button_1', {
|
|||
if player_count >= needed_players then
|
||||
if lobby.map[map_id] == 0 or lobby.map[map_id] == nil then
|
||||
minetest.chat_send_player(name, 'you can start the game!')
|
||||
minetest.log('action', name..' just started a game on '..map_id)
|
||||
lobby.map[map_id] = player_count
|
||||
lobby.update_stats(map_id, 'player', '', player_count)
|
||||
local traitor = math.random(1, player_count)
|
||||
lobby.xp[map_id] = 0
|
||||
lobby.votes[map_id] = 0
|
||||
lobby.corpses[map_id] = {}
|
||||
lobby.sabotage[map_id] = false
|
||||
lobby.sabotage_level[map_id] = 0
|
||||
for i=1,player_count do
|
||||
minetest.chat_send_player(map_players[i], 'Hold tight, loading the level.')
|
||||
local player = minetest.get_player_by_name(map_players[i])
|
||||
|
|
|
@ -189,8 +189,10 @@ minetest.register_chatcommand('checkxp', {
|
|||
local map_id = lobby.game[name]
|
||||
if map_id ~= 'lobby' then
|
||||
local xp = lobby.xp[map_id]
|
||||
local game_data = lobby.savedata.data[map_id]
|
||||
local required_xp = game_data['xp']
|
||||
if xp then
|
||||
minetest.chat_send_player(name, 'Currently have '..xp..' xp on this level.')
|
||||
minetest.chat_send_player(name, 'You currently have '..xp..' xp on this level. A total of '..required_xp..' is needed to defeat the traitor.')
|
||||
else
|
||||
minetest.chat_send_player(name, 'Welp, no XP here?')
|
||||
end
|
||||
|
|
|
@ -10,6 +10,8 @@ lobby.corpses = {}
|
|||
lobby.vote_timer = {}
|
||||
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 = {}
|
||||
--Yes I know these table names are not very clear.
|
||||
|
||||
|
|
|
@ -95,6 +95,7 @@ minetest.register_on_respawnplayer(function(player)
|
|||
local player_attributes = player:get_meta()
|
||||
local pos = minetest.string_to_pos(player_attributes:get_string('spawn_pos'))
|
||||
local map_id = lobby.game[name]
|
||||
minetest.log('action', name..' just respawned on '..map_id)
|
||||
local mode = player_attributes:get_string('mode')
|
||||
player:set_armor_groups({immortal=1})
|
||||
minetest.chat_send_player(name, 'You are immortal for 10 seconds.')
|
||||
|
@ -103,7 +104,8 @@ minetest.register_on_respawnplayer(function(player)
|
|||
minetest.chat_send_player(name, 'Immortallity has ended.')
|
||||
end)
|
||||
if map_id ~= 'lobby' and mode == 'ghost' then
|
||||
if lobby.map[map_id] and lobby.map[map_id] > 1 then
|
||||
local real_id = string.sub(map_id, 0, -7)
|
||||
if lobby.map[real_id] and lobby.map[real_id] > 1 then
|
||||
player:set_pos(pos)
|
||||
return true
|
||||
else
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
function sabotage.traitor_formspec(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local timer = meta:get_int('timer') or 120
|
||||
local timer = meta:get_int('timer') or 0
|
||||
local chance = meta:get_int('chance') or 1
|
||||
local damage = meta:get_int('damage') or 1
|
||||
local formspec =
|
||||
|
@ -9,8 +9,8 @@ function sabotage.traitor_formspec(pos)
|
|||
'textarea[.5,.5;9,6;;;Sabotage the crew, and risk life and limb. '..
|
||||
'If the crew doesn\'t fix it in time you win, but you could die sabotaging.\n'..
|
||||
'If you fail in sabotaging you could take up '..damage..' damage. '..
|
||||
'The other players will be alerted and have time to attempt to \'repair\' the node, '..
|
||||
'if they are successful they win the round, otherwise you win!'..
|
||||
'If the Failure Timer is greater than 30 you will win or loose depending on if the crew \'repairs\' the node.'..
|
||||
'If they repair the node in time they win, but if they don\'t you win!'..
|
||||
'\n\nRisk Factor: '..chance..'/10 \nPotential Health Impact: '..damage..' \nFailure Timer: '..timer..' seconds]'..
|
||||
'button_exit[3.5,7;3,.75;sabotage;Do It]'
|
||||
return formspec
|
||||
|
@ -22,20 +22,26 @@ function sabotage.builder_formspec(pos)
|
|||
local chance = meta:get_int('chance') or 1
|
||||
local damage = meta:get_int('damage') or 1
|
||||
local alert = meta:get_string('alert') or ''
|
||||
local level = meta:get_int('level') or 0
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[16,9]'..
|
||||
'textarea[1,1;14,4;;;Sabotaging is a risky business, the traitor can fail and take damage. '..
|
||||
'Chance is the probability of failure when attempting to sabotage. (1-10 Traitor\'s luck level comes in play here.)'..
|
||||
'Damage is the MAX amount of damage the traitor will incur. Keep in mind the default health level is 20.'..
|
||||
'Timer is the amount of time the crew is given to \'repair\' the sabotaged node before the traitor wins the level. Must be over 30 seconds.\n'..
|
||||
'Alert text will be sent to all players on the level, \n'..
|
||||
'and should include something to let them know where/what was sabotaged and needs to be fixed. \n'..
|
||||
'This will be a chat message. The node description will also be included in the HUD display.]'..
|
||||
'textarea[1,1;14,3.5;;;Sabotaging is a risky business, the traitor can fail and take damage. '..
|
||||
'Chance is the probability of failure when attempting to sabotage. (1-10 Traitor\'s luck level comes in play here.)\n'..
|
||||
'Damage is the MAX amount of damage the traitor will incur. Keep in mind the default health level is 20.\n'..
|
||||
'Timer is the amount of time the crew is given to \'repair\' the sabotaged node. Must be over 30 seconds. '..
|
||||
'Set below 30 seconds to not use a timer. Effect will last until crew repairs it.\n'..
|
||||
'Alert text will be sent to all players on the level, '..
|
||||
'and should include something to let them know where/what was sabotaged and needs to be fixed.\n'..
|
||||
'This will be a chat message. The node description will also be included in the HUD display.\n'..
|
||||
'Sabotage level controls which tasks can be completed, or nodes can be interacted with. '..
|
||||
'Sabotage can be in levels 1-4, configurable nodes can have levels defined, if the level is BELOW the sabotage level it can still be interacted with. '..
|
||||
'Currently this is in BETA, and many nodes do not care about this data.]'..
|
||||
'textarea[1,5;14,1;alert;Alert Text:;'..alert..']'..
|
||||
'field[1,6.5;2.5,.75;chance;Chance:;'..chance..']'..
|
||||
'field[6.75,6.5;2.5,.75;damage;Damage:;'..damage..']'..
|
||||
'field[12.5,6.5;2.5,.75;timer;Timer:;'..timer..']'..
|
||||
'field[12.5,6.5;2.5,.75;timer_input;Timer:;'..timer..']'..
|
||||
'field[14,6.5;2.5,.75;level;Sabotage level:;'..level..']'..
|
||||
'button_exit[6.5,7.5;3,1;save;Save]'
|
||||
return formspec
|
||||
end
|
||||
|
|
|
@ -1,49 +1,67 @@
|
|||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = player:get_player_name()
|
||||
local map_id = lobby.game[name]
|
||||
if formname == 'sabotage:traitor' then
|
||||
local pos = sabotage.player_pos[name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.sabotage then
|
||||
local chance = meta:get_int('chance') or 1
|
||||
local damage = meta:get_int('damage') or 1
|
||||
local player_attributes = player:get_meta()
|
||||
local luck = player_attributes:get_int('luck')
|
||||
if math.random(10) + luck >= chance then
|
||||
local hurt = math.random(damage)
|
||||
local health = player:get_hp()
|
||||
local new_health = health - hurt
|
||||
player:set_hp(new_health)
|
||||
end
|
||||
if math.random(10) + luck >= chance then
|
||||
local node = minetest.get_node(pos).name
|
||||
local def = minetest.registered_nodes[node]
|
||||
local desc = def.description
|
||||
local map_id = lobby.game[name]
|
||||
meta:set_string('traitor', name)
|
||||
meta:set_string('map_id', map_id)
|
||||
meta:set_string('sabotaged', 'true')
|
||||
local time = meta:get_int('timer')
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
local alert = meta:get_string('alert')
|
||||
timer:start(time)
|
||||
lobby.message_to_level(map_id, 'Warning!!! Level has been sabotaged. Proceed with caution!!!')
|
||||
lobby.message_to_level(map_id, alert)
|
||||
minetest.chat_send_player(name, 'You dirty dog, you just doomed the lives of all other players.')
|
||||
sabotage.show_hud(map_id, time, desc)
|
||||
sabotage.timer[map_id] = time
|
||||
local sabotaged = lobby.sabotage[map_id]
|
||||
if sabotaged == true then
|
||||
minetest.chat_send_player(name, 'Sorry you can only sabotage one item at a time currently.')
|
||||
else
|
||||
local chance = meta:get_int('chance') or 1
|
||||
local damage = meta:get_int('damage') or 1
|
||||
local level = meta:get_int('level') or 0
|
||||
local player_attributes = player:get_meta()
|
||||
local luck = player_attributes:get_int('luck')
|
||||
if math.random(10) + luck >= chance then
|
||||
local hurt = math.random(damage)
|
||||
local health = player:get_hp()
|
||||
local new_health = health - hurt
|
||||
player:set_hp(new_health)
|
||||
end
|
||||
if math.random(10) + luck >= chance then
|
||||
local node = minetest.get_node(pos).name
|
||||
local def = minetest.registered_nodes[node]
|
||||
local desc = def.description
|
||||
meta:set_string('traitor', name)
|
||||
meta:set_string('map_id', map_id)
|
||||
meta:set_string('sabotaged', 'true')
|
||||
lobby.sabotage[map_id] = true
|
||||
local time = meta:get_int('timer')
|
||||
if time > 29 then
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(time)
|
||||
sabotage.show_hud_timed(map_id, time, desc)
|
||||
sabotage.timer[map_id] = time
|
||||
elseif time < 30 then
|
||||
sabotage.show_hud(map_id, desc)
|
||||
end
|
||||
local alert = meta:get_string('alert')
|
||||
local level = meta:get_int('level') or 0
|
||||
lobby.message_to_level(map_id, 'Warning!!! Level has been sabotaged. Proceed with caution!!!') --needs changing
|
||||
lobby.message_to_level(map_id, alert)
|
||||
minetest.chat_send_player(name, 'You dirty dog, you just doomed the lives of all other players.') --needs changing
|
||||
lobby.sabotage_level[map_id] = level
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif formname == 'sabotage:builder' then
|
||||
local pos = sabotage.player_pos[name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.save then
|
||||
local timer = math.max((tonumber(fields.timer) or 30), 30)
|
||||
local chance = math.min((fields.chance or 2), 10)
|
||||
local damage = fields.damage or 1
|
||||
local timer = tonumber(fields.timer_input) or 0
|
||||
if timer < 30 then
|
||||
timer = 0
|
||||
end
|
||||
local chance = math.min((tonumber(fields.chance) or 2), 10)
|
||||
local damage = tonumber(fields.damage) or 1
|
||||
local alert = fields.alert or ''
|
||||
local level = math.min((tonumber(fields.level) or 0), 4)
|
||||
meta:set_int('timer', timer)
|
||||
meta:set_int('chance', chance)
|
||||
meta:set_int('damage', damage)
|
||||
meta:set_int('level', level)
|
||||
meta:set_string('sabotaged', 'false')
|
||||
meta:set_string('alert', alert)
|
||||
end
|
||||
|
@ -62,12 +80,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
player:set_hp(new_health)
|
||||
end
|
||||
if math.random(10) + luck >= chance then
|
||||
local map_id = lobby.game[name]
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
local time = meta:get_int('timer')
|
||||
sabotage.clear_hud(map_id)
|
||||
meta:set_string('sabotaged', 'false')
|
||||
timer:stop()
|
||||
lobby.team_win(map_id)
|
||||
lobby.sabotage_level[map_id] = 0
|
||||
lobby.sabotage[map_id] = false
|
||||
if time > 29 then
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:stop()
|
||||
lobby.team_win(map_id)
|
||||
elseif time < 30 then
|
||||
local node = minetest.get_node(pos).name
|
||||
local def = minetest.registered_nodes[node]
|
||||
local desc = def.description
|
||||
lobby.message_to_level(map_id, name..' just fixed '..desc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
function sabotage.show_hud(map_id, timer, desc)
|
||||
function sabotage.show_hud_timed(map_id, timer, desc)
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
if lobby.game[name] == map_id then
|
||||
|
@ -40,15 +40,18 @@ function sabotage.clear_hud(map_id)
|
|||
local name = player:get_player_name()
|
||||
if lobby.game[name] == map_id then
|
||||
local idx = sabotage.hud[name]
|
||||
player:hud_remove(idx.title)
|
||||
player:hud_remove(idx.timer)
|
||||
player:hud_remove(idx.desc)
|
||||
for key,value in pairs(idx) do
|
||||
player:hud_remove(value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function sabotage.update_hud(map_id)
|
||||
local time = sabotage.timer[map_id] - 1
|
||||
if time < 0 then
|
||||
return
|
||||
end
|
||||
sabotage.timer[map_id] = time
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
|
@ -57,9 +60,33 @@ function sabotage.update_hud(map_id)
|
|||
player:hud_change(idx.timer, 'text', time..' seconds')
|
||||
end
|
||||
end
|
||||
if time > 0 then
|
||||
minetest.after(1, function()
|
||||
sabotage.update_hud(map_id)
|
||||
end)
|
||||
minetest.after(1, function()
|
||||
sabotage.update_hud(map_id)
|
||||
end)
|
||||
end
|
||||
|
||||
function sabotage.show_hud(map_id, desc)
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local name = player:get_player_name()
|
||||
if lobby.game[name] == map_id then
|
||||
sabotage.hud[name] = {
|
||||
desc = player:hud_add({
|
||||
hud_elem_type = 'text',
|
||||
position = {x = 1, y = 0.125},
|
||||
offset = {x = -20, y = -20},
|
||||
text = 'Find '..desc,
|
||||
alignment = {x = -1, y = 0},
|
||||
scale = {x = 100, y = 100},
|
||||
}),
|
||||
title = player:hud_add({
|
||||
hud_elem_type = 'text',
|
||||
position = {x = 1, y = 0.125},
|
||||
offset = {x = -20, y = 0},
|
||||
text = 'Items still require repairs!!!',
|
||||
alignment = {x = -1, y = 0},
|
||||
scale = {x = 100, y = 100},
|
||||
}),
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,7 @@ sabotage = {}
|
|||
sabotage.player_pos = {}
|
||||
sabotage.hud = {}
|
||||
sabotage.timer = {}
|
||||
sabotage.level = {}
|
||||
|
||||
dofile(minetest.get_modpath('sabotage')..'/formspecs.lua')
|
||||
dofile(minetest.get_modpath('sabotage')..'/functions.lua')
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
--[[minetest.register_node('sabotage:test', {
|
||||
minetest.register_node('sabotage:test', {
|
||||
description = 'Sabotage Testing',
|
||||
tiles = {'sabotage_test.png'},
|
||||
groups = {breakable=1, not_in_creative_inventory=1},
|
||||
groups = {breakable=1, sabotage=1, not_in_creative_inventory=1},
|
||||
on_rightclick = sabotage.on_rightclick,
|
||||
on_timer = sabotage.on_timer
|
||||
})
|
||||
]]
|
||||
|
|
|
@ -17,7 +17,8 @@ sfinv.register_page('sfinv:help', {
|
|||
local mode = player_attributes:get_string('mode')
|
||||
if not creative.is_enabled_for(player:get_player_name()) then
|
||||
return sfinv.make_formspec(player, context,
|
||||
'textarea[.25,0;2,2;;;Player Stats:\n XP: '..xp..'\n HP: '..health..'\n Luck: '..luck..']'..
|
||||
'textarea[.25,0;2,3;;;Player Stats:\n XP: '..xp..'\n HP: '..health..'\n Luck: '..luck..'\n'..
|
||||
'Playing as:\n '..mode..']'..
|
||||
'textarea[2,0;6.5,5.5;;; Traitor is a game based on Among Us. '..
|
||||
'Your goal is to vote out the traitor if you are not the traitor, or to kill all the other players if you are the traitor. '..
|
||||
'Visit the shop to buy upgrades, privileges, and at some point cosmetics!\n\n'..
|
||||
|
@ -25,7 +26,8 @@ sfinv.register_page('sfinv:help', {
|
|||
, true)
|
||||
else
|
||||
return sfinv.make_formspec(player, context,
|
||||
'textarea[.25,0;2,2;;;Player Stats:\n XP: '..xp..'\n HP: '..health..'\n Luck: '..luck..']'..
|
||||
'textarea[.25,0;2,3;;;Player Stats:\n XP: '..xp..'\n HP: '..health..'\n Luck: '..luck..'\n'..
|
||||
'Playing as:\n '..mode..']'..
|
||||
'textarea[2,0;6.5,10.5;;; As a builder you have the ability to create your own levels, individually or collaboratively with other builders. '..
|
||||
'Build any size and with any theme, your imagination is the only limit. (Contact the admin if you need specific nodes/tasks.) '..
|
||||
'The spawn area on the level needs to be at minimum 5x5 to prevent players from spawning inside of objects or outside of the map.\n\n'..
|
||||
|
|
|
@ -77,6 +77,7 @@ minetest.register_node('tasks:campfire_1', {
|
|||
meta:set_int('time_min', 240)
|
||||
meta:set_int('time_max', 600)
|
||||
meta:set_int('xp', 1)
|
||||
meta:set_int('level', 0)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
|
|
|
@ -31,8 +31,21 @@ minetest.register_node('tasks:code_0', {
|
|||
light_source = 14,
|
||||
selection_box = box,
|
||||
collision_box = box,
|
||||
on_construct = tasks.on_contruct,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int('time_min', 240)
|
||||
meta:set_int('time_max', 600)
|
||||
meta:set_int('xp', 1)
|
||||
meta:set_int('level', 0)
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local min = meta:get_int('time_min') or 30
|
||||
local max = meta:get_int('time_max') or 60
|
||||
local random_number = math.random(min,max)
|
||||
timer:start(random_number)
|
||||
end,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
minetest.swap_node(pos, {name = 'tasks:code_1', param2 = node.param2})
|
||||
|
|
|
@ -14,6 +14,8 @@ minetest.register_tool('tasks:configurator', {
|
|||
doors.lock(pos, name)
|
||||
elseif minetest.get_item_group(node.name, 'stash') > 0 then
|
||||
tasks.stash(pos, name)
|
||||
elseif minetest.get_item_group(node.name, 'sabotage') > 0 then
|
||||
sabotage.on_punch(pos, node, user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -27,7 +29,8 @@ function tasks.configure(pos, name)
|
|||
local time_min = meta:get_int('time_min') or 60
|
||||
local time_max = meta:get_int('time_max') or 120
|
||||
local xp = meta:get_int('xp') or 5
|
||||
minetest.show_formspec(name, 'tasks:configuration', tasks.configuration_formspec(infotext, time_min, time_max, xp))
|
||||
local level = meta:get_int('level') or 4
|
||||
minetest.show_formspec(name, 'tasks:configuration', tasks.configuration_formspec(infotext, time_min, time_max, xp, level))
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
@ -35,13 +38,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
if formname == 'tasks:configuration' then
|
||||
if fields.save then
|
||||
if tasks.is_integer(fields.time_min) and tasks.is_integer(fields.time_max) and tasks.is_integer(fields.xp)
|
||||
and tonumber(fields.time_max) >= tonumber(fields.time_min) then
|
||||
and tonumber(fields.time_max) >= tonumber(fields.time_min) and tasks.is_integer(fields.level) then
|
||||
local pos = tasks.player_config[name]
|
||||
local meta = minetest.get_meta(pos)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
meta:set_int('time_min', math.max(fields.time_min,5))
|
||||
meta:set_int('time_max', math.max(fields.time_max,20))
|
||||
meta:set_int('xp', fields.xp)
|
||||
meta:set_int('level', math.min(fields.level, 4))
|
||||
meta:set_string('infotext', fields.infotext)
|
||||
local random_number = math.random(fields.time_min, fields.time_max)
|
||||
timer:start(random_number)
|
||||
|
@ -52,18 +56,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end
|
||||
end)
|
||||
|
||||
function tasks.configuration_formspec(infotext, time_min, time_max, xp)
|
||||
function tasks.configuration_formspec(infotext, time_min, time_max, xp, level)
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[8,6]'..
|
||||
'textarea[.5,.5;7,2;;;Set the minimum and maximum time a task will run before breaking down, and the XP to be awarded upon completion of the task. '..
|
||||
'Minimum time must be 5 or more seconds, and max time must be 20 or more seconds. Whole numbers only.\n'..
|
||||
'Pro-tip, set the min and max times the same to remove randomization.]'..
|
||||
'Pro-tip, set the min and max times the same to remove randomization.\n'..
|
||||
'You can ignore the level input if you aren\'t adding a node you can sabotage.]'..
|
||||
'field[1,3;6,.5;infotext;Infotext;'..infotext..']'..
|
||||
'field[1,4;2,.5;time_min;Minimum time;'..time_min..']'..
|
||||
'field[5,4;2,.5;time_max;Maximum time;'..time_max..']'..
|
||||
'field[1,5;2,.5;xp;XP;'..xp..']'..
|
||||
'button_exit[5,5;2,.5;save;Submit]'
|
||||
'field[1,5;1.5,.5;xp;XP;'..xp..']'..
|
||||
'field[3.25,5;1.5,.5;level;Level;'..level..']'..
|
||||
'button_exit[5.5,5;1.5,.5;save;Submit]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
|
|
|
@ -2,14 +2,18 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;This reactor is performing at peak efficiency.]'
|
||||
|
||||
local formspec_bad =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;Looks like something is broke.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;Looks like something is broke.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_node('tasks:engine_0_on',{
|
||||
description = 'Arc Reactor',
|
||||
|
@ -29,18 +33,16 @@ minetest.register_node('tasks:engine_0_on',{
|
|||
groups = {breakable = 1, tasks=1, plays_sound=1},
|
||||
_sound = 'tasks_engine_0_run',
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Arc Reactor')
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Arc Reactor')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
minetest.sound_play('tasks_engine_0_stop', {pos = pos, gain = 1, max_hear_distance = 10})
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
minetest.after(11, function()
|
||||
minetest.swap_node(pos, {name = 'tasks:engine_0_off', param2 = node.param2})
|
||||
|
@ -60,15 +62,10 @@ minetest.register_node('tasks:engine_0_off',{
|
|||
light_source = 2,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:engine_0_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:gear_req', count = 4}) then
|
||||
player_inv:add_item('main', 'tasks:gear_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:gear_req',
|
||||
req_count = 4,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -93,7 +90,7 @@ minetest.register_node('tasks:engine_0_off',{
|
|||
inv:set_stack('part', 1, '')
|
||||
minetest.sound_play('tasks_engine_0_start', {pos = pos, gain = 1, max_hear_distance = 10})
|
||||
minetest.swap_node(pos, {name = 'tasks:engine_0_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -2,14 +2,18 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;This plasma accelerator is performing at peak efficiency.]'
|
||||
|
||||
local formspec_bad =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;Looks like something is broke.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;Looks like something is broke.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_node('tasks:engine_1_on',{
|
||||
description = 'Plasma Accelerator',
|
||||
|
@ -28,18 +32,16 @@ minetest.register_node('tasks:engine_1_on',{
|
|||
_sound = 'tasks_engine_1_run',
|
||||
groups = {breakable = 1, tasks=1, plays_sound=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Plasma Accelerator')
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Plasma Accelerator')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
minetest.sound_play('tasks_engine_1_stop', {pos = pos, gain = 1, max_hear_distance = 5})
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
minetest.after(5, function()
|
||||
minetest.swap_node(pos, {name = 'tasks:engine_1_off', param2 = node.param2})
|
||||
|
@ -58,15 +60,10 @@ minetest.register_node('tasks:engine_1_off',{
|
|||
light_source = 2,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:engine_1_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:plasma_core_req', count = 4}) then
|
||||
player_inv:add_item('main', 'tasks:plasma_core_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:plasma_core_req',
|
||||
req_count = 4,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -91,7 +88,7 @@ minetest.register_node('tasks:engine_1_off',{
|
|||
inv:set_stack('part', 1, '')
|
||||
minetest.sound_play('tasks_engine_1_start', {pos = pos, gain = 1, max_hear_distance = 10})
|
||||
minetest.swap_node(pos, {name = 'tasks:engine_1_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -5,7 +5,9 @@ minetest.register_node('tasks:example_0', { --This node is inactive, so somebody
|
|||
tiles = {name='task_1.png'},
|
||||
groups = {breakable=1, not_in_creative_inventory=1, tasks=1},
|
||||
light_source = 14,
|
||||
on_construct = tasks.on_construct,
|
||||
on_construct = function(pos)
|
||||
tasks.on_construct(pos, 'infotext')
|
||||
end,
|
||||
on_timer = function(pos)
|
||||
local this_node = minetest.get_node(pos)
|
||||
minetest.swap_node(pos, {name = 'tasks:example_1', param2 = this_node.param2})
|
||||
|
|
|
@ -2,16 +2,20 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;Working Fine.]'
|
||||
|
||||
local formspec_bad =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;Shields down!!!\nNew Quantum Coil Needed ASAP.]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'..
|
||||
'image[8,1.5;1,1;tasks_quantum_coil_line.png]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;Shields down!!!\nNew Quantum Coil Needed ASAP.]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'..
|
||||
'image[8,1.5;1,1;tasks_quantum_coil_line.png]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
local on_box = {
|
||||
type = 'fixed',
|
||||
|
@ -36,23 +40,17 @@ minetest.register_node('tasks:forcefield_gen_on',{
|
|||
collision_box = on_box,
|
||||
groups = {breakable = 1, tasks=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Forcefield Generator')
|
||||
meta:set_int('time_min', 300)
|
||||
meta:set_int('time_max', 600)
|
||||
meta:set_int('xp', 10)
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Forcefield Generator')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
minetest.swap_node(pos, {name = 'tasks:forcefield_gen_off', param2 = node.param2})
|
||||
--minetest.sound_play('tasks_smoke_alarm_chirp', {pos = pos, gain = 2, max_hear_distance = 14})
|
||||
end,
|
||||
})
|
||||
|
||||
|
@ -67,15 +65,10 @@ minetest.register_node('tasks:forcefield_gen_off',{
|
|||
collision_box = off_box,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:forcefield_gen_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:quantum_coil_req', count = 2}) then
|
||||
player_inv:add_item('main', 'tasks:quantum_coil_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:quantum_coil_req',
|
||||
req_count = 2,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if listname == 'part' then
|
||||
|
@ -105,7 +98,7 @@ minetest.register_node('tasks:forcefield_gen_off',{
|
|||
local infotext = string.sub(meta:get_string('infotext'), 1, -17)
|
||||
inv:set_stack('part', 1, '')
|
||||
minetest.swap_node(pos, {name = 'tasks:forcefield_gen_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -33,6 +33,7 @@ function tasks.add_xp(pos, node, puncher, swap_to) --This function shouldn't be
|
|||
lobby.xp[map_id] = lobby.xp[map_id] + earned_xp
|
||||
local needed_xp = game_data['xp'] - lobby.xp[map_id]
|
||||
minetest.chat_send_player(name, 'You just earned '..earned_xp..' XP for your team.\nYou need '..needed_xp..' more XP to defeat the imposter.')
|
||||
minetest.log('action', map_id..': Gained '..xp..' still '..needed_xp..' required to complete leve.')
|
||||
tasks.check_xp(map_id, needed_xp)
|
||||
else
|
||||
lobby.give_xp(puncher, 1)
|
||||
|
@ -63,6 +64,7 @@ function tasks.only_add_xp(xp, name) -- This function only adds XP, you are resp
|
|||
lobby.xp[map_id] = lobby.xp[map_id] + xp
|
||||
local needed_xp = game_data['xp'] - lobby.xp[map_id]
|
||||
minetest.chat_send_player(name, 'You just earned '..xp..' XP for your team.\nYou need '..needed_xp..' more XP to defeat the imposter.')
|
||||
minetest.log('action', map_id..': Gained '..xp..' still '..needed_xp..' required to complete leve.')
|
||||
tasks.check_xp(map_id, needed_xp)
|
||||
else
|
||||
lobby.give_xp(player, 1)
|
||||
|
@ -75,22 +77,40 @@ function tasks.only_add_xp(xp, name) -- This function only adds XP, you are resp
|
|||
end
|
||||
end
|
||||
|
||||
function tasks.right_click(pos, node, clicker)
|
||||
function tasks.right_click_on(pos, node, clicker, formspec)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local min = meta:get_int('time_min') or 30
|
||||
local max = meta:get_int('time_max') or 60
|
||||
local random_number = math.random(min,max)
|
||||
timer:start(random_number)
|
||||
minetest.show_formspec(clicker:get_player_name(), 'tasks:good', formspec)
|
||||
meta:set_string('formspec', '')
|
||||
end
|
||||
|
||||
function tasks.on_construct(pos)
|
||||
function tasks.right_click_off(pos, node, clicker, formspec)
|
||||
local name = clicker:get_player_name()
|
||||
local map_id = lobby.game[name]
|
||||
local sabotage_level = lobby.sabotage_level[map_id] or 0
|
||||
local meta = minetest.get_meta(pos)
|
||||
local level = meta:get_int('level') or 0
|
||||
if level >= sabotage_level then
|
||||
tasks.player_config[name] = pos
|
||||
minetest.show_formspec(name, 'tasks:part_req_form', formspec)
|
||||
else
|
||||
minetest.chat_send_player(name, 'level is currently sabotaged, and you can\'t do this now.')
|
||||
end
|
||||
end
|
||||
|
||||
function tasks.on_construct(pos, infotext)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('part', 1)
|
||||
meta:set_string('infotext', infotext)
|
||||
meta:set_int('time_min', 30)
|
||||
meta:set_int('time_max', 90)
|
||||
meta:set_int('xp', 5)
|
||||
meta:set_int('level', 0)
|
||||
end
|
||||
|
||||
function tasks.is_integer(input)
|
||||
|
@ -110,3 +130,22 @@ function tasks.valid_input(string)
|
|||
return true
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = player:get_player_name()
|
||||
if formname == 'tasks:part_req_form'then
|
||||
if fields.gimme then
|
||||
local pos = tasks.player_config[name]
|
||||
local node = minetest.get_node(pos).name
|
||||
local def = minetest.registered_nodes[node]
|
||||
local item = def.req_form
|
||||
local max = def.req_count
|
||||
local player_inv = player:get_inventory()
|
||||
if not player_inv:contains_item('main', {name = item, count = max}) then
|
||||
player_inv:add_item('main', item)
|
||||
else
|
||||
minetest.chat_send_player(name, 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
|
|
@ -2,16 +2,20 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;Paper stock OK.]'
|
||||
|
||||
local formspec_bad =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;No paper!\nPrinting halted!]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'..
|
||||
'image[8,1.5;1,1;tasks_paper_stack_line.png]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;No paper!\nPrinting halted!]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'..
|
||||
'image[8,1.5;1,1;tasks_paper_stack_line.png]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
local box = {
|
||||
type = 'fixed',
|
||||
|
@ -30,20 +34,15 @@ minetest.register_node('tasks:printing_press_on',{
|
|||
collision_box = box,
|
||||
groups = {breakable = 1, tasks=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Printing Press')
|
||||
meta:set_int('time_min', 300)
|
||||
meta:set_int('time_max', 600)
|
||||
meta:set_int('xp', 10)
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Printing Press')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs paper!)')
|
||||
minetest.swap_node(pos, {name = 'tasks:printing_press_off', param2 = node.param2})
|
||||
end,
|
||||
|
@ -60,15 +59,10 @@ minetest.register_node('tasks:printing_press_off',{
|
|||
collision_box = box,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:printing_press_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:paper_stack_req', count = 1}) then
|
||||
player_inv:add_item('main', 'tasks:paper_stack_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:paper_stack_req',
|
||||
req_count = 1,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -92,7 +86,7 @@ minetest.register_node('tasks:printing_press_off',{
|
|||
local infotext = string.sub(meta:get_string('infotext'), 1, -16)
|
||||
inv:set_stack('part', 1, '')
|
||||
minetest.swap_node(pos, {name = 'tasks:printing_press_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -2,16 +2,20 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;Signal strength 97%]'
|
||||
|
||||
local formspec_bad =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;No Signal!\nNew Low-noise block required!]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'..
|
||||
'image[8,1.5;1,1;tasks_lnb_line.png]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;No Signal!\nNew Low-noise block required!]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'..
|
||||
'image[8,1.5;1,1;tasks_lnb_line.png]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
local box = {
|
||||
type = 'fixed',
|
||||
|
@ -29,20 +33,15 @@ minetest.register_node('tasks:radio_dish_on',{
|
|||
collision_box = box,
|
||||
groups = {breakable = 1, tasks=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Satellite Dish')
|
||||
meta:set_int('time_min', 300)
|
||||
meta:set_int('time_max', 600)
|
||||
meta:set_int('xp', 10)
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Satellite Dish')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
minetest.swap_node(pos, {name = 'tasks:radio_dish_off', param2 = node.param2})
|
||||
end,
|
||||
|
@ -59,15 +58,10 @@ minetest.register_node('tasks:radio_dish_off',{
|
|||
collision_box = box,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:radio_dish_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:lnb_req', count = 4}) then
|
||||
player_inv:add_item('main', 'tasks:lnb_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:lnb_req',
|
||||
req_count = 4,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -91,7 +85,7 @@ minetest.register_node('tasks:radio_dish_off',{
|
|||
local infotext = string.sub(meta:get_string('infotext'), 1, -17)
|
||||
inv:set_stack('part', 1, '')
|
||||
minetest.swap_node(pos, {name = 'tasks:radio_dish_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -2,16 +2,20 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;Battery voltage is in the acceptable range.]'
|
||||
|
||||
local formspec_bad =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;Battery is low, please replace.]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'..
|
||||
'image[8,1.5;1,1;tasks_9v_battery_line.png]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'formspec_version[3]'..
|
||||
'size[10.5,7]'..
|
||||
'textarea[.5,.5;5,1;;;Battery is low, please replace.]' ..
|
||||
'button_exit[3.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;8,1.5;1,1;]'..
|
||||
'list[current_player;main;.5,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'..
|
||||
'image[8,1.5;1,1;tasks_9v_battery_line.png]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
local box = {
|
||||
type = 'fixed',
|
||||
|
@ -29,19 +33,15 @@ minetest.register_node('tasks:smoke_detector_on',{
|
|||
collision_box = box,
|
||||
groups = {breakable = 1, tasks=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Smoke Detector')
|
||||
meta:set_int('time_min', 300)
|
||||
meta:set_int('time_max', 600)
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Smoke Detector')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
minetest.swap_node(pos, {name = 'tasks:smoke_detector_off', param2 = node.param2})
|
||||
minetest.sound_play('tasks_smoke_alarm_chirp', {pos = pos, gain = 2, max_hear_distance = 14})
|
||||
|
@ -59,15 +59,10 @@ minetest.register_node('tasks:smoke_detector_off',{
|
|||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1, plays_sound=1},
|
||||
_sound = 'tasks_smoke_alarm_chirp',
|
||||
drop = 'tasks:smoke_detector_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:9v_battery_req', count = 4}) then
|
||||
player_inv:add_item('main', 'tasks:9v_battery_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:9v_battery_req',
|
||||
req_count = 4,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -91,7 +86,7 @@ minetest.register_node('tasks:smoke_detector_off',{
|
|||
local infotext = string.sub(meta:get_string('infotext'), 1, -17)
|
||||
inv:set_stack('part', 1, '')
|
||||
minetest.swap_node(pos, {name = 'tasks:smoke_detector_on'})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
|
@ -8,14 +8,18 @@ local formspec_good =
|
|||
'size[6,3]'..
|
||||
'textarea[1,1;5,2;;;Everything is functioning properly]'
|
||||
|
||||
local formspec_bad =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;There must have been a power surge.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[current_name;part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[current_name;part]'
|
||||
local function formspec_bad(pos)
|
||||
local spos = pos.x ..','.. pos.y ..','.. pos.z
|
||||
local formspec =
|
||||
'size[8,6]'..
|
||||
'textarea[.5,;5,2;;;There must have been a power surge.\nGet a new part from a storage locker.]' ..
|
||||
'button_exit[2.5,1.5;3,1;gimme;Grab a part request form]'..
|
||||
'list[nodemeta:'..spos..';part;6,1;1,1;]'..
|
||||
'list[current_player;main;0,3;8,3;]'..
|
||||
'listring[current_player;main]'..
|
||||
'listring[nodemeta:'..spos..';part]'
|
||||
return formspec
|
||||
end
|
||||
|
||||
minetest.register_node('tasks:transformer_0_on',{
|
||||
description = 'Power Transformer',
|
||||
|
@ -27,18 +31,16 @@ minetest.register_node('tasks:transformer_0_on',{
|
|||
collision_box = col_box,
|
||||
groups = {breakable = 1, tasks=1},
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string('formspec', formspec_good)
|
||||
meta:set_string('infotext', 'Power transformer')
|
||||
tasks.on_construct(pos)
|
||||
tasks.on_construct(pos, 'Power Transformer')
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_on(pos, node, clicker, formspec_good)
|
||||
end,
|
||||
on_rightclick = tasks.right_click,
|
||||
on_timer = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local infotext = meta:get_string('infotext')
|
||||
minetest.swap_node(pos, {name = 'tasks:transformer_0_off', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_bad)
|
||||
meta:set_string('infotext', infotext..' (Needs repair!)')
|
||||
end,
|
||||
})
|
||||
|
@ -53,15 +55,10 @@ minetest.register_node('tasks:transformer_0_off',{
|
|||
collision_box = col_box,
|
||||
groups = {breakable = 1, not_in_creative_inventory=1, tasks=1},
|
||||
drop = 'tasks:transformer_0_on',
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if fields ['gimme'] then
|
||||
local player_inv = sender:get_inventory()
|
||||
if not player_inv:contains_item('main', {name='tasks:fuse_req', count = 4}) then
|
||||
player_inv:add_item('main', 'tasks:fuse_req')
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), 'You have too many of these already.')
|
||||
end
|
||||
end
|
||||
req_form = 'tasks:fuse_req',
|
||||
req_count = 4,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
tasks.right_click_off(pos, node, clicker, formspec_bad(pos))
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack)
|
||||
if listname == 'part' then
|
||||
|
@ -85,7 +82,7 @@ minetest.register_node('tasks:transformer_0_off',{
|
|||
local infotext = string.sub(meta:get_string('infotext'), 1, -17)
|
||||
inv:set_stack('part', 1, '')
|
||||
minetest.swap_node(pos, {name = 'tasks:transformer_0_on', param2 = node.param2})
|
||||
meta:set_string('formspec', formspec_good)
|
||||
minetest.close_formspec(name, 'tasks:part_req_form')
|
||||
meta:set_string('infotext', infotext)
|
||||
tasks.only_add_xp(xp, name)
|
||||
timer:start(random_number)
|
||||
|
|
Loading…
Reference in New Issue