[Solved] I need help getting points to be checked inside by purchase functions

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

[Solved] I need help getting points to be checked inside by purchase functions

by ChristienChapman » Post

I need to check if a player has enough points to buy something before giving a player items. I also need to subtract those points but that will be done with a command.

The code is below. Whoever helps will be given credit in my project. Thanks and God bless!

Code: Select all

-- All glory to God, Jesus Christ, and the Holy Spirit.

local giveme_chatcmd = minetest.registered_chatcommands["giveme"].func 
local function give_player_stuff(name, item, qty, IsTwo, item2, qty2, IsThree, item3, qty3)


minetest.after(0.1, function(n)
giveme_chatcmd(name, item .. " " .. tostring(qty))
end
)


if IsTwo == true then
minetest.after(0.2, function(n)
giveme_chatcmd(name, item2 .. " " .. tostring(qty2))
end
)
end


if IsThree == true then
minetest.after(0.3, function(n)
giveme_chatcmd(name, item3 .. " " .. tostring(qty3))
end
)
end
end



local q = 0



minetest.register_node("zombies:buykit1", { 
	description = "Buy Kit 1", 
	tiles = {"buykit_store.png"},
groups = {cracky = 1},
	on_rightclick = function(pos, node, clicker) 
local plname = clicker:get_player_name()
local player = plname


give_player_stuff(plname, "default:axe_wood", 1, true, "farming:bread", 3, true, "farming:bread", 3)

minetest.chat_send_player(plname, "Thank you for purchasing this kit!")





minetest.chat_send_all("You do not have enough flesh to purchase this item!") 
end, })




minetest.register_node("zombies:buykit2", { 
	description = "Buy Kit 2", 
	tiles = {"buykit_store.png"},
	groups = {cracky = 1},
	on_rightclick = function(pos, node, clicker) 

local plname = clicker:get_player_name()

give_player_stuff(plname, "default:sword_wood", 1, true, "default:blueberries", 4, true, "default:blueberries", 4)

end, })



minetest.register_node("zombies:buykit3", { 
	description = "Buy Kit 3", 
	tiles = {"buykit_store.png"},
	groups = {cracky = 1},
	on_rightclick = function(pos, node, clicker) 

local plname = clicker:get_player_name()

give_player_stuff(plname, "default:sword_stone", 1, true, "default:apple", 5, true, "default:apple", 5)
end, })


minetest.register_node("zombies:buykit4", { 
	description = "Buy Kit 4", 
	tiles = {"buykit_store.png"},
	groups = {cracky = 1},
	on_rightclick = function(pos, node, clicker) 

local plname = clicker:get_player_name()

give_player_stuff(plname, "default:axe_diamond", 1, true, "default:blueberries", 17, true, "default:axe_mese", 1)
end, })


minetest.register_node("zombies:buykit5", { 
	description = "Buy Kit 5", 
	tiles = {"buykit_store.png"},
	groups = {cracky = 1},
	on_rightclick = function(pos, node, clicker) 

local plname = clicker:get_player_name()

give_player_stuff(plname, "default:sword_diamond", 1, true, "farming:bread", 47, true, "default:axe_steel", 1)
end, })

Code: Select all

local giveme_chatcmd = minetest.registered_chatcommands["giveme"].func






--[[
Points API
This mod adds points 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
]]--
points = {}
points.config = {}
points.config.init = 0

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

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

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

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

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

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


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

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

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

	if(sender ~= nil and reciver ~= nil and sender:get_attribute("points:purse") > value and value >= 0) then
		if(points.subtract(sender, value)) then
			points.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())
			points.hud_update(sender)
			points.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)
		points.hud_remove(player)
	end
)

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

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

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

function points.hud_update(player)
	player:hud_change(player:get_attribute("points:hudid"), "text", points.pointsstring(player))
end

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

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

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

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

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

		if args[1] == "help" then
			points.help(name)
			return
		elseif args[1] == "send" then
			points.send(name, args[2], args[3])
			return
		elseif args[1] == "give" then
			if minetest.get_player_privs(name).pointsmagic then
				points.add(args[2], args[3])
			end
			return
		elseif args[1] == "take" then
			if minetest.get_player_privs(name).pointsmagic then
				points.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, points.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

Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests