Initial commit
This commit is contained in:
45
gamemodes/darkrp/gamemode/modules/money/sh_commands.lua
Normal file
45
gamemodes/darkrp/gamemode/modules/money/sh_commands.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
DarkRP.declareChatCommand{
|
||||
command = "give",
|
||||
description = "Give money to the player you're looking at.",
|
||||
delay = 1.5
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "dropmoney",
|
||||
description = "Drop money on the floor.",
|
||||
delay = 1.5
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "moneydrop",
|
||||
description = "Drop money on the floor.",
|
||||
delay = 1.5
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "cheque",
|
||||
description = "Write a cheque for a specific person.",
|
||||
delay = 1.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "check",
|
||||
description = "Write a cheque for a specific person.",
|
||||
delay = 1.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "setmoney",
|
||||
description = "Set a player's wallet value.",
|
||||
delay = 0.5,
|
||||
tableArgs = true
|
||||
}
|
||||
|
||||
DarkRP.declareChatCommand{
|
||||
command = "addmoney",
|
||||
description = "Add money to a player's wallet.",
|
||||
delay = 0.5,
|
||||
tableArgs = true
|
||||
}
|
||||
36
gamemodes/darkrp/gamemode/modules/money/sh_interface.lua
Normal file
36
gamemodes/darkrp/gamemode/modules/money/sh_interface.lua
Normal file
@@ -0,0 +1,36 @@
|
||||
DarkRP.PLAYER.canAfford = DarkRP.stub{
|
||||
name = "canAfford",
|
||||
description = "Whether the player can afford the given amount of money",
|
||||
parameters = {
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money",
|
||||
type = "number",
|
||||
optional = false
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
{
|
||||
name = "answer",
|
||||
description = "Whether the player can afford it",
|
||||
type = "boolean"
|
||||
}
|
||||
},
|
||||
metatable = DarkRP.PLAYER
|
||||
}
|
||||
|
||||
DarkRP.ENTITY.isMoneyBag = DarkRP.stub{
|
||||
name = "isMoneyBag",
|
||||
description = "Whether this entity is a money bag",
|
||||
parameters = {
|
||||
|
||||
},
|
||||
returns = {
|
||||
{
|
||||
name = "answer",
|
||||
description = "Whether this entity is a money bag.",
|
||||
type = "boolean"
|
||||
}
|
||||
},
|
||||
metatable = DarkRP.ENTITY
|
||||
}
|
||||
11
gamemodes/darkrp/gamemode/modules/money/sh_money.lua
Normal file
11
gamemodes/darkrp/gamemode/modules/money/sh_money.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
local pMeta = FindMetaTable("Player")
|
||||
local entMeta = FindMetaTable("Entity")
|
||||
|
||||
function pMeta:canAfford(amount)
|
||||
if not amount or self.DarkRPUnInitialized then return false end
|
||||
return math.floor(amount) >= 0 and (self:getDarkRPVar("money") or 0) - math.ceil(amount) >= 0
|
||||
end
|
||||
|
||||
function entMeta:isMoneyBag()
|
||||
return self.IsSpawnedMoney or self:GetClass() == GAMEMODE.Config.MoneyClass
|
||||
end
|
||||
81
gamemodes/darkrp/gamemode/modules/money/sv_interface.lua
Normal file
81
gamemodes/darkrp/gamemode/modules/money/sv_interface.lua
Normal file
@@ -0,0 +1,81 @@
|
||||
DarkRP.PLAYER.addMoney = DarkRP.stub{
|
||||
name = "addMoney",
|
||||
description = "Give money to a player.",
|
||||
parameters = {
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money to give to the player. A negative amount means you're substracting money.",
|
||||
type = "number",
|
||||
optional = false
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
metatable = DarkRP.PLAYER
|
||||
}
|
||||
|
||||
DarkRP.PLAYER.payDay = DarkRP.stub{
|
||||
name = "payDay",
|
||||
description = "Give a player their salary.",
|
||||
parameters = {
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
metatable = DarkRP.PLAYER
|
||||
}
|
||||
|
||||
|
||||
DarkRP.payPlayer = DarkRP.stub{
|
||||
name = "payPlayer",
|
||||
description = "Make one player give money to the other player.",
|
||||
parameters = {
|
||||
{
|
||||
name = "sender",
|
||||
description = "The player who gives the money.",
|
||||
type = "Player",
|
||||
optional = false
|
||||
},
|
||||
{
|
||||
name = "receiver",
|
||||
description = "The player who receives the money.",
|
||||
type = "Player",
|
||||
optional = false
|
||||
},
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money.",
|
||||
type = "number",
|
||||
optional = false
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
metatable = DarkRP
|
||||
}
|
||||
|
||||
DarkRP.createMoneyBag = DarkRP.stub{
|
||||
name = "createMoneyBag",
|
||||
description = "Create a money bag.",
|
||||
parameters = {
|
||||
{
|
||||
name = "pos",
|
||||
description = "The The position where the money bag is to be spawned.",
|
||||
type = "Vector",
|
||||
optional = false
|
||||
},
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money.",
|
||||
type = "number",
|
||||
optional = false
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
{
|
||||
name = "moneybag",
|
||||
description = "The money bag entity.",
|
||||
type = "Entity"
|
||||
}
|
||||
},
|
||||
metatable = DarkRP
|
||||
}
|
||||
388
gamemodes/darkrp/gamemode/modules/money/sv_money.lua
Normal file
388
gamemodes/darkrp/gamemode/modules/money/sv_money.lua
Normal file
@@ -0,0 +1,388 @@
|
||||
--[[---------------------------------------------------------------------------
|
||||
functions
|
||||
---------------------------------------------------------------------------]]
|
||||
local meta = FindMetaTable("Player")
|
||||
function meta:addMoney(amount)
|
||||
amount = DarkRP.toInt(amount)
|
||||
if not amount then return false end
|
||||
local total = self:getDarkRPVar("money") + amount
|
||||
total = hook.Call("playerWalletChanged", GAMEMODE, self, amount, self:getDarkRPVar("money")) or total
|
||||
|
||||
self:setDarkRPVar("money", total)
|
||||
|
||||
if self.DarkRPUnInitialized then return end
|
||||
DarkRP.storeMoney(self, total)
|
||||
end
|
||||
|
||||
function DarkRP.payPlayer(ply1, ply2, amount)
|
||||
ply1:addMoney(-amount)
|
||||
ply2:addMoney(amount)
|
||||
end
|
||||
|
||||
function meta:payDay()
|
||||
if not self:isArrested() then
|
||||
DarkRP.retrieveSalary(self, function(amount)
|
||||
amount = math.floor(amount or GAMEMODE.Config.normalsalary)
|
||||
local suppress, message, hookAmount = hook.Call("playerGetSalary", GAMEMODE, self, amount)
|
||||
amount = hookAmount or amount
|
||||
|
||||
if amount == 0 or not amount then
|
||||
if not suppress then DarkRP.notify(self, 4, 4, message or DarkRP.getPhrase("payday_unemployed")) end
|
||||
else
|
||||
self:addMoney(amount)
|
||||
if not suppress then DarkRP.notify(self, 4, 4, message or DarkRP.getPhrase("payday_message", DarkRP.formatMoney(amount))) end
|
||||
end
|
||||
end)
|
||||
else
|
||||
DarkRP.notify(self, 4, 4, DarkRP.getPhrase("payday_missed"))
|
||||
end
|
||||
end
|
||||
|
||||
function DarkRP.createMoneyBag(pos, amount)
|
||||
local moneybag = ents.Create(GAMEMODE.Config.MoneyClass)
|
||||
moneybag:SetPos(pos)
|
||||
moneybag:Setamount(math.Min(amount, 2147483647))
|
||||
moneybag:Spawn()
|
||||
moneybag:Activate()
|
||||
if GAMEMODE.Config.moneyRemoveTime and GAMEMODE.Config.moneyRemoveTime ~= 0 then
|
||||
timer.Create("RemoveEnt" .. moneybag:EntIndex(), GAMEMODE.Config.moneyRemoveTime, 1, fn.Partial(SafeRemoveEntity, moneybag))
|
||||
end
|
||||
return moneybag
|
||||
end
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
Commands
|
||||
---------------------------------------------------------------------------]]
|
||||
local function GiveMoney(ply, args)
|
||||
if args == "" then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
local amount = DarkRP.toInt(args)
|
||||
|
||||
if not amount then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
local trace = ply:GetEyeTrace()
|
||||
local ent = trace.Entity
|
||||
|
||||
if not IsValid(ent) or not ent:IsPlayer() or ent:GetPos():DistToSqr(ply:GetPos()) >= 22500 then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("must_be_looking_at", DarkRP.getPhrase("player")))
|
||||
return ""
|
||||
end
|
||||
|
||||
if amount < 1 then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ">=1"))
|
||||
return ""
|
||||
end
|
||||
|
||||
if not ply:canAfford(amount) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("cant_afford", ""))
|
||||
|
||||
return ""
|
||||
end
|
||||
|
||||
ply:DoAnimationEvent(ACT_GMOD_GESTURE_ITEM_GIVE)
|
||||
|
||||
timer.Simple(1.2, function()
|
||||
if not IsValid(ply) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("unable", "/give", ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
if not ply:canAfford(amount) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("cant_afford", ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
local trace2 = ply:GetEyeTrace()
|
||||
local ent2 = trace2.Entity
|
||||
|
||||
if not IsValid(ent2) or not ent2:IsPlayer() or ent2:GetPos():DistToSqr(ply:GetPos()) >= 22500 then return end
|
||||
|
||||
DarkRP.payPlayer(ply, ent2, amount)
|
||||
|
||||
hook.Call("playerGaveMoney", nil, ply, ent2, amount)
|
||||
|
||||
DarkRP.notify(ent2, 0, 4, DarkRP.getPhrase("has_given", ply:Nick(), DarkRP.formatMoney(amount)))
|
||||
DarkRP.notify(ply, 0, 4, DarkRP.getPhrase("you_gave", ent2:Nick(), DarkRP.formatMoney(amount)))
|
||||
DarkRP.log(ply:Nick() .. " (" .. ply:SteamID() .. ") has given " .. DarkRP.formatMoney(amount) .. " to " .. ent2:Nick() .. " (" .. ent2:SteamID() .. ")")
|
||||
end)
|
||||
|
||||
return ""
|
||||
end
|
||||
DarkRP.defineChatCommand("give", GiveMoney, 0.2)
|
||||
|
||||
local function DropMoney(ply, args)
|
||||
if args == "" then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
local amount = DarkRP.toInt(args)
|
||||
|
||||
if not amount then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return ""
|
||||
end
|
||||
|
||||
if amount < 1 then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ">0"))
|
||||
return ""
|
||||
end
|
||||
|
||||
if amount >= 2147483647 then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), "<2,147,483,647"))
|
||||
return ""
|
||||
end
|
||||
|
||||
if not ply:canAfford(amount) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("cant_afford", ""))
|
||||
|
||||
return ""
|
||||
end
|
||||
|
||||
ply:addMoney(-amount)
|
||||
ply:DoAnimationEvent(ACT_GMOD_GESTURE_ITEM_DROP)
|
||||
|
||||
timer.Simple(1, function()
|
||||
if not IsValid(ply) then return end
|
||||
|
||||
local trace = {}
|
||||
trace.start = ply:EyePos()
|
||||
trace.endpos = trace.start + ply:GetAimVector() * 85
|
||||
trace.filter = ply
|
||||
|
||||
local tr = util.TraceLine(trace)
|
||||
|
||||
local moneybag = DarkRP.createMoneyBag(tr.HitPos, amount)
|
||||
|
||||
DarkRP.placeEntity(moneybag, tr, ply)
|
||||
|
||||
hook.Call("playerDroppedMoney", nil, ply, amount, moneybag)
|
||||
DarkRP.log(ply:Nick() .. " (" .. ply:SteamID() .. ") has dropped " .. DarkRP.formatMoney(amount))
|
||||
end)
|
||||
|
||||
return ""
|
||||
end
|
||||
DarkRP.defineChatCommand("dropmoney", DropMoney, 0.3)
|
||||
DarkRP.defineChatCommand("moneydrop", DropMoney, 0.3)
|
||||
|
||||
local function CreateCheque(ply, args)
|
||||
local recipient = DarkRP.findPlayer(args[1])
|
||||
local amount = DarkRP.toInt(args[2]) or 0
|
||||
|
||||
local chequeTable = {
|
||||
cmd = "cheque",
|
||||
max = GAMEMODE.Config.maxCheques
|
||||
}
|
||||
|
||||
if not recipient then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), DarkRP.getPhrase("recipient") .. " (1)"))
|
||||
return ""
|
||||
end
|
||||
|
||||
if amount <= 1 then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), DarkRP.getPhrase("amount") .. " (2)"))
|
||||
return ""
|
||||
end
|
||||
|
||||
if not ply:canAfford(amount) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("cant_afford", ""))
|
||||
|
||||
return ""
|
||||
end
|
||||
|
||||
if ply:customEntityLimitReached(chequeTable) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("limit", GAMEMODE.Config.chatCommandPrefix .. "cheque"))
|
||||
|
||||
return ""
|
||||
end
|
||||
|
||||
ply:addCustomEntity(chequeTable)
|
||||
|
||||
if IsValid(ply) and IsValid(recipient) then
|
||||
ply:addMoney(-amount)
|
||||
end
|
||||
|
||||
ply:DoAnimationEvent(ACT_GMOD_GESTURE_ITEM_DROP)
|
||||
|
||||
timer.Simple(1, function()
|
||||
if not IsValid(ply) then return end
|
||||
if not IsValid(recipient) then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("unable", "/cheque", ""))
|
||||
return
|
||||
end
|
||||
|
||||
local trace = {}
|
||||
trace.start = ply:EyePos()
|
||||
trace.endpos = trace.start + ply:GetAimVector() * 85
|
||||
trace.filter = ply
|
||||
|
||||
local tr = util.TraceLine(trace)
|
||||
|
||||
local Cheque = ents.Create("darkrp_cheque")
|
||||
Cheque.DarkRPItem = chequeTable
|
||||
Cheque:SetPos(tr.HitPos)
|
||||
Cheque:Setowning_ent(ply)
|
||||
Cheque:Setrecipient(recipient)
|
||||
|
||||
local min_amount = math.Min(amount, 2147483647)
|
||||
Cheque:Setamount(min_amount)
|
||||
Cheque:Spawn()
|
||||
|
||||
DarkRP.placeEntity(Cheque, tr, ply)
|
||||
|
||||
hook.Call("playerDroppedCheque", nil, ply, recipient, min_amount, Cheque)
|
||||
end)
|
||||
return ""
|
||||
end
|
||||
DarkRP.defineChatCommand("cheque", CreateCheque, 0.3)
|
||||
DarkRP.defineChatCommand("check", CreateCheque, 0.3) -- for those of you who can't spell
|
||||
|
||||
local function ccSetMoney(ply, args)
|
||||
local amount = DarkRP.toInt(args[2])
|
||||
|
||||
if not amount then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return
|
||||
end
|
||||
|
||||
local target = DarkRP.findPlayer(args[1])
|
||||
|
||||
if not target then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("could_not_find", tostring(args[1])))
|
||||
return
|
||||
end
|
||||
|
||||
amount = hook.Call("playerWalletChanged", GAMEMODE, target, amount - target:getDarkRPVar("money"), target:getDarkRPVar("money")) or amount
|
||||
|
||||
DarkRP.storeMoney(target, amount)
|
||||
target:setDarkRPVar("money", amount)
|
||||
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("you_set_x_money", target:Nick(), DarkRP.formatMoney(amount), ""))
|
||||
|
||||
DarkRP.notify(target, 0, 4, DarkRP.getPhrase("x_set_your_money", ply:EntIndex() == 0 and "Console" or ply:Nick(), DarkRP.formatMoney(amount), ""))
|
||||
|
||||
if ply:EntIndex() == 0 then
|
||||
DarkRP.log("Console set " .. target:SteamName() .. "'s money to " .. DarkRP.formatMoney(amount), Color(30, 30, 30))
|
||||
else
|
||||
DarkRP.log(ply:Nick() .. " (" .. ply:SteamID() .. ") set " .. target:SteamName() .. "'s money to " .. DarkRP.formatMoney(amount), Color(30, 30, 30))
|
||||
end
|
||||
end
|
||||
DarkRP.definePrivilegedChatCommand("setmoney", "DarkRP_SetMoney", ccSetMoney)
|
||||
|
||||
local function ccAddMoney(ply, args)
|
||||
local amount = DarkRP.toInt(args[2])
|
||||
|
||||
if not amount then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("invalid_x", DarkRP.getPhrase("arguments"), ""))
|
||||
return
|
||||
end
|
||||
|
||||
local target = DarkRP.findPlayer(args[1])
|
||||
|
||||
if not target then
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("could_not_find", tostring(args[1])))
|
||||
return
|
||||
end
|
||||
|
||||
if target then
|
||||
target:addMoney(amount)
|
||||
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("you_gave", target:Nick(), DarkRP.formatMoney(amount)))
|
||||
|
||||
DarkRP.notify(target, 0, 4, DarkRP.getPhrase("x_set_your_money", ply:EntIndex() == 0 and "Console" or ply:Nick(), DarkRP.formatMoney(target:getDarkRPVar("money")), ""))
|
||||
if ply:EntIndex() == 0 then
|
||||
DarkRP.log("Console added " .. DarkRP.formatMoney(amount) .. " to " .. target:SteamName() .. "'s wallet", Color(30, 30, 30))
|
||||
else
|
||||
DarkRP.log(ply:Nick() .. " (" .. ply:SteamID() .. ") added " .. DarkRP.formatMoney(amount) .. " to " .. target:SteamName() .. "'s wallet", Color(30, 30, 30))
|
||||
end
|
||||
else
|
||||
DarkRP.notify(ply, 1, 4, DarkRP.getPhrase("could_not_find", args[1]))
|
||||
end
|
||||
end
|
||||
DarkRP.definePrivilegedChatCommand("addmoney", "DarkRP_SetMoney", ccAddMoney)
|
||||
|
||||
DarkRP.hookStub{
|
||||
name = "playerGaveMoney",
|
||||
description = "Called when a player gives another player money.",
|
||||
parameters = {
|
||||
{
|
||||
name = "player",
|
||||
description = "The player that gives the money.",
|
||||
type = "Player"
|
||||
},
|
||||
{
|
||||
name = "otherPlayer",
|
||||
description = "The player that receives the money.",
|
||||
type = "Player"
|
||||
},
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money.",
|
||||
type = "number"
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
realm = "Server"
|
||||
}
|
||||
|
||||
DarkRP.hookStub{
|
||||
name = "playerDroppedMoney",
|
||||
description = "Called when a player drops some money.",
|
||||
parameters = {
|
||||
{
|
||||
name = "player",
|
||||
description = "The player who dropped the money.",
|
||||
type = "Player"
|
||||
},
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money dropped.",
|
||||
type = "number"
|
||||
},
|
||||
{
|
||||
name = "entity",
|
||||
description = "The entity of the money that was dropped.",
|
||||
type = "Entity"
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
realm = "Server"
|
||||
}
|
||||
|
||||
DarkRP.hookStub{
|
||||
name = "playerDroppedCheque",
|
||||
description = "Called when a player drops a cheque.",
|
||||
parameters = {
|
||||
{
|
||||
name = "player",
|
||||
description = "The player who dropped the cheque.",
|
||||
type = "Player"
|
||||
},
|
||||
{
|
||||
name = "player",
|
||||
description = "The player the cheque was written to.",
|
||||
type = "Player"
|
||||
},
|
||||
{
|
||||
name = "amount",
|
||||
description = "The amount of money the cheque has.",
|
||||
type = "number"
|
||||
},
|
||||
{
|
||||
name = "entity",
|
||||
description = "The entity of the cheque that was dropped.",
|
||||
type = "Entity"
|
||||
}
|
||||
},
|
||||
returns = {
|
||||
},
|
||||
realm = "Server"
|
||||
}
|
||||
Reference in New Issue
Block a user