bank_accounts/chatcommands.lua
2025-08-22 02:10:35 +02:00

62 lines
7.5 KiB
Lua

-- chatcommands.lua (Angepasst mit Fehler-Nachricht für besetztes System)
minetest.register_privilege("seized", { description = S("Account seized."), give_to_singleplayer = false })
minetest.register_chatcommand("bank_account", { params = S("[<playername>]"), description = S("Shows your account balance or the balance of another player (if you have permission)."),
func = function(name, param)
local target_name = param; if not target_name or target_name == "" then target_name = name end
if target_name ~= name and not minetest.check_player_privs(name, {bank_teller=true, server=true}) then minetest.chat_send_player(name, S("You do not have permission to view other players' accounts.")); return end
if not bank_accounts.player_has_account(target_name) then minetest.chat_send_player(name, S("Player '@1' not found or has no account.", target_name)); return end
local data = bank_accounts.get_account_data(target_name)
minetest.chat_send_player(name, S("Balance for @1: @2", target_name, string.format("%.2f", data.balance) .. " MG")); minetest.chat_send_player(name, S("Credit Debt for @1: @2", target_name, string.format("%.2f", data.credit) .. " MG"))
end,
})
minetest.register_chatcommand("bank_set_pin", { params = S("<4-digit-pin>"), description = S("Set pin for your bank account."),
func = function(name, param)
if not param or param == "" then minetest.chat_send_player(name, S("[Account] No numbers entered.")); return end
if param:match("^[0-9][0-9][0-9][0-9]$") then if not bank_accounts.set_pin(name, param) then minetest.chat_send_player(name, S("[Bank] System is busy, please try again in a moment.")) else minetest.chat_send_player(name, S("[Account] Pin successfully set!")) end
else minetest.chat_send_player(name, S("[Account] Invalid number entered. Must be exactly 4 digits.")) end
end
})
local function parse_admin_params_int(params) local parts=params:split(" ",2);local playername=parts[1];local number_str=parts[2];if not playername or playername=="" then return nil,nil,S("[Bank] Player name missing.") end;if not bank_accounts.player_has_account(playername) then return nil,nil,S("[Bank] Invalid player name entered.") end;if not number_str or number_str=="" then return playername,nil,S("[Bank] No number entered.") end;local number=normalize_and_tonumber(number_str);if not number then return playername,nil,S("[Bank] Invalid number entered.") end;if number % 1 ~= 0 then return playername,nil,S("[Bank] Amount must be a whole number.") end;return playername,number end
local function parse_admin_params_float(params) local parts=params:split(" ",2);local playername=parts[1];local number_str=parts[2];if not playername or playername=="" then return nil,nil,S("[Bank] Player name missing.") end;if not bank_accounts.player_has_account(playername) then return nil,nil,S("[Bank] Invalid player name entered.") end;if not number_str or number_str=="" then return playername,nil,S("[Bank] No number entered.") end;local number=normalize_and_tonumber(number_str);if not number then return playername,nil,S("[Bank] Invalid number entered.") end;return playername,number end
local function on_fail(name) minetest.chat_send_player(name, S("[Bank] System is busy, please try again in a moment.")) end
minetest.register_chatcommand("bank_add", { params = S("<name> <number>"), description = S("Add to a player's account balance."), privs = {server = true},
func = function(name, params)
local target_name, amount, err = parse_admin_params_int(params); if err then minetest.chat_send_player(name, err); return end
if not amount or amount <= 0 then minetest.chat_send_player(name, S("[Bank] Number must be greater than 0.")); return end
if not bank_accounts.add_balance(target_name, amount, "Admin Deposit", S("By Admin: @1", name), name) then on_fail(name) else minetest.chat_send_player(name, S("[Bank] @1 successfully added to @2's account.", tostring(amount).." MG", target_name)) end
end
})
minetest.register_chatcommand("bank_subtract", { params = S("<name> <number>"), description = S("Subtract from a player's account balance."), privs = {server = true},
func = function(name, params)
local target_name, amount, err = parse_admin_params_int(params); if err then minetest.chat_send_player(name, err); return end
if not amount or amount <= 0 then minetest.chat_send_player(name, S("[Bank] Number must be greater than 0.")); return end
if not bank_accounts.add_balance(target_name, -amount, "Admin Withdrawal", S("By Admin: @1", name), name) then on_fail(name) else minetest.chat_send_player(name, S("[Bank] @1 successfully subtracted from @2's account.", tostring(amount).." MG", target_name)) end
end
})
minetest.register_chatcommand("bank_balance", { params = S("<name> <number>"), description = S("Set a player's account balance."), privs = {server = true},
func = function(name, params)
local target_name, amount, err = parse_admin_params_float(params); if err then minetest.chat_send_player(name, err); return end
if amount == nil or amount < 0 then minetest.chat_send_player(name, S("[Bank] Number must be 0 or greater.")); return end
if not bank_accounts.set_balance(target_name, amount, "Admin Set Balance", S("By Admin: @1", name), name) then on_fail(name) else minetest.chat_send_player(name, S("[Bank] Funds successfully set for @1.", target_name)) end
end
})
minetest.register_chatcommand("bank_credit", { params = S("<name> <number>"), description = S("Set a player's credit debt."), privs = {server = true},
func = function(name, params)
local target_name, amount, err = parse_admin_params_float(params); if err then minetest.chat_send_player(name, err); return end
if amount == nil or amount < 0 then minetest.chat_send_player(name, S("[Bank] Number must be 0 or greater.")); return end
if not bank_accounts.set_credit(target_name, amount, "Admin Set Credit", S("By Admin: @1", name), name) then on_fail(name) else minetest.chat_send_player(name, S("[Bank] Credit debt for @1 has been set to @2.", string.format("%.2f", amount).." MG", target_name)) end
end
})
minetest.register_chatcommand("bank_wipe", { params = S("<name>"), description = S("Wipe a player's bank account."), privs = {server = true}, func = function(name, param) if not param or not bank_accounts.player_has_account(param) then minetest.chat_send_player(name, S("[Bank] Invalid player name entered.")); return end; if not bank_accounts.set_balance(param, 0, "Admin Wipe", S("By Admin: @1", name), name) then on_fail(name) else minetest.chat_send_player(name, S("[Bank] Account successfully wiped for @1!", param)) end end })
minetest.register_chatcommand("bank_seize", { params = S("<name>"), description = S("Seize a player's account."), privs = {server = true}, func = function(name, param) if not param or not bank_accounts.player_has_account(param) then minetest.chat_send_player(name, S("[Bank] Invalid player name entered.")); return end; minetest.set_player_privs(param, {seized = true}); minetest.chat_send_player(name, S("[Bank] Account successfully seized for @1!", param)) end })
minetest.register_chatcommand("bank_unseize", { params = S("<name>"), description = S("Unseize a player's account."), privs = {server = true}, func = function(name, param) if not param or not bank_accounts.player_has_account(param) then minetest.chat_send_player(name, S("[Bank] Invalid player name entered.")); return end; minetest.set_player_privs(param, {seized = nil}); minetest.chat_send_player(name, S("[Bank] Account successfully unseized for @1!", param)) end })