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