mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
DEFINE_BASECLASS( "base_anim" )
|
||||
|
||||
ENT.Base = "base_entity"
|
||||
ENT.Type = "anim"
|
||||
|
||||
ENT.PrintName = "Cigarette"
|
||||
ENT.Author = "Fruity"
|
||||
ENT.Information = "Une cigarette pour fumer."
|
||||
ENT.Category = "HL2 RP"
|
||||
|
||||
ENT.Editable = true
|
||||
ENT.Spawnable = true
|
||||
ENT.AdminSpawnable = true
|
||||
ENT.AdminOnly = true
|
||||
|
||||
ENT.smokeDelay = 0
|
||||
|
||||
ENT.flexIndexAshes = 1
|
||||
ENT.addValueAshes = 0.05
|
||||
ENT.minValueAshes = 0
|
||||
ENT.maxValueAshes = 0.5
|
||||
|
||||
ENT.flexIndexLength = 0
|
||||
ENT.addValueLength = 0.01
|
||||
ENT.minValueLength = 0
|
||||
ENT.maxValueLength = 1
|
||||
|
||||
ENT.AutomaticFrameAdvance = true -- Must be set on client
|
||||
|
||||
function ENT:SpawnFunction( client, tr, ClassName )
|
||||
if (!client:Alive()) then return false end
|
||||
|
||||
local base = ents.Create( ClassName )
|
||||
base:SetParent(client)
|
||||
base:SetOwner(client)
|
||||
|
||||
return base
|
||||
end
|
||||
|
||||
function ENT:Initialize()
|
||||
end
|
||||
|
||||
function ENT:ChangeSkinStateTimer()
|
||||
PLUGIN:ChangeSkinStateTimer(self)
|
||||
end
|
||||
|
||||
function ENT:CreateJetLengthTimer()
|
||||
PLUGIN:CreateJetLengthTimer(self)
|
||||
end
|
||||
|
||||
-- Cigarette gets smaller over time and ashes effect
|
||||
function ENT:GetAshesValue()
|
||||
return PLUGIN:GetAshesValue(self)
|
||||
end
|
||||
|
||||
function ENT:GetLengthValue(currentLength)
|
||||
return PLUGIN:GetLengthValue(self, currentLength)
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
if (SERVER) then
|
||||
PLUGIN:CigaretteThink(self)
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:Draw()
|
||||
if (!IsValid(self) or !IsValid(self:GetParent())) then return false end
|
||||
|
||||
if (self:GetParent():GetMoveType() == 8) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (LocalPlayer() == self:GetParent() and !ix.option.Get("firstPersonCigarette", true)) then
|
||||
if ix.config.Get("thirdperson") then
|
||||
if !ix.option.Get("thirdpersonEnabled", false) then
|
||||
return false
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
self:DrawModel()
|
||||
end
|
||||
194
gamemodes/darkrp/plugins/cigarettes/items/base/sh_cigarettes.lua
Normal file
194
gamemodes/darkrp/plugins/cigarettes/items/base/sh_cigarettes.lua
Normal file
@@ -0,0 +1,194 @@
|
||||
--[[
|
||||
| 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
|
||||
@@ -0,0 +1,62 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Lighter"
|
||||
ITEM.base = "base_tools"
|
||||
ITEM.category = "Outils"
|
||||
ITEM.model = Model("models/willardnetworks/cigarettes/lighter.mdl")
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.description = "Handheld device designed to spark a flame to light things on fire."
|
||||
|
||||
function ITEM:OnRunLight()
|
||||
local client = self.player
|
||||
if !client then return end
|
||||
if !client:Alive() then return end
|
||||
|
||||
if client.cigarette and IsEntity(client.cigarette) and client.cigarette.cigaretteItem and
|
||||
client.cigarette.cigaretteItem.GetID and ix.item.instances[client.cigarette.cigaretteItem:GetID()] then
|
||||
client.cigarette.isLit = true
|
||||
netstream.Start(client, "CigaretteSetClientEntity", client.cigarette.cigaretteItem:GetID(), client.cigarette, true)
|
||||
end
|
||||
|
||||
client:NotifyLocalized("Vous commencez à fumer une cigarette.")
|
||||
client:EmitSound(self.useSound)
|
||||
|
||||
self:DamageDurability(1)
|
||||
end
|
||||
|
||||
function ITEM:OnCanRunLight()
|
||||
local client = self.player
|
||||
if !client then return end
|
||||
if !client:Alive() then return end
|
||||
|
||||
if client.cigarette and !client.cigarette.isLit then return true end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
ITEM.functions.light = {
|
||||
name = "Allumer une cigarette",
|
||||
tip = "Allumer une cigarette",
|
||||
icon = "icon16/brick_add.png",
|
||||
OnRun = function(item)
|
||||
item:OnRunLight()
|
||||
|
||||
return false
|
||||
end,
|
||||
|
||||
OnCanRun = function(item)
|
||||
if item:OnCanRunLight() then return true end
|
||||
|
||||
return false
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Cigarette"
|
||||
ITEM.description = "Une fine tige de papier enroulée sur elle-même, remplie d'un mélange de tabac finement coupé et d'autres substances, souvent enrobée d'un filtre en papier ou en cellulose. Lorsqu'allumée, elle produit de la fumée inhalée par l'utilisateur."
|
||||
@@ -0,0 +1,22 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Cigares Goodfella"
|
||||
ITEM.category = "Drogues"
|
||||
ITEM.model = Model("models/willardnetworks/cigarettes/cigarette_pack_goodfella.mdl")
|
||||
ITEM.description = "Un paquet de cigares de haute qualité emballés dans du papier à tabac à grammage élevé contenant jusqu'à 8 cigares."
|
||||
ITEM.allowNesting = true
|
||||
ITEM.restriction = {"cigarette"}
|
||||
ITEM.noEquip = true
|
||||
|
||||
function ITEM:OnBagInitialized(inventory)
|
||||
inventory:Add("cigarette", 8)
|
||||
end
|
||||
@@ -0,0 +1,34 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Paquet de cigarettes"
|
||||
ITEM.model = Model("models/willardnetworks/cigarettes/cigarette_pack_1.mdl")
|
||||
ITEM.category = "Drogues"
|
||||
ITEM.description = "Le paquet de cigarettes est enveloppé d'un papier fin et doux au toucher, avec le motif de l'Union coloré. Sur la face avant, le logo de l'Union est imprimé en caractères gras et noirs, tandis que des avertissements sanitaires sont inscrits sur la face arrière. En le tenant dans votre main, vous pouvez sentir le poids léger du paquet, ainsi que l'odeur distincte et forte du tabac qui en émane."
|
||||
ITEM.allowNesting = true
|
||||
ITEM.restriction = {"cigarette"}
|
||||
ITEM.noEquip = true
|
||||
|
||||
function ITEM:GetName()
|
||||
return self:GetData("relabeled", false) and "Paquet de cigarettes réétiqueté" or "Paquet de cigarettes - Edition Bienfaiteur"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
return self:GetData("relabeled", false) and "Un paquet de cigarettes réétiqueté pouvant contenir précisément 8 cigarettes" or "Un paquet de cigarettes délivré par l'Union et pouvant contenir précisément 8 cigarettes"
|
||||
end
|
||||
|
||||
function ITEM:GetModel()
|
||||
return self:GetData("relabeled", false) and "models/willardnetworks/cigarettes/cigarette_pack_1.mdl" or "models/willardnetworks/cigarettes/cigarette_pack.mdl"
|
||||
end
|
||||
|
||||
function ITEM:OnBagInitialized(inventory)
|
||||
inventory:Add("cigarette", 8)
|
||||
end
|
||||
@@ -0,0 +1,16 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Briquet en plastique"
|
||||
ITEM.model = Model("models/willardnetworks/cigarettes/lighter.mdl")
|
||||
ITEM.description = "Un petit briquet en plastique avec une surface légèrement texturée pour une meilleure prise en main. Le couvercle s'ouvre facilement pour révéler une petite flamme prête à être allumée."
|
||||
ITEM.useSound = "willardnetworks/cigarettes/normal.wav"
|
||||
ITEM.category = "Outils"
|
||||
ITEM.maxDurability = 8
|
||||
@@ -0,0 +1,22 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Briquet Zippo"
|
||||
ITEM.model = Model("models/willardnetworks/cigarettes/zippo.mdl")
|
||||
ITEM.description = "Le briquet Zippo est un classique intemporel. Avec son design élégant en métal, il est facilement reconnaissable grâce à son fameux 'clic' caractéristique. Il est simple à utiliser : il suffit d'ouvrir le capot, de frotter la pierre contre la molette et de regarder la flamme s'allumer. Pratique et élégant, c'est l'accessoire parfait pour les amateurs de cigares et les fumeurs de cigarettes."
|
||||
ITEM.useSound = "willardnetworks/cigarettes/zippo.wav"
|
||||
ITEM.maxDurability = 24
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(24.98, 400.03, 0),
|
||||
fov = 0.29
|
||||
}
|
||||
47
gamemodes/darkrp/plugins/cigarettes/sh_plugin.lua
Normal file
47
gamemodes/darkrp/plugins/cigarettes/sh_plugin.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
--[[
|
||||
| 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 ix = ix
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
PLUGIN.name = "Cigarettes"
|
||||
PLUGIN.author = "Fruity"
|
||||
PLUGIN.description = "Adds non PAC3 cigarettes."
|
||||
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
|
||||
PLUGIN.allowedModels = {
|
||||
[1] = "models/willardnetworks/citizens/",
|
||||
[2] = "models/willardnetworks/vortigaunt.mdl",
|
||||
[3] = "models/wn7new/metropolice/"
|
||||
}
|
||||
|
||||
if (CLIENT) then
|
||||
ix.option.Add("firstPersonCigarette", ix.type.bool, true, {
|
||||
category = "Cigarettes"
|
||||
})
|
||||
end
|
||||
|
||||
ix.lang.AddTable("english", {
|
||||
optFirstPersonCigarette = "Montrer la cigarette à la première personne",
|
||||
optdFirstPersonCigarette = "Bascule si vous voulez que la cigarette s'affiche à la première personne ou non."
|
||||
})
|
||||
|
||||
ix.lang.AddTable("french", {
|
||||
optFirstPersonCigarette = "Montrer la cigarette à la première personne",
|
||||
optdFirstPersonCigarette = "Bascule si vous voulez que la cigarette s'affiche à la première personne ou non."
|
||||
})
|
||||
|
||||
ix.lang.AddTable("spanish", {
|
||||
optFirstPersonCigarette = "Mostrar el Cigarro en Primera Persona",
|
||||
optdFirstPersonCigarette = "Alterna si quieres que el cigarro se muestre en primera persona o no."
|
||||
})
|
||||
246
gamemodes/darkrp/plugins/cigarettes/sv_plugin.lua
Normal file
246
gamemodes/darkrp/plugins/cigarettes/sv_plugin.lua
Normal file
@@ -0,0 +1,246 @@
|
||||
--[[
|
||||
| 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 ents = ents
|
||||
local tonumber = tonumber
|
||||
local netstream = netstream
|
||||
local timer = timer
|
||||
local IsValid = IsValid
|
||||
local IsEntity = IsEntity
|
||||
local string = string
|
||||
local tostring = tostring
|
||||
local math = math
|
||||
local Vector = Vector
|
||||
local CurTime = CurTime
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
function PLUGIN:CreateCigarette(item, client)
|
||||
local entity = ents.Create("ix_cigarette")
|
||||
entity:SetOwner(client)
|
||||
entity:SetParent(client)
|
||||
entity:Fire("SetParentAttachment", "cigarette", 0.01)
|
||||
|
||||
entity:SetModel( "models/willardnetworks/cigarettes/cigarette.mdl" )
|
||||
entity:SetModelScale(0.7)
|
||||
|
||||
entity:CreateJetLengthTimer()
|
||||
entity:ChangeSkinStateTimer()
|
||||
|
||||
entity:Spawn()
|
||||
|
||||
local length = item:GetData("length", 0)
|
||||
entity:SetFlexWeight(entity.flexIndexLength, tonumber(length))
|
||||
|
||||
client.cigarette = entity
|
||||
item.cigaretteEnt = entity
|
||||
entity.cigaretteItem = item
|
||||
netstream.Start(client, "CigaretteSetClientEntity", item:GetID(), entity, false)
|
||||
end
|
||||
|
||||
function PLUGIN:CreateCigaretteSmoke(entity)
|
||||
entity.smoke = ents.Create( "env_smokestack" )
|
||||
entity.smoke:SetParent(entity:GetParent())
|
||||
entity.smoke:Fire("SetParentAttachment", "cigarette_glow", 0.01)
|
||||
|
||||
entity.smoke:SetKeyValue("InitialState", "1")
|
||||
entity.smoke:SetKeyValue("WindAngle", "90 0 0")
|
||||
entity.smoke:SetKeyValue("WindSpeed", "0.6")
|
||||
entity.smoke:SetKeyValue("rendercolor", "162 162 162")
|
||||
entity.smoke:SetKeyValue("renderamt", "6") -- alpha
|
||||
entity.smoke:SetKeyValue("SmokeMaterial", "particle/smokesprites_0001.vmt")
|
||||
entity.smoke:SetKeyValue("BaseSpread", "0.2")
|
||||
entity.smoke:SetKeyValue("SpreadSpeed", "0.4")
|
||||
entity.smoke:SetKeyValue("Speed", "1.4")
|
||||
entity.smoke:SetKeyValue("StartSize", "0.3")
|
||||
entity.smoke:SetKeyValue("EndSize", "1.5")
|
||||
entity.smoke:SetKeyValue("roll", "32")
|
||||
entity.smoke:SetKeyValue("Rate", "24")
|
||||
entity.smoke:SetKeyValue("twist", "32")
|
||||
|
||||
entity:DeleteOnRemove(entity.smoke)
|
||||
|
||||
entity.smoke:Spawn()
|
||||
entity.smoke:Activate()
|
||||
|
||||
timer.Simple(0.25, function()
|
||||
if !IsValid(entity) then return end
|
||||
if !IsEntity(entity) then return end
|
||||
if entity.cigaretteItem and entity.cigaretteItem.GetID and ix.item.instances[entity.cigaretteItem:GetID()] then
|
||||
local lastSmokePos = tonumber(string.Right(tostring(math.Round(entity:GetFlexWeight(entity.flexIndexLength), 2)), 2))
|
||||
if entity.cigaretteItem:GetData("length", 0) > 0 then
|
||||
self:ChangeSmokePos(entity, entity:GetParent(), lastSmokePos)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function PLUGIN:ChangeSkinStateTimer(entity)
|
||||
if timer.Exists("ChangeSkinStateCigarette_"..entity:EntIndex()) then timer.Remove("ChangeSkinStateCigarette_"..entity:EntIndex()) end
|
||||
|
||||
timer.Create("ChangeSkinStateCigarette_"..entity:EntIndex(), math.random(3, 7), 0, function()
|
||||
if !IsValid(entity) then timer.Remove("ChangeSkinStateCigarette_"..entity:EntIndex()) return end
|
||||
|
||||
local parent = entity:GetParent()
|
||||
if !IsValid(parent) then timer.Remove("ChangeSkinStateCigarette_"..entity:EntIndex()) return end
|
||||
if parent.Alive and !parent:Alive() then timer.Remove("ChangeSkinStateCigarette_"..entity:EntIndex()) return end
|
||||
|
||||
if !entity.state then entity.state = 1 end
|
||||
if (entity.state or 0) != 2 then
|
||||
timer.Adjust("ChangeSkinStateCigarette_"..entity:EntIndex(), 2, 0, nil)
|
||||
else
|
||||
timer.Adjust("ChangeSkinStateCigarette_"..entity:EntIndex(), math.random(3, 7), 0, nil)
|
||||
end
|
||||
|
||||
entity.state = ((entity.state or 0) > 1 and 1 or 2)
|
||||
|
||||
entity:SetSkin(entity.state)
|
||||
if entity.cigaretteItem and entity.cigaretteItem.GetID and ix.item.instances[entity.cigaretteItem:GetID()] then
|
||||
local length = entity:GetFlexWeight(entity.flexIndexLength)
|
||||
entity.cigaretteItem:SetData("length", length)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function PLUGIN:CreateJetLengthTimer(entity)
|
||||
if timer.Exists("ChangeJetLengthCigarette_"..entity:EntIndex()) then timer.Remove("ChangeJetLengthCigarette_"..entity:EntIndex()) end
|
||||
|
||||
timer.Create("ChangeJetLengthCigarette_"..entity:EntIndex(), 0.2, 0, function()
|
||||
if !IsValid(entity) then timer.Remove("ChangeJetLengthCigarette_"..entity:EntIndex()) return end
|
||||
|
||||
local parent = entity:GetParent()
|
||||
if !IsValid(parent) then timer.Remove("ChangeJetLengthCigarette_"..entity:EntIndex()) return end
|
||||
if parent.Alive and !parent:Alive() then timer.Remove("ChangeJetLengthCigarette_"..entity:EntIndex()) return end
|
||||
|
||||
if IsValid(entity.smoke) and parent:GetMoveType() == 8 then entity.smoke:Remove() return end
|
||||
if IsValid(entity) and (!IsValid(entity.smoke) or (IsValid(entity.smoke) and !entity.smoke:GetInternalVariable("JetLength"))) then
|
||||
if parent.cigarette and parent.cigarette.isLit then self:CreateCigaretteSmoke(entity) return end
|
||||
end
|
||||
|
||||
if IsValid(entity.smoke) then
|
||||
if parent:GetVelocity():Length2D() > parent:GetWalkSpeed() then
|
||||
if math.Round(tonumber(entity.smoke:GetInternalVariable("JetLength")), 1) != 0.2 then entity.smoke:SetKeyValue("JetLength", "0.2") end
|
||||
else
|
||||
if tonumber(entity.smoke:GetInternalVariable("JetLength")) != 10 then entity.smoke:SetKeyValue("JetLength", "10") end
|
||||
end
|
||||
end
|
||||
|
||||
if entity.cigaretteItem and entity.cigaretteItem.GetID and ix.item.instances[entity.cigaretteItem:GetID()] then
|
||||
if !parent then return end
|
||||
if !entity.cigaretteItem:CheckIfModelAllowed(parent) then entity.cigaretteItem:OnRunStopSmoke(parent) end
|
||||
end
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
function PLUGIN:ChangeSmokePos(entity, parent, fixedPos)
|
||||
if (IsValid(entity) and IsEntity(entity) and entity) then
|
||||
if (entity.smoke and IsEntity(entity.smoke) and parent and IsValid(parent)) then
|
||||
if parent:GetMoveType() != 8 then
|
||||
if fixedPos then
|
||||
fixedPos = (fixedPos * 0.001) * 10
|
||||
entity.smoke:SetPos(entity.smoke:GetPos() + Vector(-fixedPos * parent:GetForward(), 0, 0))
|
||||
return
|
||||
end
|
||||
|
||||
entity.smoke:SetPos(entity.smoke:GetPos() + Vector(-0.001 * parent:GetForward(), 0, 0))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:CigaretteThink(entity)
|
||||
local currentWeightLength = entity:GetFlexWeight( entity.flexIndexLength )
|
||||
local parent = entity:GetParent()
|
||||
|
||||
if !parent.cigarette then return end
|
||||
if !parent.cigarette.isLit then return end
|
||||
|
||||
if currentWeightLength >= entity.maxValueLength then
|
||||
if (SERVER) then
|
||||
if IsValid(entity) and IsEntity(entity) then
|
||||
if entity.cigaretteItem and entity.cigaretteItem.SmokingFinished then
|
||||
entity.cigaretteItem:SmokingFinished(entity:GetParent(), 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if CurTime() < entity.smokeDelay then return end
|
||||
if parent and parent:GetMoveType() == 8 then return end
|
||||
if parent and !parent:Alive() or !parent then
|
||||
if (SERVER) then
|
||||
if IsValid(entity) and IsEntity(entity) then
|
||||
entity:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
self:ChangeSmokePos(entity, parent)
|
||||
|
||||
-- Length
|
||||
entity:SetFlexWeight( entity.flexIndexLength, entity:GetLengthValue(currentWeightLength) )
|
||||
|
||||
-- Ashes
|
||||
entity:SetFlexWeight( entity.flexIndexAshes, entity:GetAshesValue() )
|
||||
|
||||
entity.smokeDelay = CurTime() + 3
|
||||
|
||||
entity:NextThink( CurTime() ) -- Set the next think to run as soon as possible, i.e. the next frame.
|
||||
return true -- Apply NextThink call
|
||||
end
|
||||
|
||||
-- Cigarette gets smaller over time and ashes effect
|
||||
function PLUGIN:GetAshesValue(entity)
|
||||
local currentWeightAshes = entity:GetFlexWeight( entity.flexIndexAshes )
|
||||
|
||||
if currentWeightAshes < 0.5 or currentWeightAshes < 0.1 then
|
||||
return math.Clamp( currentWeightAshes + entity.addValueAshes, entity.minValueAshes, entity.maxValueAshes)
|
||||
else
|
||||
return 0.1
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:GetLengthValue(entity, currentLength)
|
||||
return math.Clamp( currentLength + entity.addValueLength, entity.minValueLength, entity.maxValueLength )
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerDisconnected(client)
|
||||
if (client.cigarette) then
|
||||
local cigaretteItem = client.cigarette.cigaretteItem
|
||||
if cigaretteItem then
|
||||
cigaretteItem:OnRunStopSmoke()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:CanPlayerUseCharacter(client, character)
|
||||
if (client.cigarette and IsValid(client.cigarette)) then
|
||||
return false, "Vous avez actuellement une cigarette dans la bouche, vous ne pouvez pas changer de personnage tout en l'ayant !"
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerDeath(client)
|
||||
if (client.cigarette) then
|
||||
local cigaretteItem = client.cigarette.cigaretteItem
|
||||
|
||||
if (cigaretteItem) then
|
||||
cigaretteItem:OnRunStopSmoke()
|
||||
|
||||
if (cigaretteItem.cigaretteEnt) then cigaretteItem.cigaretteEnt:Remove() end
|
||||
if (client.cigarette) then client.cigarette = nil end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user