dobrograd-13-06-2022/garrysmod/gamemodes/darkrp/gamemode/modules/money/sv_money.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

148 lines
3.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------
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