mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
194 lines
5.8 KiB
Lua
194 lines
5.8 KiB
Lua
|
|
--[[
|
||
|
|
| This file was obtained through the combined efforts
|
||
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
|
|
||
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
|
|
||
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
local PLUGIN = PLUGIN
|
||
|
|
|
||
|
|
ITEM.name = "Cigarette"
|
||
|
|
ITEM.description = "Une simple cigarette contenant du tabac, enroulé dans du papier fin et prête à être fumée.."
|
||
|
|
ITEM.model = Model("models/willardnetworks/cigarettes/cigarette.mdl")
|
||
|
|
ITEM.category = "Drogues"
|
||
|
|
ITEM.width = 1
|
||
|
|
ITEM.height = 1
|
||
|
|
ITEM.junkCleanTime = 120
|
||
|
|
|
||
|
|
if (CLIENT) then
|
||
|
|
function ITEM:PopulateTooltip(tooltip)
|
||
|
|
local length = self:GetData("length", 0)
|
||
|
|
|
||
|
|
local panel = tooltip:AddRowAfter("name", "remaining tobacco")
|
||
|
|
panel:SetBackgroundColor(derma.GetColor("Warning", tooltip))
|
||
|
|
panel:SetText("Tabac restant : "..(math.Round(math.Remap(length, 0, 1, 100, 0), 0)).."%")
|
||
|
|
panel:SizeToContents()
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:PaintOver(item, w, h)
|
||
|
|
local length = item:GetData("length", 0)
|
||
|
|
surface.SetDrawColor(length >= 1 and (Color(255, 110, 110, 100)) or (length < 1 and length != 0 and Color(255, 193, 110, 100)) or (Color(110, 255, 110, 100)))
|
||
|
|
surface.DrawOutlinedRect(1, 1, w - 2, h - 2)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:GetModelFlexes()
|
||
|
|
return {[0] = self:GetData("length", 0)}
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:CreateCigarette(client)
|
||
|
|
if ( SERVER ) then
|
||
|
|
PLUGIN:CreateCigarette(self, client)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:CheckIfModelAllowed(client)
|
||
|
|
local faceIndex = client:FindBodygroupByName("face")
|
||
|
|
|
||
|
|
if string.find(client:GetModel(), "models/willardnetworks/citizens/") then
|
||
|
|
local headIndex = client:FindBodygroupByName("head")
|
||
|
|
if client:GetBodygroup(faceIndex) == 1 or client:GetBodygroup(headIndex) == 4 then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if string.find(client:GetModel(), "models/willardnetworks/vortigaunt.mdl") and client:GetBodygroup(faceIndex) == 1 then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
if string.find(client:GetModel(), "models/wn7new/metropolice/") and client:GetBodygroup(client:FindBodygroupByName("Cp_Head")) > 0 then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
for _, v in pairs(PLUGIN.allowedModels) do
|
||
|
|
if string.find(client:GetModel(), v) then return true end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:OnCanRunSmoke()
|
||
|
|
local client = self.player
|
||
|
|
|
||
|
|
local length = self:GetData("length", 0)
|
||
|
|
if length >= 1 then return false end
|
||
|
|
if client and !self:CheckIfModelAllowed(client) then return false end
|
||
|
|
if math.Round(math.Remap(length, 0, 1, 100, 0), 0) == 0 then return false end
|
||
|
|
if self.entity then return false end
|
||
|
|
if client and client.cigarette and IsValid(client.cigarette) then return false end
|
||
|
|
if !self.cigaretteEnt then return true end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:OnRunSmoke()
|
||
|
|
local client = self.player
|
||
|
|
if !client then return false end
|
||
|
|
if (!client:Alive()) then return false end
|
||
|
|
|
||
|
|
self:CreateCigarette(client)
|
||
|
|
client:NotifyLocalized("Vous avez inséré la cigarette dans votre bouche. Utilisez un briquet pour l'allumer.")
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:OnRunStopSmoke(client, value, bRemove)
|
||
|
|
client = client or self.player
|
||
|
|
|
||
|
|
if !client then return false end
|
||
|
|
if (!client:Alive()) then return false end
|
||
|
|
|
||
|
|
if (value and !bRemove) then
|
||
|
|
self:SetData("length", value)
|
||
|
|
end
|
||
|
|
|
||
|
|
if IsValid(self.cigaretteEnt) and IsEntity(self.cigaretteEnt) then
|
||
|
|
if !value and !bRemove then
|
||
|
|
local length = self.cigaretteEnt:GetFlexWeight(self.cigaretteEnt.flexIndexLength)
|
||
|
|
self:SetData("length", length)
|
||
|
|
end
|
||
|
|
|
||
|
|
self.cigaretteEnt:Remove()
|
||
|
|
client.cigarette = nil
|
||
|
|
end
|
||
|
|
|
||
|
|
self.cigaretteEnt = nil
|
||
|
|
|
||
|
|
client:NotifyLocalized(self:GetData("length") == 1 and "Vous avez fini de fumer la cigarette, il ne reste que le mégot." or "Vous avez enlevé la cigarette de votre bouche.")
|
||
|
|
|
||
|
|
local itemID = self:GetID()
|
||
|
|
if bRemove then
|
||
|
|
self:Remove()
|
||
|
|
end
|
||
|
|
|
||
|
|
netstream.Start(client, "CigaretteSetClientEntity", itemID, nil, nil)
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:OnCanRunStopSmoke()
|
||
|
|
local length = self:GetData("length", 0)
|
||
|
|
if length >= 1 then return false end
|
||
|
|
if math.Round(math.Remap(length, 0, 1, 100, 0), 0) == 0 then return false end
|
||
|
|
if self.cigaretteEnt and IsEntity(self.cigaretteEnt) then return true end
|
||
|
|
if self.player and !self:CheckIfModelAllowed(self.player) then return false end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:SmokingFinished(client, value)
|
||
|
|
self:OnRunStopSmoke(client, value, true)
|
||
|
|
end
|
||
|
|
|
||
|
|
function ITEM:OnTransferred(curInv, inventory)
|
||
|
|
local client = self.player
|
||
|
|
if client and client.cigarette and IsEntity(client.cigarette) and client.cigarette.cigaretteItem and client.cigarette.cigaretteItem == self then
|
||
|
|
self:OnRunStopSmoke()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
ITEM.functions.smoke = {
|
||
|
|
name = "Placez dans la bouche",
|
||
|
|
tip = "Placez la cigarette dans votre bouche.",
|
||
|
|
icon = "icon16/brick_add.png",
|
||
|
|
OnRun = function(item)
|
||
|
|
item:OnRunSmoke()
|
||
|
|
|
||
|
|
return false
|
||
|
|
end,
|
||
|
|
|
||
|
|
OnCanRun = function(item)
|
||
|
|
if item:OnCanRunSmoke() then return true end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
}
|
||
|
|
|
||
|
|
ITEM.functions.stopsmoke = {
|
||
|
|
name = "Retirer de la bouche",
|
||
|
|
tip = "Retirez la cigarette de votre bouche/éteignez-la.",
|
||
|
|
icon = "icon16/brick_add.png",
|
||
|
|
OnRun = function(item)
|
||
|
|
item:OnRunStopSmoke()
|
||
|
|
|
||
|
|
return false
|
||
|
|
end,
|
||
|
|
OnCanRun = function(item)
|
||
|
|
if item:OnCanRunStopSmoke() then return true end
|
||
|
|
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
}
|
||
|
|
|
||
|
|
if (CLIENT) then
|
||
|
|
netstream.Hook("CigaretteSetClientEntity", function(itemID, entIndex, isLit)
|
||
|
|
if itemID and ix.item.instances[itemID] then
|
||
|
|
ix.item.instances[itemID].cigaretteEnt = entIndex or nil
|
||
|
|
end
|
||
|
|
|
||
|
|
LocalPlayer().cigarette = entIndex or nil
|
||
|
|
|
||
|
|
if !LocalPlayer().cigarette then return end
|
||
|
|
LocalPlayer().cigarette.isLit = isLit or nil
|
||
|
|
end)
|
||
|
|
end
|