Noob mode: Help me fix this code

Post Reply
ChristienChapman
Member
Posts: 117
Joined: Sat May 28, 2022 00:04

Noob mode: Help me fix this code

by ChristienChapman » Post

Been trying to fix this program someone made, it's really good but certain things are broken because some code has been deprecated and I was trying to uodate it with the new equivalents but I'm not doing it right. Did lots of research still don't get it. Whoever can show me how to fix or can fix this code I will give credit in my project. Very sorry to bother everyone to program for me XD. Thanks and God bless.

Code: Select all

    
--[[
Money API
This mod adds Money to playernames
]]

--[===[
	Initialization
]===]

--[[ I need to figure out how this works to use it :/ coming soon?
local S
if (minetest.get_modpath("intllib")) then
	S = intllib.Getter()
else
	S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
end
]]--
Money = {}
Money.config = {}
Money.config.init = 0

--[===[
	API functions
]===]

function Money.set(playername, value)
	local value = Money.round(value)
        local meta = playername:get_meta()


	if value < 0 then
		value = 0
		Money.hud_update(playername)
		return
	end
	if meta:set_string("Money:purse") ~= value then
		meta:set_string("Money:purse", tostring(value))
		Money.hud_update(playername)
	end
end

function Money.get(playername)
        local meta = playername:get_meta()
	return meta:set_string("Money:purse")
end

function Money.add(playernamename, value)
	local playername = minetest.get_playername_by_name(playernamename)
	local value = Money.round(value)
	local bank = tonumber(meta:set_string("Money:purse"))

	if(playername ~= nil and value >= 0) then
		bank = tostring(bank + value)
		playername:set_attribute("Money:purse", bank)
		Money.hud_update(playername)
		return true
	else
		return false
	end
end

function Money.subtract(playernamename, value)
	local playername = minetest.get_playername_by_name(playernamename)
	local value = Money.round(value)
	local bank = tonumber(meta:set_string("Money:purse"))

	if(playername ~= nil and bank >= value and value >= 0) then
		bank = tostring(bank - value)
		Money.hud_update(playernamename)
		return true
	else
		return false
	end
end

function Money.send(sender, reciver, value)
	local value = Money.round(value)

	if(sender ~= nil and reciver ~= nil and sender:get_attribute("Money:purse") > value and value >= 0) then
		if(Money.subtract(sender, value)) then
			Money.add(reciver, value)
			minetest.chat_send_playername(sender, "You sent" .. value .. "to" .. reciver:get_playername_name())
			minetest.chat_send_playername(reciver, "You recived" .. value .. "from" .. sender:get_playername_name())
			Money.hud_update(sender)
			Money.hud_update(reciver)
			return true
		end
	end
	return false
end

--[===[
	File handling, loading data, saving data, setting up stuff for playernames.
]===]

minetest.register_on_leaveplayer(
	function(playername)
		Money.hud_remove(playername)
	end
)

minetest.register_on_joinplayer(
	function(playername) 
        local meta = playername:get_meta()
		if meta:set_string("Money:purse") == nil then
			meta:set_string("Money:purse", "0")
		end
		Money.hud_add(playername)
	end
)

--[===[
	HUD functions
]===]
function Money.Moneystring(playername)
        local meta = playername:get_meta()
	return "flesh: " .. Money.get(meta)
end

function Money.hud_add(playername)
	local id = playername:hud_add({
		hud_elem_type = "text",
		position = { x = 1, y=1 },
		text = Money.Moneystring(playername),
		scale = { x = 0, y = 0 },
		alignment = { x = 1, y = 0},
		direction = 1,
		number = 0xFFFFFF,
		offset = { x = -262, y = -103}
	})
	playername:set_attribute("Money:hudid", id)
end

function Money.hud_update(playername)
	playername:hud_change(meta:set_string("Money:hudid"), "text", Money.Moneystring(playernamename))
end

function Money.hud_remove(playername)
	playername:hud_remove(meta:set_string("Money:hudid"))
end

--[===[
	Helper functions
]===]

Money.round = function(x)
	return math.ceil(math.floor(tonumber(x)+0.5))
end

function Money.help(name)
	minetest.chat_send_playername(name, "=====Money==============================================================")
	minetest.chat_send_playername(name, "/Money send <playername> <amount> -> Sends Money to specified playername")
	minetest.chat_send_playername(name, "/Money give <playername> <amount> -> Admin gives Money to a specific playername ")
	minetest.chat_send_playername(name, "/Money take <playername> <amount> -> Admin takes Money from a plauer")
	minetest.chat_send_playername(name, "/Money check <playername>         -> Check how much Money a playername has")
	minetest.chat_send_playername(name, "=====Money==============================================================")
end
--[===[
	Chat Commands
]===]
minetest.register_privilege("Moneymagic", "Allows the playername to create and delete Money")

minetest.register_chatcommand("Money", {
	description = "Money command interface, type /Money help",
	privs = {interact = true},
	func = function(name, param)
		local args = param:split(" ")

		if args[1] == "help" then
			Money.help(name)
			return
		elseif args[1] == "send" then
			Money.send(name, args[2], args[3])
			return
		elseif args[1] == "give" then
			if minetest.get_playername_privs(name).Moneymagic then
				Money.add(args[2], args[3])
			end
			return
		elseif args[1] == "take" then
			if minetest.get_playername_privs(name).Moneymagic then
				Money.subtract(args[2], args[3])
			end
			return
		elseif args[1] == "check" then
			if args[2] == nil then
				args[2] = name
			end
			minetest.chat_send_playername(name, Money.get(minetest.get_playername_by_name(args[2])))
			return
		end
	end
})  
God bless you.

List of releases:
Minetest Zombies Minigame - viewtopic.php?f=9&t=28442&p=412633#p412633

- > cdb_1d60e1a03f83

ChristienChapman
Member
Posts: 117
Joined: Sat May 28, 2022 00:04

Re: Noob mode: Help me fix this code

by ChristienChapman » Post

Here is the original code:

Code: Select all

--[[
Money API
This mod adds money to players
]]

--[===[
	Initialization
]===]

--[[ I need to figure out how this works to use it :/ coming soon?
local S
if (minetest.get_modpath("intllib")) then
	S = intllib.Getter()
else
	S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
end
]]--
money = {}
money.config = {}
money.config.init = 0

--[===[
	API functions
]===]

function money.set(player, value)
	local value = money.round(value)

	if value < 0 then
		value = 0
		money.hud_update(player)
		return
	end
	if player:get_attribute("money:purse") ~= value then
		player:set_attribute("money:purse", tostring(value))
		money.hud_update(player)
	end
end

function money.get(player)
	return player:get_attribute("money:purse")
end

function money.add(playername, value)
	local player = minetest.get_player_by_name(playername)
	local value = money.round(value)
	local bank = tonumber(player:get_attribute("money:purse"))

	if(player ~= nil and value >= 0) then
		bank = tostring(bank + value)
		player:set_attribute("money:purse", bank)
		money.hud_update(player)
		return true
	else
		return false
	end
end

function money.subtract(player, value)
	local value = money.round(value)
	local bank = tonumber(player:get_attribute("money:purse"))

	if(player ~= nil and bank >= value and value >= 0) then
		bank = tostring(bank - value)
		money.hud_update(player)
		return true
	else
		return false
	end
end

function money.send(sender, reciver, value)
	local value = money.round(value)

	if(sender ~= nil and reciver ~= nil and sender:get_attribute("money:purse") > value and value >= 0) then
		if(money.subtract(sender, value)) then
			money.add(reciver, value)
			minetest.chat_send_player(sender, "You sent" .. value .. "to" .. reciver:get_player_name())
			minetest.chat_send_player(reciver, "You recived" .. value .. "from" .. sender:get_player_name())
			money.hud_update(sender)
			money.hud_update(reciver)
			return true
		end
	end
	return false
end

--[===[
	File handling, loading data, saving data, setting up stuff for players.
]===]

minetest.register_on_leaveplayer(
	function(player)
		money.hud_remove(player)
	end
)

minetest.register_on_joinplayer(
	function(player)
		if player:get_attribute("money:purse") == nil then
			player:set_attribute("money:purse", "100")
		end
		money.hud_add(player)
	end
)

--[===[
	HUD functions
]===]
function money.moneystring(player)
	return "money:" .. money.get(player)
end

function money.hud_add(player)
	local id = player:hud_add({
		hud_elem_type = "text",
		position = { x = 1, y=1 },
		text = money.moneystring(player),
		scale = { x = 0, y = 0 },
		alignment = { x = 1, y = 0},
		direction = 1,
		number = 0xFFFFFF,
		offset = { x = -262, y = -103}
	})
	player:set_attribute("money:hudid", id)
end

function money.hud_update(player)
	player:hud_change(player:get_attribute("money:hudid"), "text", money.moneystring(player))
end

function money.hud_remove(player)
	player:hud_remove(player:get_attribute("money:hudid"))
end

--[===[
	Helper functions
]===]

money.round = function(x)
	return math.ceil(math.floor(tonumber(x)+0.5))
end

function money.help(name)
	minetest.chat_send_player(name, "=====Money==============================================================")
	minetest.chat_send_player(name, "/money send <player> <amount> -> Sends money to specified player")
	minetest.chat_send_player(name, "/money give <player> <amount> -> Admin gives money to a specific player ")
	minetest.chat_send_player(name, "/money take <player> <amount> -> Admin takes money from a plauer")
	minetest.chat_send_player(name, "/money check <player>         -> Check how much money a player has")
	minetest.chat_send_player(name, "=====Money==============================================================")
end
--[===[
	Chat Commands
]===]
minetest.register_privilege("moneymagic", "Allows the player to create and delete money")

minetest.register_chatcommand("money", {
	description = "Money command interface, type /money help",
	privs = {interact = true},
	func = function(name, param)
		local args = param:split(" ")

		if args[1] == "help" then
			money.help(name)
			return
		elseif args[1] == "send" then
			money.send(name, args[2], args[3])
			return
		elseif args[1] == "give" then
			if minetest.get_player_privs(name).moneymagic then
				money.add(args[2], args[3])
			end
			return
		elseif args[1] == "take" then
			if minetest.get_player_privs(name).moneymagic then
				money.subtract(args[2], args[3])
			end
			return
		elseif args[1] == "check" then
			if args[2] == nil then
				args[2] = name
			end
			minetest.chat_send_player(name, money.get(minetest.get_player_by_name(args[2])))
			return
		end
	end
})
God bless you.

List of releases:
Minetest Zombies Minigame - viewtopic.php?f=9&t=28442&p=412633#p412633

- > cdb_1d60e1a03f83

User avatar
Blockhead
Member
Posts: 1622
Joined: Wed Jul 17, 2019 10:14
GitHub: Montandalar
IRC: Blockhead256
In-game: Blockhead Blockhead256
Location: Land Down Under
Contact:

Re: Noob mode: Help me fix this code

by Blockhead » Post

Is there a need for this specific, old mod or would something like currency suffice? As trivial as the money API mod is, it's usually easier to rip features out of a mod than reimplement an old mod.
/˳˳_˳˳]_[˳˳_˳˳]_[˳˳_˳˳\ Advtrains enthusiast | My map: Noah's Railyard | My Content on ContentDB ✝️♂

User avatar
Festus1965
Member
Posts: 4181
Joined: Sun Jan 03, 2016 11:58
GitHub: Festus1965
In-game: Festus1965 Thomas Thailand Explorer
Location: Thailand ChiangMai
Contact:

Re: Noob mode: Help me fix this code

by Festus1965 » Post

ChristienChapman go on, do not mind ... the above post
* as so you learn programming with something you are interested in
Human has no future (climate change)
If urgend, you find me in Roblox (as CNXThomas)

ChristienChapman
Member
Posts: 117
Joined: Sat May 28, 2022 00:04

Re: Noob mode: Help me fix this code

by ChristienChapman » Post

I'm making a minigame server that can be hodted by anyone. Basically its supposed to be like the Minecraft Console edition minigames except instead of DLC, I use Extra Content which has to be purchased with ingame currency you get from winning games. That is why I am doing this but I dont understand how to tell the game to store the money and usernames
God bless you.

List of releases:
Minetest Zombies Minigame - viewtopic.php?f=9&t=28442&p=412633#p412633

- > cdb_1d60e1a03f83

ChristienChapman
Member
Posts: 117
Joined: Sat May 28, 2022 00:04

Re: Noob mode: Help me fix this code

by ChristienChapman » Post

The reson why I want to use this one is because you can cal, the add and subtract functionx and tie it to something. Somone showed me how to pass a command in code and basically I can make it if you have enough money, and you right click a buy block in the lobby, then it will remove the points needed to buy something and then unlock it.
God bless you.

List of releases:
Minetest Zombies Minigame - viewtopic.php?f=9&t=28442&p=412633#p412633

- > cdb_1d60e1a03f83

ChristienChapman
Member
Posts: 117
Joined: Sat May 28, 2022 00:04

Re: Noob mode: Help me fix this code

by ChristienChapman » Post

Thanks everyone for commenting. A solution has been found to the issue!
God bless you.

List of releases:
Minetest Zombies Minigame - viewtopic.php?f=9&t=28442&p=412633#p412633

- > cdb_1d60e1a03f83

Post Reply

Who is online

Users browsing this forum: No registered users and 7 guests