added new machines
This commit is contained in:
parent
ceb168de55
commit
8603834f56
35 changed files with 2223 additions and 1204 deletions
216
chatcommands.lua
216
chatcommands.lua
|
|
@ -1,212 +1,62 @@
|
|||
--[[
|
||||
Chat Commands
|
||||
-------------
|
||||
This file defines all chat commands for players and admins
|
||||
to interact with the banking system.
|
||||
--]]
|
||||
-- chatcommands.lua (Angepasst mit Fehler-Nachricht für besetztes System)
|
||||
|
||||
-- Privilege for seized accounts.
|
||||
minetest.register_privilege("seized", {
|
||||
description = S("Account seized."),
|
||||
give_to_singleplayer = false,
|
||||
})
|
||||
minetest.register_privilege("seized", { description = S("Account seized."), give_to_singleplayer = false })
|
||||
|
||||
-- Allows any player to see their own balance, or privileged players to see others'.
|
||||
minetest.register_chatcommand("bank_account", {
|
||||
params = S("[<playername>]"),
|
||||
description = S("Shows your account balance or the balance of another player (if you have permission)."),
|
||||
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 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"))
|
||||
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,
|
||||
})
|
||||
|
||||
-- Allows any player to set their own PIN.
|
||||
minetest.register_chatcommand("bank_set_pin", {
|
||||
params = S("<4-digit-pin>"),
|
||||
description = S("Set pin for your bank account."),
|
||||
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
|
||||
bank_accounts.set_pin(name, param)
|
||||
minetest.chat_send_player(name, S("[Account] Pin successfully set!"))
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player and not player:get_inventory():contains_item("main", "bank_accounts:atm_card") then
|
||||
player:get_inventory():add_item("main", "bank_accounts:atm_card")
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, S("[Account] Invalid number entered. Must be exactly 4 digits."))
|
||||
end
|
||||
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
|
||||
})
|
||||
|
||||
-- Helper function to parse admin commands that require an integer amount.
|
||||
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_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
|
||||
|
||||
-- Helper function to parse admin commands that allow a float amount.
|
||||
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
|
||||
|
||||
-- Adds an integer amount to a player's balance. (Admin only)
|
||||
minetest.register_chatcommand("bank_add", {
|
||||
params = S("<name> <number>"),
|
||||
description = S("Add to a player's account balance."),
|
||||
privs = {server = true},
|
||||
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
|
||||
bank_accounts.add_balance(target_name, amount, "Admin Deposit", S("By Admin: @1", name), name)
|
||||
minetest.chat_send_player(name, S("[Bank] @1 successfully added to @2's account.", tostring(amount).." MG", target_name))
|
||||
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
|
||||
})
|
||||
|
||||
-- Subtracts an integer amount from a player's balance. (Admin only)
|
||||
minetest.register_chatcommand("bank_subtract", {
|
||||
params = S("<name> <number>"),
|
||||
description = S("Subtract from a player's account balance."),
|
||||
privs = {server = true},
|
||||
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
|
||||
bank_accounts.add_balance(target_name, -amount, "Admin Withdrawal", S("By Admin: @1", name), name)
|
||||
minetest.chat_send_player(name, S("[Bank] @1 successfully subtracted from @2's account.", tostring(amount).." MG", target_name))
|
||||
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
|
||||
})
|
||||
|
||||
-- Sets a player's balance to a specific (float) amount. (Admin only)
|
||||
minetest.register_chatcommand("bank_balance", {
|
||||
params = S("<name> <number>"),
|
||||
description = S("Set a player's account balance."),
|
||||
privs = {server = true},
|
||||
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
|
||||
bank_accounts.set_balance(target_name, amount, "Admin Set Balance", S("By Admin: @1", name), name)
|
||||
minetest.chat_send_player(name, S("[Bank] Funds successfully set for @1.", target_name))
|
||||
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
|
||||
})
|
||||
|
||||
-- Sets a player's credit debt to a specific (float) amount. (Admin only)
|
||||
minetest.register_chatcommand("bank_credit", {
|
||||
params = S("<name> <number>"),
|
||||
description = S("Set a player's credit debt."),
|
||||
privs = {server = true},
|
||||
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
|
||||
bank_accounts.set_credit(target_name, amount, "Admin Set Credit", S("By Admin: @1", name), name)
|
||||
minetest.chat_send_player(name, S("[Bank] Credit debt for @1 has been set to @2.", string.format("%.2f", amount).." MG", target_name))
|
||||
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
|
||||
})
|
||||
|
||||
-- Wipes a player's balance to 0. (Admin only)
|
||||
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
|
||||
bank_accounts.set_balance(param, 0, "Admin Wipe", S("By Admin: @1", name), name)
|
||||
minetest.chat_send_player(name, S("[Bank] Account successfully wiped for @1!", param))
|
||||
end
|
||||
})
|
||||
|
||||
-- Seizes a player's account. (Admin only)
|
||||
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
|
||||
})
|
||||
|
||||
-- Unseizes a player's account. (Admin only)
|
||||
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
|
||||
})
|
||||
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 })
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue