Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- AddCSLuaFile("cl_init.lua")
- AddCSLuaFile("shared.lua")
- include('shared.lua')
- function ENT:SpawnFunction(ply, tr)
- if (!tr.Hit) then return end
- local SpawnPos = tr.HitPos + tr.HitNormal * 20
- local ent = ents.Create("drugfactory")
- ent:SetPos(SpawnPos)
- ent:Spawn()
- ent:Activate()
- return ent
- end
- util.AddNetworkString("building")
- function ENT:Initialize()
- local pl = self.Owner
- if (IsValid(pl)) then
- self.Entity:SetModel("models/props_c17/furniturestove001a.mdl")
- self.Entity:PhysicsInit(SOLID_VPHYSICS)
- self.Entity:SetMoveType(MOVETYPE_VPHYSICS)
- self.Entity:SetSolid(SOLID_VPHYSICS)
- self.Entity:SetUseType(SIMPLE_USE)
- local phys = self.Entity:GetPhysicsObject()
- if(phys:IsValid()) then
- phys:Wake()
- end
- self.Entity:SetNWBool("sparking",false)
- self.Entity:SetNWInt("damage",250)
- self.Entity:SetNWInt("maxhealth",250)
- self.Entity:SetNWInt("upgrade", 0)
- pl:SetNWInt("max" .. self:GetClass(),pl:GetNWInt("max" .. self:GetClass()) + 1)
- net.Start("building")
- net.WriteString(self.Entity:EntIndex())
- net.Send(pl)
- self.LastUsed = CurTime()
- self.Booze = 0
- self.Drugs = 0
- self.RandomDrugs = 0
- self.SOffense = 0
- self.SDefense = 0
- self.SWeapmod = 0
- self.Uber = 0
- self.Entity:SetNWInt("power",0)
- self.Refmode = 0
- self.Payout = 600
- hook.Add("PlayerDisconnected",tostring(self.Entity) .. "playerdisconnect", function(ply)
- if (ply == self.Owner) then
- timer.Create(tostring(self.Entity) .. "disconnected",300,1,function()
- if (IsValid(self)) then
- if (!IsValid(self.Owner)) then
- self:Remove()
- end
- end
- end)
- end
- end)
- hook.Add("PlayerInitialSpawn",tostring(self.Entity) .. "playerspawn", function(ply)
- timer.Create(tostring(self.Entity) .. "spawn",3,1,function()
- local entity = self.Entity
- if (IsValid(entity)) then
- local steamid = entity.OwnerID
- if (IsValid(ply)) then
- if (ply:SteamID() == steamid) then
- entity.Owner = ply
- net.Start("building")
- net.WriteString(self.Entity:EntIndex())
- net.Send(ply)
- ply:SetNWInt("max" .. self:GetClass(),ply:GetNWInt("max" .. self:GetClass()) + 1)
- end
- end
- end
- end)
- end)
- else
- self.Entity:Remove()
- end
- end
- util.AddNetworkString("drugfactorygui")
- function ENT:Use(activator,caller)
- local ply = self.Owner
- if (IsValid(ply) && IsValid(activator)) then
- if self.LastUsed > CurTime() then
- self.LastUsed = CurTime() + 0.3
- return
- end
- self.LastUsed = CurTime() + 0.3
- net.Start("drugfactorygui")
- net.WriteString(tostring(self.Entity:GetNWInt("upgrade")))
- net.WriteString(tostring(self.Entity:EntIndex()))
- net.WriteString(tostring(self.Booze))
- net.WriteString(tostring(self.Drugs))
- net.WriteString(tostring(self.RandomDrugs))
- net.WriteString(tostring(self.SDefense))
- net.WriteString(tostring(self.SOffense))
- net.WriteString(tostring(self.SWeapmod))
- net.WriteString(tostring(self.Uber))
- net.WriteString(tostring(self.Refmode))
- net.Send(activator)
- end
- end
- function ENT:Think()
- end
- function ENT:CalcBooze(gun)
- if (self.Booze + 1 >= self.MaxBooze) then
- self.Booze = 0
- self.Entity:CalcDrug(gun)
- else
- self.Booze = self.Booze + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- function ENT:CalcDrug(gun)
- if (self.Drugs + 1 > self.MaxDrug) then
- self.Drugs = 0
- self.Entity:CalcRandom(gun)
- else
- self.Drugs = self.Drugs + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- function ENT:CalcRandom(gun)
- if (self.RandomDrugs + 1 > self.MaxRandom) then
- self.RandomDrugs = 0
- self.Entity:CalcSuper(gun,0)
- else
- self.RandomDrugs = self.RandomDrugs + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- function ENT:CalcSuper(gun,type)
- local ply = self.Owner
- if (IsValid(ply)) then
- if (type == 0) then
- if self.Refmode == 0 then
- Notify(ply,6,3,"Gained $" .. AddComma(10000) .. " from refining drugs")
- ply:AddMoney(10000)
- elseif self.Refmode == 1 then
- if (self.SOffense + 1 > self.MaxSOffense) then
- Notify(ply,1,3,"Drug Refinery Superdrug Offense overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugoffense")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SOffense = self.SOffense + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- elseif self.Refmode == 2 then
- if (self.SDefense + 1 > self.MaxSDefense) then
- Notify(ply,1,3,"Drug Refinery Superdrug Defense overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugdefense")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SDefense = self.SDefense + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- elseif self.Refmode == 3 then
- if (self.SWeapmod + 1 > self.MaxSWeapmod) then
- Notify(ply,1,3,"Drug Refinery Superdrug Weapon Mod overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugweapmod")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SWeapmod = self.SWeapmod + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- else
- if (type == 1) then
- if (self.SOffense + 1 > self.MaxSOffense) then
- Notify(ply,1,3,"Drug Refinery Superdrug Offense overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugoffense")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SOffense = self.SOffense + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- elseif (type == 2) then
- if (self.SDefense + 1 > self.MaxSDefense) then
- Notify(ply,1,3,"Drug Refinery Superdrug Defense overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugdefense")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SDefense = self.SDefense + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- elseif (type == 3) then
- if (self.SWeapmod + 1 > self.MaxSWeapmod) then
- Notify(ply,1,3,"Drug Refinery Superdrug Weapon Mod overloaded!")
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- local drug = ents.Create("item_superdrugweapmod")
- drug:SetPos(self.Entity:GetPos()+Vector(50,0,50))
- drug:Spawn()
- else
- self.SWeapmod = self.SWeapmod + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- else
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- end
- function ENT:CalcUber(gun)
- if (self.Uber + 1 > self.MaxUber) then
- Notify(ply,1,3,"Drug Refinery Uberdrug is at limit!")
- if (!IsValid(gun)) then
- local drug = ents.Create("item_uberdrug")
- drug:SetPos(self.Entity:GetPos()+Vector((i*10)-10,10,50))
- drug:Spawn()
- else
- local x,y = gun:GetPos()
- gun:SetPos(x+10,y+10)
- end
- self.Entity:EmitSound("ambient/alarms/klaxon1.wav")
- else
- self.Uber = self.Uber + 1
- if (IsValid(gun)) then
- gun:ResetTime()
- gun:Remove()
- end
- end
- end
- function ENT:EjectSuperDrugs()
- if (self.SOffense > 0) then
- for i=1,self.SOffense,1 do
- local drug = ents.Create("item_superdrugoffense")
- drug:SetPos(self.Entity:GetPos()+Vector((i*10)-10,10,50))
- drug:Spawn()
- end
- self.SOffense = 0
- end
- if (self.SDefense > 0) then
- for i=1,self.SDefense,1 do
- local drug = ents.Create("item_superdrugdefense")
- drug:SetPos(self.Entity:GetPos()+Vector((i*10)-10,0,50))
- drug:Spawn()
- end
- self.SDefense = 0
- end
- if (self.SWeapmod > 0) then
- for i=1,self.SWeapmod,1 do
- local drug = ents.Create("item_superdrugweapmod")
- drug:SetPos(self.Entity:GetPos()+Vector((i*10)-10,-10,50))
- drug:Spawn()
- end
- self.SWeapmod = 0
- end
- end
- function ENT:EjectUberDrug()
- if (self.Uber > 0) then
- for i=1,self.Uber,1 do
- local drug = ents.Create("item_uberdrug")
- drug:SetPos(self.Entity:GetPos()+Vector((i*10)-10,10,50))
- drug:Spawn()
- end
- self.Uber = 0
- end
- end
- function ENT:DropSuperUberDrug()
- local drug = ents.Create("item_superuberdrug")
- drug:SetPos(self.Entity:GetPos()+Vector(0,0,50))
- drug:Spawn()
- end
- util.AddNetworkString("updatedrugs")
- function ENT:Touch(gun)
- if self.Entity:IsPowered() then
- local upgrade = self.Entity:GetNWInt("upgrade")
- local boozeamt = {}
- boozeamt[0] = 50
- boozeamt[1] = 25
- boozeamt[2] = 15
- boozeamt[3] = 10
- local drugamt = {}
- drugamt[0] = 100
- drugamt[1] = 75
- drugamt[2] = 50
- drugamt[3] = 25
- self.MaxBooze = boozeamt[upgrade]
- self.MaxDrug = drugamt[upgrade]
- self.MaxRandom = 10
- self.MaxSOffense = 3
- self.MaxSDefense = 3
- self.MaxSWeapmod = 3
- self.MaxUber = 3
- if (gun:GetClass() == "item_booze" || gun:GetClass() == "item_drug" || gun:GetClass() == "item_random" || gun:GetClass() == "item_superdrugoffense" || gun:GetClass() == "item_superdrugdefense" || gun:GetClass() == "item_superdrugweapmod" || gun:GetClass() == "item_uberdrug") then
- net.Start("updatedrugs")
- net.WriteString(tostring(self.Entity:EntIndex()))
- net.WriteString(tostring(self.Booze))
- net.WriteString(tostring(self.Drugs))
- net.WriteString(tostring(self.RandomDrugs))
- net.WriteString(tostring(self.SOffense))
- net.WriteString(tostring(self.SDefense))
- net.WriteString(tostring(self.SWeapmod))
- net.WriteString(tostring(self.Uber))
- net.Send()
- end
- if (gun:GetClass() == "item_booze" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcBooze(gun)
- elseif (gun:GetClass() == "item_drug" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcDrug(gun)
- elseif (gun:GetClass() == "item_random" && upgrade >= 1 && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcRandom(gun)
- end
- if upgrade >= 2 then
- if (gun:GetClass() == "item_superdrugoffense" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcSuper(gun,1)
- elseif (gun:GetClass() == "item_superdrugdefense" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcSuper(gun,2)
- elseif (gun:GetClass() == "item_superdrugweapmod" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcSuper(gun,3)
- end
- end
- if upgrade >= 3 then
- if (gun:GetClass() == "item_uberdrug" && gun:GetTime() < CurTime() - 1) then
- self.Entity:CalcUber(gun)
- end
- end
- end
- end
- function ENT:CanRefine(mode,callingply)
- local upgrade = self.Entity:GetNWInt("upgrade")
- local ply = self.Owner
- if (IsValid(ply)) then
- if callingply != ply && mode != "eject" then
- return "Only the owner of this Drug Refinery can change settings."
- end
- if !self.Entity:IsPowered() then
- return "Low power."
- end
- if mode == "eject" || mode == "money" then return true end
- if (mode == "offense" || mode == "defense" || mode == "weapmod") then
- if upgrade >= 1 then
- return true
- else
- return "This Refinery is not upgraded enough."
- end
- end
- if mode == "uber" then
- if upgrade >= 2 then
- if self.SOffense >= 3 && self.SDefense >= 3 && self.SWeapmod >= 3 then
- return true
- else
- return "Not enough Superdrugs."
- end
- else
- return "This Refinery is not upgraded enough."
- end
- end
- if mode == "suber" then
- if upgrade >= 3 then
- if self.Uber >= 3 then
- return true
- else
- return "Not enough Uber drugs."
- end
- else
- return "This Refinery is not upgraded enough."
- end
- end
- return "You're doing it wrong."
- end
- end
- function ENT:SetMode(mode)
- if mode == "eject" then
- self.Entity:EjectSuperDrugs()
- self.Entity:EjectUberDrug()
- end
- if mode == "money" then
- self.Refmode = 0
- elseif mode == "offense" then
- self.Refmode = 1
- elseif mode == "defense" then
- self.Refmode = 2
- elseif mode == "weapmod" then
- self.Refmode = 3
- elseif mode == "uber" then
- self.Entity:CalcUber()
- self.SOffense = 0
- self.SDefense = 0
- self.SWeapmod = 0
- UberDrugExists()
- elseif mode == "suber" then
- self.Entity:DropSuperUberDrug()
- self.Uber = 0
- SuperUberDrugExists()
- end
- end
- util.AddNetworkString( "removebuilding" )
- function ENT:OnRemove()
- timer.Destroy(tostring(self.Entity))
- local ply = self.Owner
- if IsValid(ply) then
- net.Start("removebuilding")
- net.WriteString(self.Entity:EntIndex())
- net.Send(ply)
- ply:SetNWInt("max" .. self:GetClass(),ply:GetNWInt("max" .. self:GetClass()) - 1)
- end
- umsg.Start("remove_refinery_panel")
- umsg.Short(self.Entity:EntIndex())
- umsg.End()
- timer.Destroy(tostring(self.Entity) .. "disconnected")
- hook.Remove("PlayerDisconnected",tostring(self.Entity) .. "playerdisconnect")
- hook.Remove("PlayerInitialSpawn",tostring(self.Entity) .. "playerspawn")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement