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
})