mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
124 lines
6.5 KiB
Lua
124 lines
6.5 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/
|
|
--]]
|
|
|
|
if (!file.Exists("autorun/vj_base_autorun.lua","LUA")) then return end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.Base = "weapon_vj_base"
|
|
SWEP.PrintName = "VJ NPC Controller"
|
|
SWEP.Author = "DrVrej"
|
|
SWEP.Contact = "http://steamcommunity.com/groups/vrejgaming"
|
|
SWEP.Purpose = "This weapon is made to control NPCs. Mostly VJ SNPCs"
|
|
SWEP.Instructions = "Press Fire to control the NPC you are looking at."
|
|
SWEP.Category = "VJ Base"
|
|
-- Client Settings ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
if CLIENT then
|
|
SWEP.Slot = 5 -- Which weapon slot you want your SWEP to be in? (1 2 3 4 5 6)
|
|
SWEP.SlotPos = 7 -- Which part of that slot do you want the SWEP to be in? (1 2 3 4 5 6)
|
|
SWEP.SwayScale = 1 -- Default is 1, The scale of the viewmodel sway
|
|
SWEP.CSMuzzleFlashes = false -- Use CS:S Muzzle flash?
|
|
SWEP.DrawAmmo = true -- Draw regular Garry's Mod HUD?
|
|
SWEP.DrawCrosshair = true -- Draw Crosshair?
|
|
SWEP.DrawWeaponInfoBox = true -- Should the information box show in the weapon selection menu?
|
|
SWEP.BounceWeaponIcon = true -- Should the icon bounce in the weapon selection menu?
|
|
SWEP.RenderGroup = RENDERGROUP_OPAQUE
|
|
end
|
|
-- Server Settings ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
if SERVER then
|
|
SWEP.Weight = 30 -- Decides whether we should switch from/to this
|
|
SWEP.AutoSwitchTo = false -- Auto switch to this weapon when it's picked up
|
|
SWEP.AutoSwitchFrom = false -- Auto switch weapon when the owner picks up a better weapon
|
|
end
|
|
-- Main Settings ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.ViewModel = "models/vj_weapons/c_controller.mdl"
|
|
SWEP.WorldModel = "models/gibs/humans/brain_gib.mdl"
|
|
SWEP.HoldType = "pistol"
|
|
SWEP.Spawnable = true
|
|
SWEP.AdminSpawnable = false
|
|
SWEP.UseHands = true -- Should this weapon use Garry's Mod hands? (The model must support it!)
|
|
-- Primary/Secondary Fire ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.Primary.Sound = {"physics/flesh/flesh_squishy_impact_hard1.wav","physics/flesh/flesh_squishy_impact_hard2.wav","physics/flesh/flesh_squishy_impact_hard3.wav","physics/flesh/flesh_squishy_impact_hard4.wav"} -- Sound played when the weapon is deployed
|
|
SWEP.Primary.SoundPitch = VJ_Set(140, 140)
|
|
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.WorldModel_UseCustomPosition = true -- Should the gun use custom position? This can be used to fix guns that are in the crotch
|
|
SWEP.WorldModel_CustomPositionAngle = Vector(0, 0, 0)
|
|
SWEP.WorldModel_CustomPositionOrigin = Vector(0, 4, -1.1)
|
|
SWEP.WorldModel_CustomPositionBone = "ValveBiped.Bip01_R_Hand" -- The bone it will use as the main point (Owner's bone)
|
|
SWEP.WorldModel_Invisible = false -- Should the world model be invisible?
|
|
SWEP.WorldModel_NoShadow = false -- Should the world model have a shadow?
|
|
|
|
SWEP.DeploySound = {"physics/flesh/flesh_squishy_impact_hard1.wav","physics/flesh/flesh_squishy_impact_hard2.wav","physics/flesh/flesh_squishy_impact_hard3.wav","physics/flesh/flesh_squishy_impact_hard4.wav"} -- Sound played when the weapon is deployed
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:Initialize()
|
|
self:SetWeaponHoldType(self.HoldType)
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:PrimaryAttack()
|
|
local owner = self:GetOwner()
|
|
if CLIENT or owner:IsNPC() then return end
|
|
|
|
owner:SetAnimation(PLAYER_ATTACK1)
|
|
local anim = ACT_VM_SECONDARYATTACK
|
|
local animTime = VJ_GetSequenceDuration(owner:GetViewModel(), anim)
|
|
self:SendWeaponAnim(anim)
|
|
self.NextIdleT = CurTime() + animTime
|
|
self.NextReloadT = CurTime() + animTime
|
|
self:SetNextPrimaryFire(CurTime() + animTime)
|
|
|
|
local fireSd = VJ_PICK(self.Primary.Sound)
|
|
if fireSd != false then
|
|
sound.Play(fireSd, owner:GetPos(), self.Primary.SoundLevel, math.random(self.Primary.SoundPitch.a, self.Primary.SoundPitch.b), self.Primary.SoundVolume)
|
|
end
|
|
|
|
local tr = util.TraceLine(util.GetPlayerTrace(owner))
|
|
if tr.Entity && IsValid(tr.Entity) then
|
|
if tr.Entity:IsPlayer() then
|
|
owner:ChatPrint("That's a player dumbass.")
|
|
return
|
|
elseif tr.Entity:GetClass() == "prop_ragdoll" then
|
|
owner:ChatPrint("You are about to become that corpse.")
|
|
return
|
|
elseif tr.Entity:GetClass() == "prop_physics" then
|
|
owner:ChatPrint("Uninstall your game. Now.")
|
|
return
|
|
elseif !tr.Entity:IsNPC() then
|
|
owner:ChatPrint("This isn't an NPC, therefore you can't control it.")
|
|
return
|
|
elseif tr.Entity:IsNPC() && tr.Entity:Health() <= 0 then
|
|
owner:ChatPrint("This NPC's health is 0 or below, therefore you can't control.")
|
|
return
|
|
//elseif tr.Entity.IsVJBaseSNPC_Tank == true then
|
|
//tr.Entity = tr.Entity.Gunner
|
|
//owner:ChatPrint("Tank are not controllable yet, sorry!")
|
|
//return
|
|
elseif tr.Entity.VJ_IsBeingControlled == true then
|
|
owner:ChatPrint("You can't control this NPC, it's already being controlled by someone else.")
|
|
return
|
|
end
|
|
if (!tr.Entity.IsVJBaseSNPC) then
|
|
owner:ChatPrint("NOTE: VJ NPC controller is mainly made for VJ Base SNPCs!")
|
|
end
|
|
local SpawnControllerObject = ents.Create("obj_vj_npccontroller")
|
|
SpawnControllerObject.VJCE_Player = owner
|
|
SpawnControllerObject:SetControlledNPC(tr.Entity)
|
|
SpawnControllerObject:Spawn()
|
|
//SpawnControllerObject:Activate()
|
|
SpawnControllerObject:StartControlling()
|
|
end
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:SecondaryAttack() return false end |