--[[ | 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