dobrograd-13-06-2022/garrysmod/gamemodes/darkrp/gamemode/modules/money/sv_money.lua

149 lines
3.8 KiB
Lua
Raw Normal View History

2023-11-16 15:01:19 +05:00
/*---------------------------------------------------------------------------
functions
---------------------------------------------------------------------------*/
local meta = FindMetaTable('Player')
function meta:addMoney(amount)
if not amount then return false end
if not IsValid(self) then return end
if not self.inv then
self:SetLocalVar('money', 0)
if amount > 0 then
timer.Simple(1, function()
self:addMoney(amount)
end)
end
return
end
local given
if amount > 0 then
given = self:AddItem('money', math.floor(amount))
elseif amount < 0 then
given = self:TakeItem('money', math.floor(-amount))
else
self:SetLocalVar('money', self:HasItem('money') or 0)
return
end
local total = self:HasItem('money') or 0
hook.Call('playerWalletChanged', GAMEMODE, self, amount, self:GetNetVar('money'))
self:SetLocalVar('money', total)
if amount > 0 and given < amount then
local toDrop = amount - given
for contID, cont in pairs(self.inv.conts) do
cont:DropNewItem('money', {amount = toDrop})
self:Notify('warning', DarkRP.formatMoney(toDrop), L.didnt_fit)
break
end
end
return given
end
hook.Add('octoinv.dropped', 'DarkRP.money', function(cont, item, ent)
if not item or item.class ~= 'money' then return end
local ply = cont.inv.owner
timer.Simple(0, function() -- wait for item amount to be updated
if not IsValid(ply) or not ply:IsPlayer() then return end
ply:addMoney(0)
end)
end)
hook.Add('octoinv.added', 'DarkRP.money', function(cont, item, amount)
if not item or item.class ~= 'money' then return end
local ply = cont.inv.owner
if IsValid(cont.inv.owner) and cont.inv.owner:IsPlayer() then
ply:addMoney(0)
end
end)
hook.Add('octoinv.taken', 'DarkRP.money', function(cont, item, amount)
if not item or item.class ~= 'money' then return end
local ply = cont.inv.owner
if IsValid(cont.inv.owner) and cont.inv.owner:IsPlayer() then
ply:addMoney(0)
end
end)
local function death(ply)
timer.Simple(0, function()
ply:addMoney(0)
end)
end
hook.Add('PlayerDeath', 'DarkRP.money', death)
hook.Add('PlayerSilentDeath', 'DarkRP.money', death)
function DarkRP.payPlayer(ply1, ply2, amount)
if not IsValid(ply1) or not IsValid(ply2) then return end
ply1:addMoney(-amount)
ply2:addMoney(amount)
hook.Run('DarkRP.payPlayer', ply1, ply2, amount or 1)
end
function meta:payDay()
if not IsValid(self) then return end
if not self:isArrested() then
if self:GetKarma() <= -25 then
-- self:Notify('warning', 'У тебя слишком низкая карма для получения зарплаты')
return
end
-- if self:IsAFK() then return end
local amount = math.floor(self:Salary())
local suppress, message, hookAmount = hook.Call('playerGetSalary', GAMEMODE, self, amount)
amount = hookAmount or amount
local bonus = 0
if self:GetKarma() >= 200 then
bonus = math.floor(amount)
elseif self:GetKarma() >= 50 then
bonus = math.floor(amount * 0.5)
elseif self:GetKarma() > 20 then
bonus = math.floor(amount * 0.2)
end
if amount < 0 or not amount or self:getJobTable().hobo then
if not suppress then self:Notify('ooc', message or L.payday_unemployed) end
else
self:addMoney(amount + bonus)
local text = message or L.payday_message:format(DarkRP.formatMoney(amount))
if bonus > 0 then text = L.bonus_salary:format(text, DarkRP.formatMoney(bonus)) end
if not suppress then self:Notify('hint', text) end
end
else
self:Notify('warning', L.payday_missed)
end
end
function DarkRP.createMoneyBag(pos, amount, ply)
ent = ents.Create 'octoinv_item'
ent:SetPos(pos)
ent:SetData('money', math.Min(amount, 2147483647))
ent.Model = 'models/props/cs_assault/money.mdl'
ent:Spawn()
ent:Activate()
local phys = ent:GetPhysicsObject()
if IsValid(phys) then
phys:Wake()
end
if ply then ply:LinkEntity(ent) end
return ent
end