Traitor/mods/lobby/shop.lua

131 lines
5.5 KiB
Lua

local function not_builder(player)
local name = player:get_player_name()
return not minetest.check_player_privs(name, { builder = true })
end
local function lobby_shop_priv(player)
local player_attributes = player:get_meta()
local xp = player_attributes:get_float('xp')
local luck = player_attributes:get_int('luck')
local health = player_attributes:get_int('hp')
local formspec =
'formspec_version[3]'..
'size[12,12]'..
'textarea[.5,.5;2,2;;;Player Stats:\n XP: '..xp..'\n HP: '..health..'\n Luck: '..luck..']'..
'textarea[2.5,.5;9,3;;; Spend your XP here! If you run low collect trash from the lobby, or play some levels with friends.'..
' Playing levels will revoke some privileges, but you can restore them here. If you want to build your own levels you\'ll need the builder priv.'..
' This will give you: fly, fast, and creative\n Luck will help you find stashed items. Higher HP will let you take more damage before dying.]'..
'button[1,3.5;5,1;builder;Builder Priv (100XP)]'..
'button[6,3.5;5,1;toggle_build;Toggle builder privileges]'..
'button[6,4.75;5,1;health;Increase your HP ('..((health+1)*10)..' XP)]'
if luck < 10 then
formspec = formspec..
'button[1,4.75;5,1;luck;Increase your luck ('..((luck+1)*100)..' XP)]'
else
formspec = formspec..
'button[1,4.75;5,1;nil;Max luck ]'
end
return formspec
end
local col_box = {
type = 'fixed',
fixed = {{-.5, -.5, -.45, 1.5, .375, 0},
{-.45, 1.5, -.2, 1.45, 2, -.1},}--Left, Bottom, Front, Right, Top, Back
}
minetest.register_node('lobby:shop_priv', {
description = 'A place to buy privs',
drawtype = 'mesh',
mesh = 'lobby_shop_privs.obj',
tiles = {'lobby_shop_privs.png'},
groups = {breakable=1, not_in_creative_inventory=1},
paramtype = 'light',
paramtype2 = 'facedir',
selection_box = col_box,
collision_box = col_box,
on_rightclick = function(pos, node, clicker, itemstack)
local meta = minetest.get_meta(pos)
local name = clicker:get_player_name()
meta:set_string('infotext', 'Shop, spend XP here.')
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(clicker))
end,
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if formname == 'lobby:shop_priv' then
local player_attributes = player:get_meta()
if fields.builder then
if lobby.take_xp(player, 100) and not_builder(player) then
minetest.chat_send_player(player:get_player_name(), 'You just bought the Builder Privilege!')
local privs = minetest.get_player_privs(name)
privs.builder = true
privs.creative = true
privs.fly = true
privs.fast = true
minetest.set_player_privs(name, privs)
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
player_attributes:set_string('mode', 'builder')
else
minetest.chat_send_player(name, 'You either don\'t have 100 XP or you already have the priv.')
end
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
elseif fields.toggle_build then
if not not_builder(player) then
local privs = minetest.get_player_privs(name)
if privs.creative == true then
local privs = minetest.get_player_privs(name)
privs.creative = nil
privs.fly = nil
privs.fast = nil
privs.worldedit = nil
privs.areas = nil
minetest.set_player_privs(name, privs)
minetest.chat_send_player(name, 'Privs revoked! Play some games in the lobby')
player_attributes:set_string('mode', 'solo')
local inv = player:get_inventory()
local old_inv = inv:get_list('main')
inv:set_list('builder', old_inv)
inv:set_size('main', 16)
inv:set_list('main', {})
else
privs.creative = true
privs.fly = true
privs.fast = true
minetest.set_player_privs(name, privs)
minetest.chat_send_player(name, 'Privs restored!')
player_attributes:set_string('mode', 'builder')
local inv = player:get_inventory()
local old_inv = inv:get_list('builder')
inv:set_list('builder', {})
inv:set_size('main', 32)
inv:set_list('main', old_inv)
end
else
minetest.chat_send_player(name, 'You need to buy the Builder priv first!')
end
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
elseif fields.luck then
local luck = player_attributes:get_int('luck') or 0
local xp = (luck+1)*100
if lobby.take_xp(player, xp) then
player_attributes:set_int('luck', luck+1)
else
minetest.chat_send_player(name, 'You need more XP!')
end
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
elseif fields.health then
local health = player_attributes:get_int('hp')
local xp = (health+1)*10
if lobby.take_xp(player, xp) then
player:set_properties({hp_max = health+1})
player_attributes:set_int('hp', health+1)
else
minetest.chat_send_player(name, 'You need more XP!')
end
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
end
end
end)