Merge pull request 'Patched emerald cheat glitch by adding wait time for players to get start balance' (#1) from impulse/emeraldbank:emerald-dupe-glitch-fix into master

Reviewed-on: https://codeberg.org/usrib/emeraldbank/pulls/1
This commit is contained in:
Dyed ef Ra 2024-01-15 13:19:12 +00:00
commit 7b826ac527
3 changed files with 35 additions and 13 deletions

@ -2,8 +2,8 @@ local storage = minetest.get_mod_storage()
function atm.create_account(name) function atm.create_account(name)
if not storage:contains("balance_" .. name) and minetest.player_exists(name) then if not storage:contains("balance_" .. name) and minetest.player_exists(name) then
storage:set_int("balance_" .. name, atm.startbalance) storage:set_int("balance_" .. name, 0)
atm.balance[name] = atm.startbalance atm.balance[name] = 0
end end
end end
@ -100,4 +100,4 @@ minetest.register_on_mods_loaded(function()
io.close(file) io.close(file)
atm.migrate_transactions() atm.migrate_transactions()
end end
end) end)

@ -25,18 +25,38 @@ local S = core.get_translator(core.get_current_modname())
local income_count = tonumber(core.settings:get("emeraldbank.income_count")) or 1 local income_count = tonumber(core.settings:get("emeraldbank.income_count")) or 1
local income_period = tonumber(core.settings:get("emeraldbank.income_period")) or 1800 local income_period = tonumber(core.settings:get("emeraldbank.income_period")) or 1800
local start_balance_period = tonumber(core.settings:get("emeraldbank.start_balance_period")) or 1800
local timer = 0 local income_timer = 0
local start_balance_timer = 0
function emeraldbank.income(dtime) function emeraldbank.income(dtime)
timer = timer + dtime; income_timer = income_timer + dtime
if timer >= income_period then local conn_players = core.get_connected_players()
timer = 0 if income_timer >= income_period then
for _, player in ipairs(core.get_connected_players()) do income_timer = 0
if not player or player.is_fake_player then return end for _, player in ipairs(conn_players) do
emeraldbank.add_emeralds(player, income_count) if not player or player.is_fake_player then return end
emeraldbank.add_emeralds(player, income_count)
end
end
-- Starting balance timer
start_balance_timer = start_balance_timer + dtime
if start_balance_timer >= start_balance_period then
start_balance_timer = 0
for _, player in ipairs(conn_players) do
if not player or player.is_fake_player then return end
local meta = player:get_meta()
local had_start_balance = meta:get_string("emeraldbank_had_start_balance")
if had_start_balance == "" or had_start_balance == nil then
mcl_title.set(player, "actionbar", {text=S("You have earned your starting balance for playtime: @1", atm.startbalance), color="green"})
emeraldbank.add_emeralds(player, atm.startbalance)
meta:set_string("emeraldbank_had_start_balance", "true")
end
end end
end end
end end
minetest.register_globalstep(emeraldbank.income) minetest.register_globalstep(emeraldbank.income)

@ -7,16 +7,18 @@ emeraldbank.bank_craft (bank craft) bool true
# Number of emeralds on start # Number of emeralds on start
emeraldbank.start_balance (emeralds on start) int 30 emeraldbank.start_balance (emeralds on start) int 30
# Length of time (in seconds) between checking if a player has had their start balance
emeraldbank.start_balance_period (time till start balance earned) int 1800
# If true, bank will give emeralds to players for gamed time # If true, bank will give emeralds to players for gamed time
emeraldbank.income_enabled (Is income enabled?) bool true emeraldbank.income_enabled (Is income enabled?) bool true
# Number of emeralds given as income # Number of emeralds given as income
emeraldbank.income_count (number of emeralds) int 1 emeraldbank.income_count (number of emeralds) int 1
# Length of time (in seconds) between checking if a user should get income # Length of time (in seconds) between checking if a player should get income
emeraldbank.income_period (time between income) int 1800 emeraldbank.income_period (time between income) int 1800
[Shops] [Shops]
# If true shop can be crafted # If true shop can be crafted