Files
wnsrc/addons/pillpack/lua/weapons/pill_wep_morphgun.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

138 lines
3.9 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/
--]]
AddCSLuaFile()
SWEP.ViewModel = "models/weapons/c_toolgun.mdl"
SWEP.WorldModel = "models/weapons/w_toolgun.mdl"
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
SWEP.PrintName = "Morph Gun"
function SWEP:SetupDataTables()
self:NetworkVar("String", 1, "Form")
self:NetworkVar("Int", 1, "Mode")
end
function SWEP:Initialize()
self:SetHoldType("pistol")
self.nextreload = 0
end
function SWEP:PrimaryAttack()
if SERVER and self.Owner:IsAdmin() then
local ply = self.Owner:GetEyeTrace().Entity
if ply:GetClass() == "pill_ent_phys" then
ply:EmitSound("npc/manhack/bat_away.wav")
ply = ply:GetPillUser()
elseif not ply:IsPlayer() then
return
else
ply:EmitSound("npc/manhack/bat_away.wav")
end
local mode = self:GetMode()
if mode == 0 then
mode = "force"
elseif mode == 1 then
mode = "lock-life"
elseif mode == 2 then
mode = "lock-map"
elseif mode == 3 then
mode = "lock-perma"
end
pk_pills.apply(ply, self:GetForm(), mode)
self.Owner:EmitSound("weapons/airboat/airboat_gun_energy2.wav")
end
end
function SWEP:SecondaryAttack()
if SERVER and self.Owner:IsAdmin() then
local ply = self.Owner:GetEyeTrace().Entity
if ply:GetClass() == "pill_ent_phys" then
ply:EmitSound("npc/manhack/bat_away.wav")
ply = ply:GetPillUser()
elseif not ply:IsPlayer() then
return
else
ply:EmitSound("npc/manhack/bat_away.wav")
end
pk_pills.restore(ply, true)
self.Owner:EmitSound("weapons/airboat/airboat_gun_energy2.wav")
end
end
function SWEP:Reload()
if SERVER and self.Owner:IsAdmin() and CurTime() > self.nextreload then
local n = self:GetMode()
if n < 3 then
n = n + 1
else
n = 0
end
if n == 0 then
self.Owner:ChatPrint("FORCE MODE: Players will be forced to morph but can still change back.")
elseif n == 1 then
self.Owner:ChatPrint("LIFELOCK MODE: The player will be locked in the pill until they die.")
elseif n == 2 then
self.Owner:ChatPrint("MAPLOCK MODE: The player will be locked in the pill until the map changes.")
elseif n == 3 then
self.Owner:ChatPrint("PERMALOCK MODE: Players will be locked in the pill forever.")
end
self:SetMode(n)
self.nextreload = CurTime() + 1
self.Owner:EmitSound("weapons/slam/mine_mode.wav")
end
end
function SWEP:OnDrop()
self:Remove()
end
if CLIENT then
local matScreen = Material("models/weapons/v_toolgun/screen")
function SWEP:ViewModelDrawn(ent)
local matBg = Material("pills/" .. self:GetForm() .. ".png")
matScreen:SetTexture("$basetexture", matBg:GetTexture("$basetexture"))
local n = self:GetMode()
local color
if n == 0 then
color = Color(0, 255, 0)
elseif n == 1 then
color = Color(255, 255, 0)
elseif n == 2 then
color = Color(255, 150, 0)
elseif n == 3 then
color = Color(255, 0, 0)
end
local ap = ent:GetAttachment(ent:LookupAttachment("muzzle"))
cam.Start3D(EyePos(), EyeAngles())
render.SetMaterial(Material("sprites/light_glow02_add"))
render.DrawSprite(ap.Pos, 20, 20, color)
cam.End3D()
end
end