69 lines
2.9 KiB
Lua
69 lines
2.9 KiB
Lua
-- payroll.lua (Lohn für Arbeit mit direkter Einzahlung aufs Konto)
|
|
|
|
-- Read configuration from minetest.conf
|
|
local payroll_enabled = minetest.settings:get_bool("bank_accounts.payroll_enabled", true)
|
|
if not payroll_enabled then
|
|
return -- Do nothing if the feature is disabled
|
|
end
|
|
|
|
local creative_payroll_enabled = minetest.settings:get_bool("bank_accounts.creative_payroll_enabled", true)
|
|
local payroll_amount = tonumber(minetest.settings:get("bank_accounts.payroll_amount")) or 10
|
|
local payroll_period = tonumber(minetest.settings:get("bank_accounts.payroll_period")) or 720
|
|
|
|
-- This table holds players who are due for a payroll payment.
|
|
local players_payroll = {}
|
|
local timer = 0
|
|
|
|
-- This globalstep runs periodically and flags players as being due for payment.
|
|
-- It does not perform the payment itself.
|
|
minetest.register_globalstep(function(dtime)
|
|
timer = timer + dtime
|
|
if timer < payroll_period then
|
|
return
|
|
end
|
|
timer = 0
|
|
|
|
for _, player in ipairs(minetest.get_connected_players()) do
|
|
local name = player:get_player_name()
|
|
if creative_payroll_enabled then
|
|
players_payroll[name] = payroll_amount
|
|
minetest.log("info", "[Payroll] Accrued payroll for "..name)
|
|
else
|
|
local privs = minetest.get_player_privs(name)
|
|
if not (privs.creative or privs.give) then
|
|
players_payroll[name] = payroll_amount
|
|
minetest.log("info", "[Payroll] Accrued payroll for "..name)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- This function is triggered by player activity and "claims" the accrued payroll.
|
|
local function claim_payroll(player)
|
|
if not player or player.is_fake_player then
|
|
return
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
local amount_due = players_payroll[name]
|
|
|
|
-- Check if payroll is due and if the bank_accounts mod is available
|
|
if amount_due and amount_due > 0 and bank_accounts then
|
|
|
|
-- Deposit the payroll directly into the player's bank account via the API
|
|
local purpose_text = S("Periodic payroll for activity")
|
|
local success = bank_accounts.add_balance(name, amount_due, "Payroll", purpose_text, "System")
|
|
|
|
-- Only reset the payroll due flag if the deposit was successful
|
|
if success then
|
|
players_payroll[name] = nil
|
|
minetest.chat_send_player(name, S("You received your payroll of @1 MG. It has been deposited into your bank account.", tostring(amount_due)))
|
|
minetest.log("info", "[Payroll] Deposited payroll for "..name.." into bank account.")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Register the triggers for claiming the payroll.
|
|
minetest.register_on_dignode(function(pos, oldnode, digger) claim_payroll(digger) end)
|
|
minetest.register_on_placenode(function(pos, node, placer) claim_payroll(placer) end)
|
|
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) claim_payroll(player) end)
|