This commit is contained in:
lifestorm
2024-08-05 18:40:29 +03:00
parent 9f505a0646
commit c6d9b6f580
8044 changed files with 1853472 additions and 21 deletions

21
gamemodes/ixhl2rp/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Alexander Grist-Hucker, Igor Radovanovic
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,45 @@
Willard Networks - WN:IX
A unique HL2RP schema built by the WN team
Copyright Atko 2023
All Rights Reserved
# Code Style
* General coding style
* Use tab-indentation with tab-width set to 4 spaces!
* Use 'and' and 'or', rather than '&&' or '||'. For negation the '!' is used over 'not'
* We use 'if (condition) then' for spacing, as well as 'func(arg1, arg2, arg3, ...)'. Arrays use array[index], except for double indexing in which case spaces get added array1[ array2[index] ] (to prevent [[ and ]] from forming long strings or comments)
* String concatenation is done without spacing like.."this".."."
* " " has the preference for strings, although ' ' can be used if your string contains a ". [[ ]] can be used for multiline strings, or strings that contain both " and '
* Unused loop variables or return variables are assigned to '\_' to indicate they are unused
* Variable and data fields
* Local vars use lower camel case (lowerCamelCase)
* Functions are upper camel case (UpperCamelCase). Local function vars use lower camel case (as per local var casing)
* Enums are in all caps, with underscores for spacing. This also counts if you make enum fields on a table (e.g. PLUGIN.MAX_VAR)
* Strings for internal use should be UpperCamelCase (data fields, net messages, ...). If some sort of identifiying prefix is used, lower camel casing is used (e.g. ixSendData, cmdCharSetHealth, ...)
* Try to give loop variables sensible names over k, v. E.g. 'for character, data in pairs(list) do', which creates much more readable code than 'for k, v in pairs(list) do'
* Avoid using variable names that overwrite library names.
* 'player' is generally replaced with 'client'
* 'table' should use something more descriptive, or 'tbl' if you really got nothing
* 'string' can use 'text' or 'str'
* Optimization
* Avoid creating and using global variables, the access time on them is extremely slow. The easiest workaround is to localize the variable at the top of the file (if it is a table, the variable will still update as tables are stored by reference rather than by value). Libraries (e.g. ix, math, string, ...) can also be localized like this, and is typically done if you absolutely need to squeeze out performance from some bit of code that will run a lot.
* Avoid using Think, Tick, etc. server-side. Basically any hook that gets called every frame (or even worse: every frame for every player) unless there is absolutely no way around it. A lot of stuff doesn't need to check every frame, but is fine if it checks every 0.5/1/2/... seconds. Use timers for this!
* If you must use Think-like hooks or have another performance critical bit of code:
* Keep it short, shorter code usually is more optimized
* Localize everything in it
* Avoid loops, make loops as small as possible. If you need to loop over a table to search one entry, you may need to rethink your table structure. E.g. looping over a table of all players is slower than looking up a player by SteamID (table[client:SteamID64()]).
* 'for i = 1, x do' is faster than 'for k, v in ipairs', which is faster than 'for k, v in pairs'
* Making tables is expensive compared to clearing out a small table. Array indexing (table[1]) is faster than hashmap lookups (table.x)
* Square roots (sqrt, Distance) and geometry functions (cos, acos, sin, asin, tan, ...) are SLOOOOW (compared to e.g. multiplication)! Avoid them in performance-critical code. Distance can often be replaced by DistToSqr (squared distance) when the goal is simple comparisons to avoid taking a square root (don't forget to square the other side of the comparison). E.g. 'x:Distance(y) > 100' becomes 'x:DistToSqr(y) > 100 * 100'
* Creating functions during runtime is SLOOOOOOOOOOOOOOW, but sometimes needed. Just avoid this happening in code that runs often/regularly. Try to limit it to e.g. character load, or when a player does a certain action. If possible, use a function created during compile and pass the needed arguments via varargs.
* Helix-specific stuff
* Use ix.log.AddType and ix.log.Add rather than ix.log.AddRaw. This creates a category that can be used with our log searching tool, and stores some extra searchable meta-data as well (client, arguments passed, location, ...)
* Categorize your logtypes by proceeding the type with the plugin name or some other descriptive prefix. This facilitates selecting it from the giant dropdown menu in the logsearch tool. E.g. medicalBleedout, itemPickup, ...
* Try to use localized text (via e.g. L(), NotifyLocalized, ...) and define a translation table in your plugin via ix.lang.AddTable. This makes life for our Russian friends a lot easier.
* Server-side only code always should be in an sv_file! This counts double for net hooks, security checks, etc. Any half-decent hacker will read your cl_ and sh_ files to find exploits, do not make their life easier. It is also harder to steal our code if they do not have the server-side code.
## Using the Linter in your IDE
See instructions [here](https://github.com/mpeterv/luacheck#editor-support).
For visual studio, simply downloading the vscode-luacheck plugin should be enough with no additional configuration required.

View File

@@ -0,0 +1,245 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
if (!Schema:CanPlayerOpenCombineLock(client, self)) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
self:Toggle(client)
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_blue = Color(52, 73, 94, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_blue
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,295 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock (CMRU)"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock_cmru")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.accessLevel = 1
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
local character = client:GetCharacter()
local items = character:GetInventory():GetItems()
local cmruCards = {}
for _, item in pairs(items) do
if (item.uniqueID == "cmru_card" and item:GetData("cardID")) then
cmruCards[#cmruCards + 1] = item
end
end
local canOpen = false
for _, card in pairs(cmruCards) do
-- access level 5 should open all doors. access level 3 should open only 3, 2, and 1 doors, etc
if (items[card:GetData("cardID")] and (card:GetData("accessLevel", 1) >= self.accessLevel)) then
canOpen = true
end
end
if (!Schema:CanPlayerOpenCombineLock(client, self) and !canOpen) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
if (client:KeyDown(IN_SPEED) and (client:Team() == FACTION_ADMIN or client:Team() == FACTION_SERVERADMIN or client:IsCombine() or client:GetCharacter():HasFlags("M"))) then
net.Start("changeLockAccessCmru")
net.WriteEntity(self)
net.Send(client)
else
self:Toggle(client)
end
end
function ENT:OnOptionSelected(client, option, data)
if (option == "Set Level 1 Access") then
self.accessLevel = 1
client:Notify("You have set Level 1 Access to this lock.")
elseif (option == "Set Level 2 Access") then
self.accessLevel = 2
client:Notify("You have set Level 2 Access to this lock.")
elseif (option == "Set Level 3 Access") then
self.accessLevel = 3
client:Notify("You have set Level 3 Access to this lock.")
elseif (option == "Set Level 4 Access") then
self.accessLevel = 4
client:Notify("You have set Level 4 Access to this lock.")
elseif (option == "Set Level 5 Access") then
self.accessLevel = 5
client:Notify("You have set Level 5 Access to this lock.")
end
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_magenta = Color(214, 55, 229, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_magenta
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,295 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock (Conscript)"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock_con")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.accessLevel = 1
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
local character = client:GetCharacter()
local items = character:GetInventory():GetItems()
local conCards = {}
for _, item in pairs(items) do
if (item.uniqueID == "con_card" and item:GetData("cardID")) then
conCards[#conCards + 1] = item
end
end
local canOpen = false
for _, card in pairs(conCards) do
-- access level 5 should open all doors. access level 3 should open only 3, 2, and 1 doors, etc
if (items[card:GetData("cardID")] and (card:GetData("accessLevel", 1) >= self.accessLevel)) then
canOpen = true
end
end
if (!Schema:CanPlayerOpenCombineLock(client, self) and !canOpen) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
if (client:KeyDown(IN_SPEED) and (client:Team() == FACTION_ADMIN or client:Team() == FACTION_SERVERADMIN or client:IsCombine() or client:GetCharacter():HasFlags("M"))) then
net.Start("changeLockAccessCon")
net.WriteEntity(self)
net.Send(client)
else
self:Toggle(client)
end
end
function ENT:OnOptionSelected(client, option, data)
if (option == "Set Level 1 Access") then
self.accessLevel = 1
client:Notify("You have set Level 1 Access to this lock.")
elseif (option == "Set Level 2 Access") then
self.accessLevel = 2
client:Notify("You have set Level 2 Access to this lock.")
elseif (option == "Set Level 3 Access") then
self.accessLevel = 3
client:Notify("You have set Level 3 Access to this lock.")
elseif (option == "Set Level 4 Access") then
self.accessLevel = 4
client:Notify("You have set Level 4 Access to this lock.")
elseif (option == "Set Level 5 Access") then
self.accessLevel = 5
client:Notify("You have set Level 5 Access to this lock.")
end
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_orange = Color(255, 180, 0, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_orange
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,284 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock (CWU)"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock_cwu")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.accessLevel = "Member Access"
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
local character = client:GetCharacter()
local items = character:GetInventory():GetItems()
local cwuCards = {}
for _, item in pairs(items) do
if (item.uniqueID == "cwu_card" and item:GetData("cardID")) then
cwuCards[#cwuCards + 1] = item
end
end
local canOpen = false
for _, cards in pairs(cwuCards) do
local accessLevel = cards:GetData("accessLevel", "Member Access")
if (items[cards:GetData("cardID")] and (accessLevel == "Management Access" or (accessLevel == "Member Access" and self.accessLevel == "Member Access"))) then
canOpen = true
end
end
if (!Schema:CanPlayerOpenCombineLock(client, self) and !canOpen) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
if (client:KeyDown(IN_SPEED) and (client:Team() == FACTION_ADMIN or client:Team() == FACTION_SERVERADMIN or client:IsCombine() or client:GetCharacter():HasFlags("M"))) then
net.Start("changeLockAccess")
net.WriteEntity(self)
net.Send(client)
else
self:Toggle(client)
end
end
function ENT:OnOptionSelected(client, option, data)
if (option == "Set Member Access") then
self.accessLevel = "Member Access"
client:Notify("You have set Member Access to this lock.")
elseif (option == "Set Management Access") then
self.accessLevel = "Management Access"
client:Notify("You have set Management Access to this lock.")
end
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_blue = Color(37, 64, 213, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_blue
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,284 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock (DOB)"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock_dob")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.accessLevel = "Member Access"
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
local character = client:GetCharacter()
local items = character:GetInventory():GetItems()
local dobCards = {}
for _, item in pairs(items) do
if (item.uniqueID == "dob_card" and item:GetData("cardID")) then
dobCards[#dobCards + 1] = item
end
end
local canOpen = false
for _, cards in pairs(dobCards) do
local accessLevel = cards:GetData("accessLevel", "Member Access")
if (items[cards:GetData("cardID")] and (accessLevel == "Management Access" or (accessLevel == "Member Access" and self.accessLevel == "Member Access"))) then
canOpen = true
end
end
if (!Schema:CanPlayerOpenCombineLock(client, self) and !canOpen) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
if (client:KeyDown(IN_SPEED) and (client:Team() == FACTION_ADMIN or client:Team() == FACTION_SERVERADMIN or client:IsCombine() or client:GetCharacter():HasFlags("M"))) then
net.Start("changeLockAccess")
net.WriteEntity(self)
net.Send(client)
else
self:Toggle(client)
end
end
function ENT:OnOptionSelected(client, option, data)
if (option == "Set Member Access") then
self.accessLevel = "Member Access"
client:Notify("You have set Member Access to this lock.")
elseif (option == "Set Management Access") then
self.accessLevel = "Management Access"
client:Notify("You have set Management Access to this lock.")
end
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_orange = Color(235, 125, 52, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_orange
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,284 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Combine Lock (MOE)"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.PhysgunDisable = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Bool", 0, "Locked")
self:NetworkVar("Bool", 1, "DisplayError")
self:NetworkVar("Bool", 2, "Disabled")
if (SERVER) then
self:NetworkVarNotify("Locked", self.OnLockChanged)
end
end
if (SERVER) then
function ENT:GetLockPosition(door, normal)
local index = door:LookupBone("handle")
local position = door:GetPos()
normal = normal or door:GetForward():Angle()
if (index and index >= 1) then
position = door:GetBonePosition(index)
end
position = position + normal:Forward() * 7.2 + normal:Up() * 10 + normal:Right() * 2
normal:RotateAroundAxis(normal:Up(), 90)
normal:RotateAroundAxis(normal:Forward(), 180)
normal:RotateAroundAxis(normal:Right(), 180)
return position, normal
end
function ENT:SetDoor(door, position, angles)
if (!IsValid(door) or !door:IsDoor()) then
return
end
local doorPartner = door:GetDoorPartner()
self.door = door
self.door:DeleteOnRemove(self)
door.ixLock = self
if (IsValid(doorPartner)) then
self.doorPartner = doorPartner
self.doorPartner:DeleteOnRemove(self)
doorPartner.ixLock = self
end
self:SetPos(position)
self:SetAngles(angles)
self:SetParent(door)
end
function ENT:SpawnFunction(client, trace)
local door = trace.Entity
if (!IsValid(door) or !door:IsDoor() or IsValid(door.ixLock)) then
return client:NotifyLocalized("dNotValid")
end
local normal = client:GetEyeTrace().HitNormal:Angle()
local position, angles = self:GetLockPosition(door, normal)
local entity = ents.Create("ix_combinelock_moe")
entity:SetPos(trace.HitPos)
entity:Spawn()
entity:Activate()
entity:SetDoor(door, position, angles)
ix.saveEnts:SaveEntity(entity)
Schema:SaveCombineLocks()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props_combine/wn_combine_lock.mdl")
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
self:SetUseType(SIMPLE_USE)
self:SetHealth(300)
self.accessLevel = "Member Access"
self.nextUseTime = 0
end
function ENT:OnRemove()
if (IsValid(self)) then
self:SetParent(nil)
end
if (IsValid(self.door)) then
self.door:Fire("unlock")
self.door.ixLock = nil
end
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
self.doorPartner.ixLock = nil
end
if (!ix.shuttingDown) then
Schema:SaveCombineLocks()
end
end
function ENT:OnLockChanged(name, bWasLocked, bLocked)
if (!IsValid(self.door) or self:GetDisabled()) then
return
end
ix.saveEnts:SaveEntity(self)
if (bLocked) then
self:EmitSound("buttons/combine_button2.wav")
self.door:Fire("lock")
self.door:Fire("close")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("lock")
self.doorPartner:Fire("close")
end
else
self:EmitSound("buttons/combine_button7.wav")
self.door:Fire("unlock")
if (IsValid(self.doorPartner)) then
self.doorPartner:Fire("unlock")
end
end
end
function ENT:DisplayError()
self:EmitSound("buttons/combine_button_locked.wav")
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:DisplayDamage()
self:SetDisplayError(true)
timer.Simple(1.2, function()
if (IsValid(self)) then
self:SetDisplayError(false)
end
end)
end
function ENT:Toggle(client)
if (self:GetDisabled()) then return end
if (self.nextUseTime > CurTime()) then
return
end
local character = client:GetCharacter()
local items = character:GetInventory():GetItems()
local moeCards = {}
for _, item in pairs(items) do
if (item.uniqueID == "moe_card" and item:GetData("cardID")) then
moeCards[#moeCards + 1] = item
end
end
local canOpen = false
for _, cards in pairs(moeCards) do
local accessLevel = cards:GetData("accessLevel", "Member Access")
if (items[cards:GetData("cardID")] and (accessLevel == "Management Access" or (accessLevel == "Member Access" and self.accessLevel == "Member Access"))) then
canOpen = true
end
end
if (!Schema:CanPlayerOpenCombineLock(client, self) and !canOpen) then
self:DisplayError()
self.nextUseTime = CurTime() + 2
return
end
self:SetLocked(!self:GetLocked())
self.nextUseTime = CurTime() + 2
end
function ENT:Use(client)
if (client:KeyDown(IN_SPEED) and (client:Team() == FACTION_ADMIN or client:Team() == FACTION_SERVERADMIN or client:IsCombine() or client:GetCharacter():HasFlags("M"))) then
net.Start("changeLockAccess")
net.WriteEntity(self)
net.Send(client)
else
self:Toggle(client)
end
end
function ENT:OnOptionSelected(client, option, data)
if (option == "Set Member Access") then
self.accessLevel = "Member Access"
client:Notify("You have set Member Access to this lock.")
elseif (option == "Set Management Access") then
self.accessLevel = "Management Access"
client:Notify("You have set Management Access to this lock.")
end
end
function ENT:OnTakeDamage(dmgInfo)
self:SetHealth(self:Health() - dmgInfo:GetDamage())
self:EmitSound("physics/metal/metal_sheet_impact_hard"..math.random(6, 8)..".wav")
self:DisplayDamage()
if (self:Health() <= 0) then
local pos = self:GetPos()
local curTime = CurTime()
if (!self.nextSpark or self.nextSpark <= curTime) then
local effect = EffectData()
effect:SetStart(pos)
effect:SetOrigin(pos)
effect:SetScale(2)
util.Effect("cball_explode", effect)
self.nextSpark = curTime + 0.1
end
local attacker = dmgInfo:GetAttacker()
self:EmitSound("npc/manhack/gib.wav")
ix.combineNotify:AddImportantNotification("WRN:// Bio-Restrictor failure", nil, attacker:IsPlayer() and attacker, self:GetPos())
ix.item.Spawn("trash_biolock", Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z))
self:Remove()
end
end
else
local glowMaterial = ix.util.GetMaterial("sprites/glow04_noz")
local color_green = Color(0, 255, 0, 255)
local color_magenta = Color(214, 55, 229, 255)
local color_red = Color(255, 50, 50, 255)
function ENT:Draw()
self:DrawModel()
if (self:GetDisabled()) then return end
local color = color_green
if (self:GetDisplayError()) then
color = color_red
elseif (self:GetLocked()) then
color = color_magenta
end
local position = self:GetPos() + self:GetUp() * -8.7 + self:GetForward() * -3.85 + self:GetRight() * -6
render.SetMaterial(glowMaterial)
render.DrawSprite(position, 10, 10, color)
end
end

View File

@@ -0,0 +1,445 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Forcefield"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.RenderGroup = RENDERGROUP_BOTH
ENT.PhysgunDisabled = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Int", 0, "Mode")
self:NetworkVar("Entity", 0, "Dummy")
self:NetworkVar("Bool", 0, "Malfunctioning")
end
local MODE_OFFLINE = 1
local MODE_ALLOW_ALL = 2
local MODE_ALLOW_COMBINE = 3
local MODE_ALLOW_COMBINE_INF = 4
if (SERVER) then
function ENT:SpawnFunction(client, trace)
local angles = (client:GetPos() - trace.HitPos):Angle()
angles.p = 0
angles.r = 0
angles:RotateAroundAxis(angles:Up(), 270)
local entity = ents.Create("ix_forcefield")
entity:SetPos(trace.HitPos + Vector(0, 0, 40))
entity:SetAngles(angles:SnapTo("y", 90))
entity:Spawn()
entity:Activate()
Schema:SaveForceFields()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props/forcefield_left.mdl")
self:SetSkin(3)
self:SetSolid(SOLID_VPHYSICS)
self:SetUseType(SIMPLE_USE)
self:PhysicsInit(SOLID_VPHYSICS)
local data = {}
data.start = self:GetPos() + self:GetRight() * -16
data.endpos = self:GetPos() + self:GetRight() * -480
data.filter = self
local trace = util.TraceLine(data)
local angles = self:GetAngles()
angles:RotateAroundAxis(angles:Up(), 90)
self.dummy = ents.Create("prop_physics")
self.dummy:SetModel("models/willardnetworks/props/forcefield_right.mdl")
self.dummy:SetSkin(3)
self.dummy:SetPos(trace.HitPos)
self.dummy:SetAngles(self:GetAngles())
self.dummy:Spawn()
self.dummy.PhysgunDisabled = true
self.dummy:SetCollisionGroup(COLLISION_GROUP_WORLD)
self:DeleteOnRemove(self.dummy)
local verts = {
{pos = Vector(0, 0, -25)},
{pos = Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) + Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) + Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) - Vector(0, 0, 25)},
{pos = Vector(0, 0, -25)}
}
self:PhysicsFromMesh(verts)
local physObj = self:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:EnableMotion(false)
physObj:Sleep()
end
self:AddSolidFlags(FSOLID_CUSTOMBOXTEST)
self:SetCustomCollisionCheck(true)
self:SetDummy(self.dummy)
physObj = self.dummy:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:EnableMotion(false)
physObj:Sleep()
end
self:SetMoveType(MOVETYPE_NOCLIP)
self:SetMoveType(MOVETYPE_PUSH)
self:MakePhysicsObjectAShadow()
self:SetMode(MODE_OFFLINE)
end
function ENT:StartTouch(entity)
if (!self.buzzer) then
self.buzzer = CreateSound(entity, "ambient/machines/combine_shield_touch_loop1.wav")
self.buzzer:Play()
self.buzzer:ChangeVolume(0.8, 0)
self.buzzer:SetSoundLevel(60)
else
self.buzzer:ChangeVolume(0.8, 0.5)
self.buzzer:Play()
end
self.entities = (self.entities or 0) + 1
end
function ENT:EndTouch(entity)
self.entities = math.max((self.entities or 0) - 1, 0)
if (self.buzzer and self.entities == 0) then
self.buzzer:FadeOut(0.5)
end
end
function ENT:OnRemove()
if (self.buzzer) then
self.buzzer:Stop()
self.buzzer = nil
end
if (!ix.shuttingDown and !self.ixIsSafe) then
Schema:SaveForceFields()
end
end
ENT.MODES = {
{
function(entity)
return false
end,
"field disengaged.",
"disengaged",
3
},
{
function(entity)
if (!entity:IsPlayer()) then return true end
local character = entity:GetCharacter()
if (!character or !character:GetInventory()) then
return true
end
if (!character:GetInventory():HasItem("id_card", {active = true})) then
if character:GetInventory():HasItem("fake_id_card") then
return false
end
if character:IsVortigaunt() and
character:GetCollarItemID() and
ix.item.instances[character:GetCollarItemID()] and
-ix.config.Get("blacklistSCAmount", 40) <= ix.item.instances[character:GetCollarItemID()]:GetData("sterilizedCredits", 0) then
return false
end
return true
else
return false
end
end,
"allow only registered individuals with active ID Card.",
"engaged",
0
},
{
function(entity)
return true
end,
"disallow non-functionary units.",
"restricted",
1
},
{
function(entity)
return true
end,
"disallow non-functionary units (infestation control specific)",
"restricted",
2
}
}
function ENT:Use(activator)
if ((self.nextUse or 0) < CurTime()) then
self.nextUse = CurTime() + 1.5
else
return
end
local bForced = CAMI.PlayerHasAccess(activator, "Helix - Basic Admin Commands", nil) and activator:GetMoveType() == MOVETYPE_NOCLIP
if (activator:HasActiveCombineSuit() or ix.faction.Get(activator:Team()).allowForcefieldControl or bForced) then
self:SetMode(self:GetMode() + 1)
local action = "modified"
if (self:GetMode() > #self.MODES) then
self:SetMode(MODE_OFFLINE)
self:CollisionRulesChanged()
self:SetSkin(self.MODES[1][4])
self.dummy:SetSkin(self.MODES[1][4])
self:EmitSound("npc/turret_floor/die.wav")
else
self:CollisionRulesChanged()
self:SetSkin(self.MODES[self:GetMode()][4])
self.dummy:SetSkin(self.MODES[self:GetMode()][4])
end
self:EmitSound("buttons/combine_button5.wav", 140, 100 + (self:GetMode() - 1) * 15)
activator:ChatPrint("Changed barrier mode to: " .. self.MODES[self:GetMode()][2])
Schema:SaveForceFields()
if (bForced) then return end
ix.combineNotify:AddNotification("NTC:// Containment Field " .. self.MODES[self:GetMode()][3] .. " by " .. activator:GetCombineTag(), nil, activator)
end
end
function ENT:Malfunction()
local bMalfunctioning = self:GetMalfunctioning()
if (!bMalfunctioning) then return end
timer.Simple(math.random(0.2, 1), function()
if (!self:IsValid()) then return end
self:SetMode(MODE_OFFLINE)
self:CollisionRulesChanged()
self:SetSkin(self.MODES[1][4])
self.dummy:SetSkin(self.MODES[1][4])
self:EmitSound("buttons/combine_button5.wav", 65, 100 + (self:GetMode() - 1) * 15)
self:EmitSound("npc/turret_floor/die.wav", 55)
local target = math.random(2) == 1 and self or self:GetDummy()
local vPoint = target:GetPos() + Vector(0, 0, math.random(-10, 100)) + target:GetRight() * (target == self and -10 or 10)
local effectdata = EffectData()
effectdata:SetOrigin(vPoint)
util.Effect("ManhackSparks", effectdata)
if (math.random(2) == 1) then
target = math.random(2) == 1 and self or self:GetDummy()
vPoint = target:GetPos() + Vector(0, 0, math.random(-10, 100)) + target:GetRight() * (target == self and -10 or 10)
effectdata = EffectData()
effectdata:SetOrigin(vPoint)
util.Effect("ManhackSparks", effectdata)
end
self:EmitSound("ambient/energy/zap" .. math.random(1, 9) .. ".wav", 65)
timer.Simple(math.random(1, 5), function()
if (!self:IsValid()) then return end
self:SetMode(math.random(2, 4))
self:CollisionRulesChanged()
self:SetSkin(self.MODES[self:GetMode()][4])
self.dummy:SetSkin(self.MODES[self:GetMode()][4])
self:EmitSound("buttons/combine_button5.wav", 65, 100 + (self:GetMode() - 1) * 15)
self:Malfunction()
end)
end)
end
hook.Add("ShouldCollide", "ix_forcefields", function(a, b)
local entity
local forcefield
if (a:GetClass() == "ix_forcefield") then
entity = b
forcefield = a
elseif (b:GetClass() == "ix_forcefield") then
entity = a
forcefield = b
end
if (IsValid(forcefield)) then
if (IsValid(entity)) then
if (entity:IsPlayer() and (entity:HasActiveCombineSuit() or ix.faction.Get(entity:Team()).allowForcefieldPassage) or entity:GetClass() == "ix_scanner") then
return false
end
if (entity:IsPlayer() and forcefield:GetMode() == MODE_ALLOW_COMBINE_INF and ix.faction.Get(entity:Team()).allowForcefieldInfestationPassage) then
return false
end
local mode = forcefield:GetMode() or MODE_OFFLINE
return istable(forcefield.MODES[mode]) and forcefield.MODES[mode][1](entity)
else
return forcefield:GetMode() != 5
end
end
end)
else
SHIELD_MATERIALS = {
nil,
ix.util.GetMaterial("models/effects/shield_blue"),
ix.util.GetMaterial("models/effects/shield_red"),
ix.util.GetMaterial("models/effects/shield_yellow")
}
function ENT:Initialize()
local data = {}
data.start = self:GetPos() + self:GetRight()*-16
data.endpos = self:GetPos() + self:GetRight()*-480
data.filter = self
local trace = util.TraceLine(data)
self:SetCustomCollisionCheck(true)
self:PhysicsInitConvex({
vector_origin,
Vector(0, 0, 150),
trace.HitPos + Vector(0, 0, 150),
trace.HitPos
})
self.distance = self:GetPos():Distance(trace.HitPos)
end
function ENT:Draw()
self:DrawModel()
if (self:GetMode() == MODE_OFFLINE) then
return
end
local pos = self:GetPos()
local angles = self:GetAngles()
local matrix = Matrix()
matrix:Translate(pos + self:GetUp() * -40)
matrix:Rotate(angles)
render.SetMaterial(SHIELD_MATERIALS[self:GetMode()])
local dummy = self:GetDummy()
if (IsValid(dummy)) then
local dummyPos = dummy:GetPos()
local vertex = self:WorldToLocal(dummyPos)
self:SetRenderBounds(vector_origin, vertex + self:GetUp() * 150)
cam.PushModelMatrix(matrix)
self:DrawShield(vertex)
cam.PopModelMatrix()
matrix:Translate(vertex)
matrix:Rotate(Angle(0, 180, 0))
cam.PushModelMatrix(matrix)
self:DrawShield(vertex)
cam.PopModelMatrix()
end
end
function ENT:DrawShield(vertex)
mesh.Begin(MATERIAL_QUADS, 1)
mesh.Position(vector_origin)
mesh.TexCoord(0, 0, 0)
mesh.AdvanceVertex()
mesh.Position(self:GetUp() * 190)
mesh.TexCoord(0, 0, 3)
mesh.AdvanceVertex()
mesh.Position(vertex + self:GetUp() * 190)
mesh.TexCoord(0, 3, 3)
mesh.AdvanceVertex()
mesh.Position(vertex)
mesh.TexCoord(0, 3, 0)
mesh.AdvanceVertex()
mesh.End()
end
end
properties.Add("ixForcefieldStartMalfunction", {
MenuLabel = "Start Malfunctioning",
Order = 500,
MenuIcon = "icon16/lightning_add.png",
Filter = function(self, entity, client)
if (entity:GetClass() == "ix_forcefield" and !entity:GetMalfunctioning() and CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands", nil)) then return true end
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:SetMalfunctioning(true)
entity:Malfunction()
end
})
properties.Add("ixForcefieldStopMalfunction", {
MenuLabel = "Stop Malfunctioning",
Order = 500,
MenuIcon = "icon16/lightning_delete.png",
Filter = function(self, entity, client)
if (entity:GetClass() == "ix_forcefield" and entity:GetMalfunctioning() and CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands", nil)) then return true end
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:SetMalfunctioning(false)
end
})

View File

@@ -0,0 +1,437 @@
--[[
| 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()
ENT.Type = "anim"
ENT.PrintName = "Hacked Forcefield"
ENT.Category = "HL2 RP"
ENT.Spawnable = true
ENT.AdminOnly = true
ENT.RenderGroup = RENDERGROUP_BOTH
ENT.PhysgunDisabled = true
ENT.bNoPersist = true
function ENT:SetupDataTables()
self:NetworkVar("Int", 0, "Mode")
self:NetworkVar("Entity", 0, "Dummy")
self:NetworkVar("Bool", 0, "Malfunctioning")
end
local MODE_OFFLINE = 1
local MODE_ALLOW_ALL = 2
local MODE_ALLOW_COMBINE = 3
local MODE_ALLOW_COMBINE_INF = 4
if (SERVER) then
function ENT:SpawnFunction(client, trace)
local angles = (client:GetPos() - trace.HitPos):Angle()
angles.p = 0
angles.r = 0
angles:RotateAroundAxis(angles:Up(), 270)
local entity = ents.Create("ix_rebelfield")
entity:SetPos(trace.HitPos + Vector(0, 0, 40))
entity:SetAngles(angles:SnapTo("y", 90))
entity:Spawn()
entity:Activate()
Schema:SaveRebelForceFields()
return entity
end
function ENT:Initialize()
self:SetModel("models/willardnetworks/props/forcefield_left.mdl")
self:SetSkin(3)
self:SetSolid(SOLID_VPHYSICS)
self:SetUseType(SIMPLE_USE)
self:PhysicsInit(SOLID_VPHYSICS)
local data = {}
data.start = self:GetPos() + self:GetRight() * -16
data.endpos = self:GetPos() + self:GetRight() * -480
data.filter = self
local trace = util.TraceLine(data)
local angles = self:GetAngles()
angles:RotateAroundAxis(angles:Up(), 90)
self.dummy = ents.Create("prop_physics")
self.dummy:SetModel("models/willardnetworks/props/forcefield_right.mdl")
self.dummy:SetSkin(3)
self.dummy:SetPos(trace.HitPos)
self.dummy:SetAngles(self:GetAngles())
self.dummy:Spawn()
self.dummy.PhysgunDisabled = true
self.dummy:SetCollisionGroup(COLLISION_GROUP_WORLD)
self:DeleteOnRemove(self.dummy)
local verts = {
{pos = Vector(0, 0, -25)},
{pos = Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) + Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) + Vector(0, 0, 150)},
{pos = self:WorldToLocal(self.dummy:GetPos()) - Vector(0, 0, 25)},
{pos = Vector(0, 0, -25)}
}
self:PhysicsFromMesh(verts)
local physObj = self:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:EnableMotion(false)
physObj:Sleep()
end
self:AddSolidFlags(FSOLID_CUSTOMBOXTEST)
self:SetCustomCollisionCheck(true)
self:SetDummy(self.dummy)
physObj = self.dummy:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:EnableMotion(false)
physObj:Sleep()
end
self:SetMoveType(MOVETYPE_NOCLIP)
self:SetMoveType(MOVETYPE_PUSH)
self:MakePhysicsObjectAShadow()
self:SetMode(MODE_OFFLINE)
end
function ENT:StartTouch(entity)
if (!self.buzzer) then
self.buzzer = CreateSound(entity, "ambient/machines/combine_shield_touch_loop1.wav")
self.buzzer:Play()
self.buzzer:ChangeVolume(0.8, 0)
self.buzzer:SetSoundLevel(60)
else
self.buzzer:ChangeVolume(0.8, 0.5)
self.buzzer:Play()
end
self.entities = (self.entities or 0) + 1
end
function ENT:EndTouch(entity)
self.entities = math.max((self.entities or 0) - 1, 0)
if (self.buzzer and self.entities == 0) then
self.buzzer:FadeOut(0.5)
end
end
function ENT:OnRemove()
if (self.buzzer) then
self.buzzer:Stop()
self.buzzer = nil
end
if (!ix.shuttingDown and !self.ixIsSafe) then
Schema:SaveRebelForceFields()
end
end
ENT.MODES = {
{
function(entity)
return false
end,
"field disengaged.",
"disengaged",
3
},
{
function(entity)
if (!entity:IsPlayer()) then return true end
local character = entity:GetCharacter()
if (!character or !character:GetInventory()) then
return true
end
if (!character:GetInventory():HasItem("id_card", {active = true})) then
if character:IsVortigaunt() and
character:GetCollarItemID() and
ix.item.instances[character:GetCollarItemID()] and
-ix.config.Get("blacklistSCAmount", 40) <= ix.item.instances[character:GetCollarItemID()]:GetData("sterilizedCredits", 0) then
return false
end
return false
else
return false
end
end,
"allow all individuals",
"engaged",
0
},
{
function(entity)
return true
end,
"disallow combine forces.",
"restricted",
1
},
{
function(entity)
return true
end,
"disallow non-functionary units (Unused Variant... ignore and change!!!)",
"restricted",
2
}
}
function ENT:Use(activator)
if ((self.nextUse or 0) < CurTime()) then
self.nextUse = CurTime() + 1.5
else
return
end
local bForced = CAMI.PlayerHasAccess(activator, "Helix - Basic Admin Commands", nil) and activator:GetMoveType() == MOVETYPE_NOCLIP
if (activator:GetCharacter():HasFlags("F") or bForced) then
self:SetMode(self:GetMode() + 1)
local action = "modified"
if (self:GetMode() > #self.MODES) then
self:SetMode(MODE_OFFLINE)
self:CollisionRulesChanged()
self:SetSkin(self.MODES[1][4])
self.dummy:SetSkin(self.MODES[1][4])
self:EmitSound("npc/turret_floor/die.wav")
else
self:CollisionRulesChanged()
self:SetSkin(self.MODES[self:GetMode()][4])
self.dummy:SetSkin(self.MODES[self:GetMode()][4])
end
self:EmitSound("buttons/combine_button5.wav", 140, 100 + (self:GetMode() - 1) * 15)
activator:ChatPrint("Changed barrier mode to: " .. self.MODES[self:GetMode()][2])
Schema:SaveRebelForceFields()
if (bForced) then return end
end
end
function ENT:Malfunction()
local bMalfunctioning = self:GetMalfunctioning()
if (!bMalfunctioning) then return end
timer.Simple(math.random(0.2, 1), function()
if (!self:IsValid()) then return end
self:SetMode(MODE_OFFLINE)
self:CollisionRulesChanged()
self:SetSkin(self.MODES[1][4])
self.dummy:SetSkin(self.MODES[1][4])
self:EmitSound("buttons/combine_button5.wav", 65, 100 + (self:GetMode() - 1) * 15)
self:EmitSound("npc/turret_floor/die.wav", 55)
local target = math.random(2) == 1 and self or self:GetDummy()
local vPoint = target:GetPos() + Vector(0, 0, math.random(-10, 100)) + target:GetRight() * (target == self and -10 or 10)
local effectdata = EffectData()
effectdata:SetOrigin(vPoint)
util.Effect("ManhackSparks", effectdata)
if (math.random(2) == 1) then
target = math.random(2) == 1 and self or self:GetDummy()
vPoint = target:GetPos() + Vector(0, 0, math.random(-10, 100)) + target:GetRight() * (target == self and -10 or 10)
effectdata = EffectData()
effectdata:SetOrigin(vPoint)
util.Effect("ManhackSparks", effectdata)
end
self:EmitSound("ambient/energy/zap" .. math.random(1, 9) .. ".wav", 65)
timer.Simple(math.random(1, 5), function()
if (!self:IsValid()) then return end
self:SetMode(math.random(2, 4))
self:CollisionRulesChanged()
self:SetSkin(self.MODES[self:GetMode()][4])
self.dummy:SetSkin(self.MODES[self:GetMode()][4])
self:EmitSound("buttons/combine_button5.wav", 65, 100 + (self:GetMode() - 1) * 15)
self:Malfunction()
end)
end)
end
hook.Add("ShouldCollide", "ix_rebelfields", function(a, b)
local entity
local forcefield
if (a:GetClass() == "ix_rebelfield") then
entity = b
forcefield = a
elseif (b:GetClass() == "ix_rebelfield") then
entity = a
forcefield = b
end
if (IsValid(forcefield)) then
if (IsValid(entity)) then
if (entity:IsPlayer() and ix.faction.Get(entity:Team()).allowRebelForcefieldPassage) then
return false
end
local mode = forcefield:GetMode() or MODE_OFFLINE
return istable(forcefield.MODES[mode]) and forcefield.MODES[mode][1](entity)
else
return forcefield:GetMode() != 5
end
end
end)
else
SHIELD_MATERIALS = {
nil,
ix.util.GetMaterial("models/effects/shield_blue"),
ix.util.GetMaterial("models/effects/shield_red"),
ix.util.GetMaterial("models/effects/shield_yellow")
}
function ENT:Initialize()
local data = {}
data.start = self:GetPos() + self:GetRight()*-16
data.endpos = self:GetPos() + self:GetRight()*-480
data.filter = self
local trace = util.TraceLine(data)
self:SetCustomCollisionCheck(true)
self:PhysicsInitConvex({
vector_origin,
Vector(0, 0, 150),
trace.HitPos + Vector(0, 0, 150),
trace.HitPos
})
self.distance = self:GetPos():Distance(trace.HitPos)
end
function ENT:Draw()
self:DrawModel()
if (self:GetMode() == MODE_OFFLINE) then
return
end
local pos = self:GetPos()
local angles = self:GetAngles()
local matrix = Matrix()
matrix:Translate(pos + self:GetUp() * -40)
matrix:Rotate(angles)
render.SetMaterial(SHIELD_MATERIALS[self:GetMode()])
local dummy = self:GetDummy()
if (IsValid(dummy)) then
local dummyPos = dummy:GetPos()
local vertex = self:WorldToLocal(dummyPos)
self:SetRenderBounds(vector_origin, vertex + self:GetUp() * 150)
cam.PushModelMatrix(matrix)
self:DrawShield(vertex)
cam.PopModelMatrix()
matrix:Translate(vertex)
matrix:Rotate(Angle(0, 180, 0))
cam.PushModelMatrix(matrix)
self:DrawShield(vertex)
cam.PopModelMatrix()
end
end
function ENT:DrawShield(vertex)
mesh.Begin(MATERIAL_QUADS, 1)
mesh.Position(vector_origin)
mesh.TexCoord(0, 0, 0)
mesh.AdvanceVertex()
mesh.Position(self:GetUp() * 190)
mesh.TexCoord(0, 0, 3)
mesh.AdvanceVertex()
mesh.Position(vertex + self:GetUp() * 190)
mesh.TexCoord(0, 3, 3)
mesh.AdvanceVertex()
mesh.Position(vertex)
mesh.TexCoord(0, 3, 0)
mesh.AdvanceVertex()
mesh.End()
end
end
properties.Add("ixRebelfieldStartMalfunction", {
MenuLabel = "Start Malfunctioning",
Order = 500,
MenuIcon = "icon16/lightning_add.png",
Filter = function(self, entity, client)
if (entity:GetClass() == "ix_rebelfield" and !entity:GetMalfunctioning() and CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands", nil)) then return true end
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:SetMalfunctioning(true)
entity:Malfunction()
end
})
properties.Add("ixRebelfieldStopMalfunction", {
MenuLabel = "Stop Malfunctioning",
Order = 500,
MenuIcon = "icon16/lightning_delete.png",
Filter = function(self, entity, client)
if (entity:GetClass() == "ix_rebelfield" and entity:GetMalfunctioning() and CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands", nil)) then return true end
end,
Action = function(self, entity)
self:MsgStart()
net.WriteEntity(entity)
self:MsgEnd()
end,
Receive = function(self, length, client)
local entity = net.ReadEntity()
if (!IsValid(entity)) then return end
if (!self:Filter(entity, client)) then return end
entity:SetMalfunctioning(false)
end
})

View File

@@ -0,0 +1,346 @@
--[[
| 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/
--]]
-- Variables that are used on both client and server
SWEP.PrintName = "Tool Gun"
SWEP.Author = ""
SWEP.Contact = ""
SWEP.Purpose = ""
SWEP.Instructions = ""
SWEP.ViewModel = "models/weapons/c_toolgun.mdl"
SWEP.WorldModel = "models/weapons/w_toolgun.mdl"
SWEP.UseHands = true
SWEP.Spawnable = true
-- Be nice, precache the models
util.PrecacheModel( SWEP.ViewModel )
util.PrecacheModel( SWEP.WorldModel )
-- Todo, make/find a better sound.
-- SWEP.ShootSound = Sound( "Airboat.FireGunRevDown" )
SWEP.ShootSound = Sound( "" )
SWEP.Tool = {}
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.CanHolster = true
SWEP.CanDeploy = true
function SWEP:InitializeTools()
local temp = {}
for k,v in pairs( self.Tool ) do
temp[k] = table.Copy( v )
temp[k].SWEP = self
temp[k].Owner = self.Owner
temp[k].Weapon = self.Weapon
temp[k]:Init()
end
self.Tool = temp
end
function SWEP:SetupDataTables()
self:NetworkVar( "Entity", 0, "TargetEntity1" )
self:NetworkVar( "Entity", 1, "TargetEntity2" )
self:NetworkVar( "Entity", 2, "TargetEntity3" )
self:NetworkVar( "Entity", 3, "TargetEntity4" )
end
-- Convenience function to check object limits
function SWEP:CheckLimit( str )
return self:GetOwner():CheckLimit( str )
end
function SWEP:Initialize()
self:SetHoldType( "revolver" )
self:InitializeTools()
-- We create these here. The problem is that these are meant to be constant values.
-- in the toolmode they're not because some tools can be automatic while some tools aren't.
-- Since this is a global table it's shared between all instances of the gun.
-- By creating new tables here we're making it so each tool has its own instance of the table
-- So changing it won't affect the other tools.
self.Primary = {
ClipSize = -1,
DefaultClip = -1,
Automatic = false,
Ammo = "none"
}
self.Secondary = {
ClipSize = -1,
DefaultClip = -1,
Automatic = false,
Ammo = "none"
}
end
function SWEP:OnRestore()
self:InitializeTools()
end
function SWEP:Precache()
util.PrecacheSound( self.ShootSound )
end
function SWEP:Reload()
-- This makes the reload a semi-automatic thing rather than a continuous thing
if ( !self.Owner:KeyPressed( IN_RELOAD ) ) then return end
local mode = self:GetMode()
local trace = self.Owner:GetEyeTrace()
if ( !trace.Hit ) then return end
local tool = self:GetToolObject()
if ( !tool ) then return end
tool:CheckObjects()
-- Does the server setting say it's ok?
if ( !tool:Allowed() ) then return end
-- Ask the gamemode if it's ok to do this
if ( !gamemode.Call( "CanTool", self.Owner, trace, mode ) ) then return end
if ( !tool:Reload( trace ) ) then return end
self:DoShootEffect( trace.HitPos, trace.HitNormal, trace.Entity, trace.PhysicsBone, IsFirstTimePredicted() )
end
-- Returns the mode we're in
function SWEP:GetMode()
return self.Mode
end
-- Think does stuff every frame
function SWEP:Think()
self.Mode = self.Owner:GetInfo( "gmod_toolmode" )
local tool = self:GetToolObject()
if ( !tool ) then return end
tool:CheckObjects()
self.last_mode = self.current_mode
self.current_mode = self.Mode
-- Release ghost entities if we're not allowed to use this new mode?
if ( !tool:Allowed() ) then
self:GetToolObject( self.last_mode ):ReleaseGhostEntity()
return
end
if ( self.last_mode != self.current_mode ) then
if ( !self:GetToolObject( self.last_mode ) ) then return end
-- We want to release the ghost entity just in case
self:GetToolObject( self.last_mode ):Holster()
end
self.Primary.Automatic = tool.LeftClickAutomatic or false
self.Secondary.Automatic = tool.RightClickAutomatic or false
self.RequiresTraceHit = tool.RequiresTraceHit or true
tool:Think()
end
-- The shoot effect
function SWEP:DoShootEffect( hitpos, hitnormal, entity, physbone, bFirstTimePredicted )
self:EmitSound( self.ShootSound )
self:SendWeaponAnim( ACT_VM_PRIMARYATTACK ) -- View model animation
-- There's a bug with the model that's causing a muzzle to
-- appear on everyone's screen when we fire this animation.
self.Owner:SetAnimation( PLAYER_ATTACK1 ) -- 3rd Person Animation
if ( !bFirstTimePredicted ) then return end
--[[
local effectdata = EffectData()
effectdata:SetOrigin( hitpos )
effectdata:SetNormal( hitnormal )
effectdata:SetEntity( entity )
effectdata:SetAttachment( physbone )
util.Effect( "selection_indicator", effectdata )
local effectdata = EffectData()
effectdata:SetOrigin( hitpos )
effectdata:SetStart( self.Owner:GetShootPos() )
effectdata:SetAttachment( 1 )
effectdata:SetEntity( self )
util.Effect( "ToolTracer", effectdata )
--]]
end
if (SERVER) then
ix.log.AddType("toolgunFired", function(client, name)
return string.format("%s has fired a toolgun with the name: %s", client:GetName(), name)
end)
end
-- Trace a line then send the result to a mode function
function SWEP:PrimaryAttack()
local mode = self:GetMode()
local tr = util.GetPlayerTrace( self.Owner )
tr.mask = bit.bor( CONTENTS_SOLID, CONTENTS_MOVEABLE, CONTENTS_MONSTER, CONTENTS_WINDOW, CONTENTS_DEBRIS, CONTENTS_GRATE, CONTENTS_AUX )
local trace = util.TraceLine( tr )
if ( !trace.Hit ) then return end
local tool = self:GetToolObject()
if ( !tool ) then return end
tool:CheckObjects()
-- Does the server setting say it's ok?
if ( !tool:Allowed() ) then return end
-- Ask the gamemode if it's ok to do this
if ( !gamemode.Call( "CanTool", self.Owner, trace, mode ) ) then return end
if (SERVER) then
ix.log.Add(self:GetOwner(), "toolgunFired", self:GetMode())
end
if ( !tool:LeftClick( trace ) ) then return end
self:DoShootEffect( trace.HitPos, trace.HitNormal, trace.Entity, trace.PhysicsBone, IsFirstTimePredicted() )
end
function SWEP:SecondaryAttack()
local mode = self:GetMode()
local tr = util.GetPlayerTrace( self.Owner )
tr.mask = bit.bor( CONTENTS_SOLID, CONTENTS_MOVEABLE, CONTENTS_MONSTER, CONTENTS_WINDOW, CONTENTS_DEBRIS, CONTENTS_GRATE, CONTENTS_AUX )
local trace = util.TraceLine( tr )
if ( !trace.Hit ) then return end
local tool = self:GetToolObject()
if ( !tool ) then return end
tool:CheckObjects()
-- Ask the gamemode if it's ok to do this
if ( !tool:Allowed() ) then return end
if ( !gamemode.Call( "CanTool", self.Owner, trace, mode ) ) then return end
if ( !tool:RightClick( trace ) ) then return end
self:DoShootEffect( trace.HitPos, trace.HitNormal, trace.Entity, trace.PhysicsBone, IsFirstTimePredicted() )
end
function SWEP:Holster()
-- Just do what the SWEP wants to do if there's no tool
if ( !self:GetToolObject() ) then return self.CanHolster end
local CanHolster = self:GetToolObject():Holster()
if ( CanHolster ~= nil ) then return CanHolster end
return self.CanHolster
end
-- Delete ghosts here in case the weapon gets deleted all of a sudden somehow
function SWEP:OnRemove()
if ( !self:GetToolObject() ) then return end
self:GetToolObject():ReleaseGhostEntity()
end
-- This will remove any ghosts when a player dies and drops the weapon
function SWEP:OwnerChanged()
if ( !self:GetToolObject() ) then return end
self:GetToolObject():ReleaseGhostEntity()
end
-- Deploy
function SWEP:Deploy()
-- Just do what the SWEP wants to do if there is no tool
if ( !self:GetToolObject() ) then return self.CanDeploy end
self:GetToolObject():UpdateData()
local CanDeploy = self:GetToolObject():Deploy()
if ( CanDeploy ~= nil ) then return CanDeploy end
return self.CanDeploy
end
function SWEP:GetToolObject( tool )
local mode = tool or self:GetMode()
if ( !self.Tool[ mode ] ) then return false end
return self.Tool[ mode ]
end
function SWEP:FireAnimationEvent( pos, ang, event, options )
-- Disables animation based muzzle event
if ( event == 21 ) then return true end
-- Disable thirdperson muzzle flash
if ( event == 5003 ) then return true end
end
include( "stool.lua" )

View File

@@ -0,0 +1,162 @@
--[[
| 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/
--]]
TOOL.Category = "Render"
TOOL.Name = "#tool.paint.name"
TOOL.LeftClickAutomatic = true
TOOL.RightClickAutomatic = true
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "decal" ] = "Blood"
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
local function PlaceDecal( ply, ent, data )
if ( !IsValid( ent ) && !ent:IsWorld() ) then return end
local bone = ent:GetPhysicsObjectNum( data.bone or 0 )
if ( !IsValid( bone ) ) then bone = ent end
if ( SERVER ) then
util.Decal( data.decal, bone:LocalToWorld( data.Pos1 ), bone:LocalToWorld( data.Pos2 ), ply )
local i = ent.DecalCount or 0
i = i + 1
duplicator.StoreEntityModifier( ent, "decal" .. i, data )
ent.DecalCount = i
end
end
--
-- Register decal duplicator
--
for i = 1, 32 do
duplicator.RegisterEntityModifier( "decal" .. i, function( ply, ent, data )
timer.Simple( i * 0.05, function() PlaceDecal( ply, ent, data ) end )
end )
end
function TOOL:Reload( trace )
if ( !IsValid( trace.Entity ) ) then return false end
trace.Entity:RemoveAllDecals()
if ( SERVER ) then
for i = 1, 32 do
duplicator.ClearEntityModifier( trace.Entity, "decal" .. i )
end
trace.Entity.DecalCount = nil
end
return true
end
function TOOL:LeftClick( trace )
return self:RightClick( trace, true )
end
function TOOL:RightClick( trace, bNoDelay )
local decal = self:GetClientInfo( "decal" )
local Pos1 = trace.HitPos + trace.HitNormal
local Pos2 = trace.HitPos - trace.HitNormal
local Bone = trace.Entity:GetPhysicsObjectNum( trace.PhysicsBone or 0 )
if ( !IsValid( Bone ) ) then Bone = trace.Entity end
Pos1 = Bone:WorldToLocal( Pos1 )
Pos2 = Bone:WorldToLocal( Pos2 )
PlaceDecal( self:GetOwner(), trace.Entity, { Pos1 = Pos1, Pos2 = Pos2, bone = trace.PhysicsBone, decal = decal } )
if ( bNoDelay ) then
self:GetWeapon():SetNextPrimaryFire( CurTime() + 0.05 )
self:GetWeapon():SetNextSecondaryFire( CurTime() + 0.05 )
else
self:GetWeapon():SetNextPrimaryFire( CurTime() + 0.2 )
self:GetWeapon():SetNextSecondaryFire( CurTime() + 0.2 )
end
return false
end
game.AddDecal( "Eye", "decals/eye" )
game.AddDecal( "Dark", "decals/dark" )
game.AddDecal( "Smile", "decals/smile" )
game.AddDecal( "Light", "decals/light" )
game.AddDecal( "Cross", "decals/cross" )
game.AddDecal( "Nought", "decals/nought" )
game.AddDecal( "Noughtsncrosses", "decals/noughtsncrosses" )
list.Add( "PaintMaterials", "Eye" )
list.Add( "PaintMaterials", "Smile" )
list.Add( "PaintMaterials", "Light" )
list.Add( "PaintMaterials", "Dark" )
list.Add( "PaintMaterials", "Blood" )
list.Add( "PaintMaterials", "YellowBlood" )
list.Add( "PaintMaterials", "Impact.Metal" )
list.Add( "PaintMaterials", "Scorch" )
list.Add( "PaintMaterials", "BeerSplash" )
list.Add( "PaintMaterials", "ExplosiveGunshot" )
list.Add( "PaintMaterials", "BirdPoop" )
list.Add( "PaintMaterials", "PaintSplatPink" )
list.Add( "PaintMaterials", "PaintSplatGreen" )
list.Add( "PaintMaterials", "PaintSplatBlue" )
list.Add( "PaintMaterials", "ManhackCut" )
list.Add( "PaintMaterials", "FadingScorch" )
list.Add( "PaintMaterials", "Antlion.Splat" )
list.Add( "PaintMaterials", "Splash.Large" )
list.Add( "PaintMaterials", "BulletProof" )
list.Add( "PaintMaterials", "GlassBreak" )
list.Add( "PaintMaterials", "Impact.Sand" )
list.Add( "PaintMaterials", "Impact.BloodyFlesh" )
list.Add( "PaintMaterials", "Impact.Antlion" )
list.Add( "PaintMaterials", "Impact.Glass" )
list.Add( "PaintMaterials", "Impact.Wood" )
list.Add( "PaintMaterials", "Impact.Concrete" )
list.Add( "PaintMaterials", "Noughtsncrosses" )
list.Add( "PaintMaterials", "Nought" )
list.Add( "PaintMaterials", "Cross" )
function TOOL.BuildCPanel( CPanel )
-- Remove duplicates.
local Options = {}
for id, str in pairs( list.Get( "PaintMaterials" ) ) do
if ( !table.HasValue( Options, str ) ) then
table.insert( Options, str )
end
end
table.sort( Options )
local listbox = CPanel:AddControl( "ListBox", { Label = "#tool.paint.texture", Height = 17 + table.Count( Options ) * 17 } )
for k, decal in pairs( Options ) do
local line = listbox:AddLine( decal )
line.data = { paint_decal = decal }
if ( GetConVarString( "paint_decal" ) == tostring( decal ) ) then line:SetSelected( true ) end
end
end

View File

@@ -0,0 +1,105 @@
--[[
| 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/
--]]
TOOL.Category = "HL2RP Staff QoL"
TOOL.Name = "NPC Spawner Editor"
TOOL.RequiresTraceHit = true
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:GetPlayerBoundsTrace()
local client = self:GetOwner()
return util.TraceLine({
start = client:GetShootPos(),
endpos = client:GetShootPos() + client:GetForward() * 96,
filter = client
})
end
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
local entity = trace.Entity
if !entity or entity and !IsValid(entity) then return end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if entity:GetClass() != "ix_npcspawner" then return end
entity:Use(self:GetOwner())
end
end
function TOOL:RightClick( trace )
local entity = trace.Entity
local client = self:GetOwner()
if !entity or entity and !IsValid(entity) then
client.npcEditStart = nil
client.npcEnt = nil
return
end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if entity:GetClass() != "ix_npcspawner" then return end
if client.npcEditStart then
client.npcEditStart = nil
client.npcEnt = nil
else
client.npcEditStart = entity:GetPos() + (entity:GetForward() * -60 + entity:GetRight()*-40 + entity:GetUp()*128)
client.npcEnt = entity
end
end
function TOOL:Reload(trace)
local client = self:GetOwner()
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if !client.npcEditStart or !client.npcEnt then return end
local tr = util.TraceLine({
start = client:GetShootPos(),
endpos = client:GetShootPos() + client:GetForward() * 96,
filter = client
})
client.npcEnt:SetSpawnPosStart(client.npcEditStart)
client.npcEnt:SetSpawnPosEnd(tr.HitPos)
client.npcEditStart = nil
client.npcEnt = nil
end
if CLIENT then
hook.Add("PostDrawTranslucentRenderables", "NPCSpawnEdit", function(bDepth, bSkybox)
if ( bSkybox ) then return end
if LocalPlayer().npcEditStart then
local tr = util.TraceLine({
start = LocalPlayer():GetShootPos(),
endpos = LocalPlayer():GetShootPos() + LocalPlayer():GetForward() * 96,
filter = LocalPlayer()
})
local center, min, max = LocalPlayer().npcEnt:SpawnAreaPosition(LocalPlayer().npcEditStart, tr.HitPos)
local color = Color(255, 255, 255, 255)
render.DrawWireframeBox(center, angle_zero, min, max, color)
end
end)
language.Add( "Tool.sh_npcspawnedit.name", "NPC Spawner Configurator" )
language.Add( "Tool.sh_npcspawnedit.desc", "You can edit NPC spawner entities with it." )
language.Add( "Tool.sh_npcspawnedit.left", "Open spawner menu" )
language.Add( "Tool.sh_npcspawnedit.right", "Edit spawner area bounds. Click again to stop changing bounds." )
language.Add( "Tool.sh_npcspawnedit.reload", "Save your area bound changes." )
end

View File

@@ -0,0 +1,74 @@
--[[
| 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/
--]]
TOOL.Category = "HL2RP Staff QoL"
TOOL.Name = "Panel Add"
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "url" ] = ""
TOOL.ClientConVar[ "scale" ] = 1
TOOL.ClientConVar[ "brightness" ] = 100
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(self:GetOwner(), "Helix - Manage Panels") then return false end
local position = trace.HitPos
local angles = trace.HitNormal:Angle()
angles:RotateAroundAxis(angles:Up(), 90)
angles:RotateAroundAxis(angles:Forward(), 90)
if !ix.plugin.list then return end
if !ix.plugin.list["3dpanel"] then return end
if !ix.plugin.list["3dpanel"].AddPanel then return end
local url = self:GetClientInfo( "url", "" )
local scale = self:GetClientNumber( "scale", 0 )
local brightness = self:GetClientNumber( "brightness", 0 )
ix.plugin.list["3dpanel"]:AddPanel(position + angles:Up() * 0.1, angles, url, scale, brightness)
return "@panelAdded"
end
end
function TOOL:RightClick( trace )
if !ix.plugin.list then return end
if !ix.plugin.list["3dpanel"] then return end
if !ix.plugin.list["3dpanel"].RemovePanel then return end
local position = trace.HitPos
-- Remove the panel(s) and get the amount removed.
local amount = ix.plugin.list["3dpanel"]:RemovePanel(position, false)
return "@panelRemoved", amount
end
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "Header", { Description = "Enter URL!" } )
CPanel:AddControl( "textbox", { Label = "URL", Command = "sh_paneladd_url", Help = false } )
CPanel:AddControl( "Slider", { Label = "Scale", Command = "sh_paneladd_scale", Type = "Float", Min = 0.001, Max = 5, Help = false } )
CPanel:AddControl( "Slider", { Label = "Brightness", Command = "sh_paneladd_brightness", Type = "Float", Min = 0, Max = 255, Help = false } )
end
if CLIENT then
language.Add( "Tool.sh_paneladd.name", "Panel Add" )
language.Add( "Tool.sh_paneladd.desc", "Same as /paneladd" )
language.Add( "Tool.sh_paneladd.left", "Primary: Add Panel" )
language.Add( "Tool.sh_paneladd.right", "Right Click: Remove Panel" )
language.Add( "Tool.sh_paneladd.reload", "Nothing." )
end

View File

@@ -0,0 +1,84 @@
--[[
| 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/
--]]
TOOL.Category = "HL2RP Staff QoL"
TOOL.Name = "Persist"
TOOL.RequiresTraceHit = true
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
local function GetRealModel(entity)
return entity:GetClass() == "prop_effect" and entity.AttachedEntity:GetModel() or entity:GetModel()
end
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(client, "Helix - Basic Admin Commands") then return false end
local entity = trace.Entity
if !entity or entity and !IsValid(entity) then return end
if entity:IsPlayer() or entity:IsVehicle() or entity.bNoPersist then return end
if !self.GetOwner then return end
if !self:GetOwner() then return end
if !IsValid(self:GetOwner()) then return end
if !ix.plugin.list then return end
if !ix.plugin.list["persistence"] then return end
if !ix.plugin.list["persistence"].stored then return end
local lampCount = 0
for _, v in pairs(ix.plugin.list["persistence"].stored) do
if IsValid(v) and v:GetClass() == "gmod_lamp" then
lampCount = lampCount + 1
end
end
if !entity:GetNetVar("Persistent") then
if entity:GetClass() == "gmod_lamp" and lampCount >= ix.config.Get("maxLamps", 1) then
return self:GetOwner():Notify("Max persisted lamps reached.")
end
ix.plugin.list["persistence"].stored[#ix.plugin.list["persistence"].stored + 1] = entity
entity:SetNetVar("Persistent", true)
ix.saveEnts:SaveEntity(entity)
ix.log.Add(self:GetOwner(), "persist", GetRealModel(entity), true)
self:GetOwner():Notify("You persisted this entity.")
else
for k, v in ipairs(ix.plugin.list["persistence"].stored) do
if (v == entity) then
table.remove(ix.plugin.list["persistence"].stored, k)
break
end
end
entity:SetNetVar("Persistent", false)
ix.saveEnts:DeleteEntity(entity)
ix.log.Add(self:GetOwner(), "persist", GetRealModel(entity), false)
self:GetOwner():Notify("You unpersisted this entity.")
end
end
end
if CLIENT then
language.Add( "Tool.sh_persist.name", "Persist" )
language.Add( "Tool.sh_persist.desc", "Same as persist in context menu" )
language.Add( "Tool.sh_persist.left", "Primary: Persist/Unpersist" )
language.Add( "Tool.sh_persist.right", "Nothing." )
language.Add( "Tool.sh_persist.reload", "Nothing." )
end

View File

@@ -0,0 +1,79 @@
--[[
| 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/
--]]
TOOL.Category = "HL2RP Staff QoL"
TOOL.Name = "Text Add"
TOOL.RequiresTraceHit = true
TOOL.ClientConVar[ "text" ] = ""
TOOL.ClientConVar[ "scale" ] = 1
TOOL.Information = {
{ name = "left" },
{ name = "right" },
{ name = "reload" }
}
function TOOL:LeftClick( trace )
if (SERVER) then
if !CAMI.PlayerHasAccess(self:GetOwner(), "Helix - Basic Admin Commands") then return false end
local position = trace.HitPos
local angles = trace.HitNormal:Angle()
angles:RotateAroundAxis(angles:Up(), 90)
angles:RotateAroundAxis(angles:Forward(), 90)
if !ix.plugin.list then return end
if !ix.plugin.list["3dtext"] then return end
if !ix.plugin.list["3dtext"].AddText then return end
local text = self:GetClientInfo( "text", "" )
local scale = self:GetClientNumber( "scale", 0 )
local index = ix.plugin.list["3dtext"]:AddText(position + angles:Up() * 0.1, angles, text, scale)
undo.Create("ix3dText")
undo.SetPlayer(self:GetOwner())
undo.AddFunction(function()
if (ix.plugin.list["3dtext"]:RemoveTextByID(index)) then
ix.log.Add(self:GetOwner(), "undo3dText")
end
end)
undo.Finish()
return "@textAdded"
end
end
function TOOL:RightClick( trace )
if !ix.plugin.list then return end
if !ix.plugin.list["3dtext"] then return end
if !ix.plugin.list["3dtext"].RemoveText then return end
local position = trace.HitPos + trace.HitNormal * 2
local amount = ix.plugin.list["3dtext"]:RemoveText(position, false)
return "@textRemoved", amount
end
function TOOL.BuildCPanel( CPanel )
CPanel:AddControl( "Header", { Description = "Enter Text!" } )
CPanel:AddControl( "textbox", { Label = "Text", Command = "sh_textadd_text", Help = false } )
CPanel:AddControl( "Slider", { Label = "Scale", Command = "sh_textadd_scale", Type = "Float", Min = 0.001, Max = 5, Help = false } )
end
if CLIENT then
language.Add( "Tool.sh_textadd.name", "Text Add" )
language.Add( "Tool.sh_textadd.desc", "Same as /textadd" )
language.Add( "Tool.sh_textadd.left", "Primary: Add Text" )
language.Add( "Tool.sh_textadd.right", "Right Click: Remove Text." )
language.Add( "Tool.sh_textadd.reload", "Nothing." )
end

View File

@@ -0,0 +1,490 @@
--[[
| 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()
if (CLIENT) then
SWEP.PrintName = "CV-2000 Stun Baton"
SWEP.Slot = 0
SWEP.SlotPos = 5
SWEP.DrawAmmo = false
SWEP.DrawCrosshair = false
end
SWEP.Category = "HL2 RP"
SWEP.Author = "Chessnut"
SWEP.Instructions = "Primary Fire: Stun.\nALT + Primary Fire: Toggle stun.\nSecondary Fire: Push/Knock."
SWEP.Purpose = "Hitting things and knocking on doors."
SWEP.Drop = false
SWEP.HoldType = "melee"
SWEP.Spawnable = true
SWEP.AdminOnly = true
SWEP.ViewModelFOV = 47
SWEP.ViewModelFlip = false
SWEP.AnimPrefix = "melee"
SWEP.ViewTranslation = 4
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = ""
SWEP.Primary.Damage = 15
SWEP.Primary.Delay = 0.7
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = 0
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = ""
SWEP.ViewModel = Model("models/weapons/c_wn_stunstick.mdl")
SWEP.WorldModel = Model("models/weapons/w_wn_stunbaton.mdl")
SWEP.UseHands = true
SWEP.LowerAngles = Angle(15, -10, -20)
SWEP.FireWhenLowered = true
function SWEP:SetupDataTables()
self:NetworkVar("Bool", 0, "Activated")
self:NetworkVarNotify( "Activated", self.OnActiveToggle )
end
function SWEP:Precache()
util.PrecacheSound("physics/wood/wood_crate_impact_hard3.wav")
end
function SWEP:StartStunstickSound()
if (SERVER) then
local client = self:GetOwner()
self.patch1 = CreateSound(client, "wn_stunstick/stunstick_idle_"..math.random(1, 4)..".wav")
self.patch1:SetSoundLevel(40)
self.patch1:Play()
self:SoundTimer()
end
end
function SWEP:StopStunstickSound()
if (SERVER) then
local patchToStop
if (self.patch1 and self.patch1:IsPlaying()) then
patchToStop = self.patch1
else
patchToStop = self.patch2
end
if (!patchToStop) then return end
patchToStop:FadeOut(1)
end
end
-- for when someone primary fires or w/e
function SWEP:DuckStunstickSound(vol, delta)
if (SERVER) then
if (!delta) then
delta = 0.5
end
if (!vol) then
vol = 0.25
end
local patchToDuck = self.patch1 and self.patch1:IsPlaying() and self.patch1 or self.patch2
if (!patchToDuck) then return end
patchToDuck:ChangeVolume(vol, delta)
timer.Simple(delta + 0.1, function()
patchToDuck:ChangeVolume(1, delta)
end)
end
end
function SWEP:OnActiveToggle(name, old, new)
if (new) then
self:StartStunstickSound()
else
self:StopStunstickSound()
end
end
function SWEP:SoundTimer()
if (SERVER) then
local client = self:GetOwner()
local tName = "stunstick_idle_"..client:SteamID64().."_timer"
if timer.Exists(tName) then timer.Remove(tName) end
timer.Create(tName, 12, 0, function()
if (!IsValid(client)) then
timer.Remove(tName)
return
end
if (!IsValid(self) or !self:GetActivated()) then
return
end
local patchToStart
local patchToStop
if (self.patch1 and self.patch1:IsPlaying()) then
patchToStart = self.patch2
patchToStop = self.patch1
else
patchToStart = self.patch1
patchToStop = self.patch2
end
if (!patchToStop) then
timer.Remove(tName)
return
end
patchToStop:FadeOut(1)
patchToStart = CreateSound(client, "wn_stunstick/stunstick_idle_"..math.random(1, 4)..".wav")
patchToStart:SetSoundLevel(40) -- maybe make this configurable idk
patchToStart:Play()
patchToStart:ChangeVolume( 0.1, 0 )
patchToStart:ChangeVolume(1, 1)
if (self.patch1 and self.patch1:IsPlaying()) then
self.patch2 = patchToStart
else
self.patch1 = patchToStart
end
end)
end
end
function SWEP:CreateWMParticle()
if self.particle and self.particle:IsValid() then
self.particle:StopEmissionAndDestroyImmediately()
end
self.particle = CreateParticleSystem(self, "wn_stunstick_fx", PATTACH_POINT_FOLLOW, 1, Vector(0, 0, 0))
end
function SWEP:Initialize()
self:SetHoldType(self.HoldType)
end
function SWEP:OnRaised()
self.lastRaiseTime = CurTime()
end
function SWEP:OnLowered()
self:SetActivated(false)
if (CLIENT) then
if (self.particle and IsValid(self.particle)) then
self.particle:StopEmissionAndDestroyImmediately()
end
end
end
function SWEP:Holster(nextWep)
if self.patch1 and self.patch1:IsPlaying() or self.patch2 and self.patch2:IsPlaying() then
self:StopStunstickSound()
end
self:OnLowered()
return true
end
local STUNSTICK_GLOW_MATERIAL2 = Material("effects/blueflare1")
local STUNSTICK_GLOW_MATERIAL_NOZ = Material("sprites/light_glow02_add_noz")
function SWEP:DrawWorldModel()
self:DrawModel()
if (!self.particle or self.particle and !self.particle:IsValid()) then
if self:GetActivated() then
self:CreateWMParticle()
end
elseif (self.particle and self.particle:IsValid()) then
if !self:GetActivated() then
self.particle:StopEmissionAndDestroyImmediately()
end
end
if (self:GetActivated()) then
local size = math.Rand(2.0, 6.0)
local glow = math.Rand(0.6, 0.8) * 255
local color = Color(glow / 2, glow / 1.5, glow / 1.1)
local attachment = self:GetAttachment(1)
if (attachment) then
local position = attachment.Pos
render.SetMaterial(STUNSTICK_GLOW_MATERIAL2)
render.DrawSprite(position, size * 2, size * 2, color)
end
end
end
local NUM_BEAM_ATTACHEMENTS = 9
local BEAM_ATTACH_CORE_NAME = "sparkrear"
SWEP.nextSpark = 0
function SWEP:PostDrawViewModel()
if (!self:GetActivated()) then
return
end
local viewModel = LocalPlayer():GetViewModel()
if (!IsValid(viewModel)) then
return
end
cam.Start3D(EyePos(), EyeAngles())
local size = math.Rand(3.0, 4.0)
local color = Color(75, 100, 150, 50 + math.sin(RealTime() * 2)*20)
STUNSTICK_GLOW_MATERIAL_NOZ:SetFloat("$alpha", color.a / 255)
render.SetMaterial(STUNSTICK_GLOW_MATERIAL_NOZ)
local attachment = viewModel:GetAttachment(1)
if (attachment) then
render.DrawSprite(attachment.Pos, size * 10, size * 15, color)
end
for i = 1, NUM_BEAM_ATTACHEMENTS do
attachment = viewModel:GetAttachment(viewModel:LookupAttachment("spark"..i.."a"))
size = math.Rand(2.5, 5.0)
if (attachment and attachment.Pos) then
render.DrawSprite(attachment.Pos, size, size, color)
end
attachment = viewModel:GetAttachment(viewModel:LookupAttachment("spark"..i.."b"))
size = math.Rand(2.5, 5.0)
if (attachment and attachment.Pos) then
render.DrawSprite(attachment.Pos, size, size, color)
end
end
cam.End3D()
local sparkAttachment = viewModel:GetAttachment(1)
if self.nextSpark <= CurTime() then
self.nextSpark = CurTime() + math.random(1, 10)
local ef = EffectData()
ef:SetOrigin(sparkAttachment.Pos)
ef:SetMagnitude(math.random(1, 2))
ef:SetScale(0.1)
util.Effect("ElectricSpark", ef)
self:EmitSound("wn_stunstick/spark".. math.random(1, 4) ..".wav", nil, math.random(80, 120))
end
if (self.particle and self.particle:IsValid() and self:GetActivated()) then
self.particle:StopEmissionAndDestroyImmediately()
end
end
function SWEP:PrimaryAttack()
self:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
if (!self:GetOwner():IsWepRaised()) then
return
end
if (self:GetOwner():KeyDown(IN_WALK)) then
if (SERVER) then
self:SetActivated(!self:GetActivated())
local state = self:GetActivated()
if (state) then
self:GetOwner():EmitSound("Weapon_StunStick.Activate")
else
self:GetOwner():EmitSound("Weapon_StunStick.Deactivate")
end
local model = string.lower(self:GetOwner():GetModel())
if (ix.anim.GetModelClass(model) == "metrocop") then
self:GetOwner():ForceSequence(state and "activatebaton" or "deactivatebaton", nil, nil, true)
end
end
if (CLIENT) then
timer.Simple(0, function()
if !(IsValid(self)) then return end
if (self:GetActivated()) then
self:CreateWMParticle()
else
if (self.particle and self.particle:IsValid()) then
self.particle:StopEmissionAndDestroyImmediately()
end
end
end)
end
return
end
local result = hook.Run("CanDoMeleeAttack", self)
if (result == false) then
return
end
if (self:GetActivated()) then
self:DuckStunstickSound()
end
self:EmitSound("wn_stunstick/stunstick_swing".. math.random(1, 3) ..".wav")
self:SendWeaponAnim(ACT_VM_HITCENTER)
local damage = self.Primary.Damage
if (self:GetActivated()) then
damage = 10
end
self:GetOwner():SetAnimation(PLAYER_ATTACK1)
self:GetOwner():ViewPunch(Angle(1, 0, 0.125))
timer.Simple(0.1, function()
if !IsValid(self) then return end
self:GetOwner():LagCompensation(true)
local data = {}
data.start = self:GetOwner():GetShootPos()
data.endpos = data.start + self:GetOwner():GetAimVector()*72
data.filter = self:GetOwner()
local trace = util.TraceLine(data)
self:GetOwner():LagCompensation(false)
if (SERVER and trace.Hit) then
if (self:GetActivated()) then
local effect = EffectData()
effect:SetStart(trace.HitPos)
effect:SetNormal(trace.HitNormal)
effect:SetOrigin(trace.HitPos)
util.Effect("StunstickImpact", effect, true, true)
end
self:GetOwner():EmitSound("wn_stunstick/stunstick_fleshhit".. math.random(1, 3) ..".wav")
local entity = trace.Entity
if (IsValid(entity)) then
if (entity:IsPlayer()) then
if (self:GetActivated()) then
entity.ixStuns = (entity.ixStuns or 0) + 1
timer.Simple(10, function()
if (!entity.ixStuns) then return end
entity.ixStuns = math.max(entity.ixStuns - 1, 0)
end)
end
entity:ViewPunch(Angle(-20, math.random(-15, 15), math.random(-10, 10)))
if (self:GetActivated() and entity.ixStuns > 2) then
entity:SetRagdolled(true, 60)
ix.log.Add(entity, "knockedOut", "hit by stunstick owned by "..self:GetOwner():GetName())
entity.ixStuns = 0
return
end
elseif (entity:IsRagdoll()) then
damage = self:GetActivated() and 2 or 10
end
local damageInfo = DamageInfo()
damageInfo:SetAttacker(self:GetOwner())
damageInfo:SetInflictor(self)
damageInfo:SetDamage(damage)
damageInfo:SetDamageType(DMG_CLUB)
damageInfo:SetDamagePosition(trace.HitPos)
damageInfo:SetDamageForce(self:GetOwner():GetAimVector() * 10000)
entity:DispatchTraceAttack(damageInfo, data.start, data.endpos)
end
end
end)
end
function SWEP:SecondaryAttack()
self:GetOwner():LagCompensation(true)
local data = {}
data.start = self:GetOwner():GetShootPos()
data.endpos = data.start + self:GetOwner():GetAimVector()*72
data.filter = self:GetOwner()
data.mins = Vector(-8, -8, -30)
data.maxs = Vector(8, 8, 10)
local trace = util.TraceHull(data)
local entity = trace.Entity
self:GetOwner():LagCompensation(false)
if (SERVER and IsValid(entity)) then
local bPushed = false
if (entity:IsDoor()) then
if (hook.Run("PlayerCanKnockOnDoor", self:GetOwner(), entity) == false) then
return
end
self:GetOwner():ViewPunch(Angle(-1.3, 1.8, 0))
self:GetOwner():EmitSound("physics/wood/wood_crate_impact_hard3.wav")
self:GetOwner():SetAnimation(PLAYER_ATTACK1)
self:SetNextSecondaryFire(CurTime() + 0.4)
self:SetNextPrimaryFire(CurTime() + 1)
elseif (entity:IsPlayer()) then
local direction = self:GetOwner():GetAimVector() * (300 + (self:GetOwner():GetCharacter():GetAttribute("str", 0) * 3))
direction.z = 0
entity:SetVelocity(direction)
hook.Run("PlayerPushedPlayer", self:GetOwner(), entity)
bPushed = true
else
local physObj = entity:GetPhysicsObject()
if (IsValid(physObj)) then
physObj:SetVelocity(self:GetOwner():GetAimVector() * 180)
end
bPushed = true
end
if (bPushed) then
self:SetNextSecondaryFire(CurTime() + 1.5)
self:SetNextPrimaryFire(CurTime() + 1.5)
self:GetOwner():EmitSound("Weapon_Crossbow.BoltHitBody")
local model = string.lower(self:GetOwner():GetModel())
if (ix.anim.GetModelClass(model) == "metrocop") then
self:GetOwner():ForceSequence("pushplayer")
end
end
end
end

View File

@@ -0,0 +1,12 @@
--[[
| 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/
--]]
DeriveGamemode("helix")

View File

@@ -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/
--]]
AddCSLuaFile("cl_init.lua")
DeriveGamemode("helix")

View File

@@ -0,0 +1,35 @@
{
"lint_maxScopeDepth": 20,
"lint_syntaxErrors": true,
"lint_syntaxInconsistencies": true,
"lint_deprecated": true,
"lint_trailingWhitespace": true,
"lint_whitespaceStyle": false,
"lint_beginnerMistakes": true,
"lint_emptyBlocks": true,
"lint_shadowing": true,
"lint_gotos": true,
"lint_doubleNegations": true,
"lint_redundantIfStatements": false,
"lint_redundantParentheses": true,
"lint_duplicateTableKeys": true,
"lint_profanity": true,
"lint_unusedVars": true,
"lint_unusedParameters": false,
"lint_unusedLoopVars": false,
"lint_inconsistentVariableStyle": false,
"lint_ignoreFiles": [],
"prettyprint_spaceAfterParens": false,
"prettyprint_spaceAfterBrackets": false,
"prettyprint_spaceAfterBraces": false,
"prettyprint_spaceEmptyBrackets": true,
"prettyprint_spaceAfterLabel": false,
"prettyprint_spaceBeforeComma": false,
"prettyprint_spaceAfterComma": true,
"prettyprint_semicolons": false,
"prettyprint_cStyle": false,
"prettyprint_rejectInvalidCode": false,
"prettyprint_indentation": " ",
"log_format": "auto"
}

View File

@@ -0,0 +1,8 @@
"ixhl2rp"
{
"base" "helix"
"title" "HL2 RP"
"author" "willard.network"
"category" "rp"
"menusystem" "1"
}

View File

@@ -0,0 +1,131 @@
--[[
| 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
PLUGIN.name = "Ambient"
PLUGIN.description = "Ambient Sounds"
PLUGIN.author = "DrodA"
PLUGIN.version = 1.0
ix.option.Add("enableAmbient", ix.type.bool, true, {
category = "Background Music",
OnChanged = function(old_value, new_value)
if (!new_value) then
PLUGIN:StopSound()
return
end
PLUGIN:PlaySound(PLUGIN.ambients[math.random(1, #PLUGIN.ambients)])
end
})
ix.option.Add("ambientVolume", ix.type.number, 0.7, {
category = "Background Music",
min = 0.1, max = 1, decimals = 1,
OnChanged = function(old_value, new_value)
PLUGIN:SetVolume(new_value)
end
})
ix.lang.AddTable("english", {
optAmbientVolume = "Ambient music volume",
optdAmbientVolume = "How loud the volume of the ambient music should be.",
optEnableAmbient = "Enable ambient music",
optdEnableAmbient = "Whether or not the ambient music should be enabled."
})
if (SERVER) then return end
local timer_id = "ix_ambient_track"
PLUGIN.ambients = {
{path = "music/passive/passivemusic_01.ogg", length = 85},
{path = "music/passive/passivemusic_02.ogg", length = 130},
{path = "music/passive/passivemusic_03.ogg", length = 95},
{path = "music/passive/passivemusic_04.ogg", length = 125},
{path = "music/passive/passivemusic_05.ogg", length = 215},
{path = "music/passive/passivemusic_06.ogg", length = 210},
{path = "music/passive/passivemusic_07.ogg", length = 245},
{path = "music/passive/passivemusic_08.ogg", length = 268},
{path = "music/passive/passivemusic_09.ogg", length = 150},
{path = "music/passive/passivemusic_10.ogg", length = 260},
{path = "music/passive/passivemusic_11.ogg", length = 340},
{path = "music/passive/passivemusic_12.ogg", length = 260},
{path = "music/passive/passivemusic_13.ogg", length = 440},
{path = "music/passive/passivemusic_14.ogg", length = 130},
{path = "music/passive/passivemusic_15.ogg", length = 130},
{path = "music/passive/passivemusic_16.ogg", length = 250},
{path = "music/passive/passivemusic_17.ogg", length = 270},
{path = "music/passive/passivemusic_18.ogg", length = 320},
{path = "music/passive/passivemusic_19.ogg", length = 100},
{path = "music/passive/passivemusic_20.ogg", length = 210}
}
for _, v in pairs(PLUGIN.ambients) do
util.PrecacheSound(v.path)
end
function PLUGIN:StopSound()
if (timer.Exists(timer_id)) then
timer.Remove(timer_id)
end
if (self.ambient) then
self.ambient:Stop()
self.ambient = nil
end
end
function PLUGIN:SetVolume(volume)
if !self.ambient then return end
self.ambient:ChangeVolume(volume)
end
function PLUGIN:PlaySound(data)
if (!ix.option.Get("enableAmbient")) then
self:StopSound()
return
end
if (timer.Exists(timer_id)) then
self:StopSound()
end
self.ambient = CreateSound(LocalPlayer(), data.path)
self.ambient:Play()
self.ambient:ChangeVolume(ix.option.Get("ambientVolume"), 0)
timer.Create(timer_id, data.length, 1, function()
PLUGIN:StopSound()
timer.Simple(math.random(30, 60), function()
PLUGIN:PlaySound(PLUGIN.ambients[math.random(1, #PLUGIN.ambients)])
end)
end)
end
function PLUGIN:CharacterLoaded(character)
if (!timer.Exists(timer_id) and ix.option.Get("enableAmbient")) then
self:PlaySound(PLUGIN.ambients[math.random(1, #PLUGIN.ambients)])
end
end
function PLUGIN:PostPlaySound(sound, isGlobal)
if (isGlobal) then
self:StopSound()
timer.Simple(SoundDuration(sound) + math.random(30, 60), function()
PLUGIN:PlaySound(PLUGIN.ambients[math.random(1, #PLUGIN.ambients)])
end)
end
end

View File

@@ -0,0 +1,43 @@
--[[
| 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
PLUGIN.name = "Ammo Limit"
PLUGIN.author = "Gr4Ss"
PLUGIN.description = "Limit how much ammo can be loaded from ammo boxes."
ix.lang.AddTable("english", {
ammoLimitReached = "You have reached the equipped ammo limit!"
})
ix.config.Add("ammoBoxLimit", 4, "The maximum amount of ammo boxes someone is allowed to equip", nil, {
data = {min = 0, max = 10, decimals = 1},
category = "Other"
})
function PLUGIN:CanPlayerInteractItem(client, action, item, data)
if (isentity(item)) then
if (IsValid(item)) then
item = ix.item.instances[item.ixItemID]
else
return
end
elseif (isnumber(item)) then
item = ix.item.instances[item]
end
if (!item) then return end
if (action == "use" and item.ammo and item.ammoAmount and client:GetAmmoCount(item.ammo) >= item.ammoAmount * ix.config.Get("ammoBoxLimit")) then
client:NotifyLocalized("ammoLimitReached")
return false
end
end

View File

@@ -0,0 +1,55 @@
--[[
| 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 chatTypeWhitelist = {
["scoreboard"] = true,
["radio"] = true
}
function PLUGIN:GetHookCallPriority(hook)
if (hook == "GetCharacterName" or hook == "PopulateCharacterInfo") then
return 1500
end
end
function PLUGIN:GetCharacterName(client, chatType)
if (!IsValid(client)) then return end
if (LocalPlayer():IsCombine() or chatTypeWhitelist[chatType]) then return end
if (LocalPlayer():GetMoveType() == MOVETYPE_NOCLIP and !LocalPlayer():InVehicle()) then return end
if (ix.faction.Get(LocalPlayer():Team()).recogniseAll) then return end
if (client:Team() == FACTION_OTA) then
return client:GetCharacter():GetClass() == CLASS_EOW and "Elite Overwatch Soldier" or "Transhuman Arm Soldier"
elseif (client:GetNetVar("combineMaskEquipped")) then
return "Civil Protection Unit"
end
end
function PLUGIN:PopulateCharacterInfo(client, character, container)
if (LocalPlayer():IsCombine() or !client:GetNetVar("combineMaskEquipped") and client:Team() != FACTION_OTA) then return end
timer.Simple(0.1, function()
local description = container:GetRow("description")
if (IsValid(description)) then
description:Remove()
end
local geneticDesc = container:GetRow("geneticDesc")
if (IsValid(geneticDesc)) then
local height = character:GetHeight()
geneticDesc:SetText(height .. " TALL")
end
end)
end

View File

@@ -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/
--]]
PLUGIN.name = "Anonymous Combine"
PLUGIN.author = "Aspect™"
PLUGIN.description = "Makes the Combine more anonymous."
ix.util.Include("cl_hooks.lua")

View File

@@ -0,0 +1,54 @@
--[[
| 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/
--]]
surface.CreateFont( "arcade_font20", {
font = "Calibri",
size = 20,
weight = 100
})
surface.CreateFont( "arcade_font25", {
font = "Calibri",
size = 25,
weight = 100
})
surface.CreateFont( "arcade_font30", {
font = "Calibri",
size = 30,
weight = 100
})
surface.CreateFont( "arcade_font60", {
font = "Calibri",
size = 60,
weight = 100
})
surface.CreateFont( "arcade_font80", {
font = "Calibri",
size = 80,
weight = 100
})
surface.CreateFont( "arcade_font120", {
font = "Calibri",
size = 120,
weight = 100
})
net.Receive("arcade_adjust_timer", function()
local timers = {
"PacMan_CloseTime",
"PONG_CloseTime",
"Space_CloseTime"
}
for k, v in pairs(timers) do
if (timer.Exists(v)) then
timer.Adjust(v, (ix.config.Get("arcadeTime")) + timer.TimeLeft(v), 1)
end
end
end)

View File

@@ -0,0 +1,123 @@
--[[
| 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/
--]]
net.Receive("arcade_request_pacman", function()
local frame = vgui.Create("DFrame")
frame:SetSize(300, 125)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, h, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
draw.SimpleText("Play PACMAN for "..ix.config.Get("arcadePrice").." Credit?", "arcade_font30", w/2, h/4, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local accept = vgui.Create("DButton", frame)
accept:SetPos(5, 50)
accept:SetSize(140,70)
accept:SetText("")
accept.DoClick = function()
frame:Close()
net.Start("arcade_accept_pacman")
net.SendToServer()
end
accept.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,100,0))
draw.SimpleText("Insert Credit", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local deny = vgui.Create("DButton", frame)
deny:SetPos(155, 50)
deny:SetSize(140,70)
deny:SetText("")
deny.DoClick = function()
frame:Close()
end
deny.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(100,0,0))
draw.SimpleText("Nevermind", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
end)
net.Receive("arcade_open_pacman", function()
local frame = vgui.Create("DFrame")
frame:SetSize(ScrH()*0.95, ScrH()*0.95+25)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
if !ix.config.Get("arcadeDisableTokenSystem") then
timer.Create("PacMan_CloseTime", (ix.config.Get("arcadeTime")*ix.config.Get("arcadePrice")), 1, function() frame:Close() end)
end
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, 50, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
-- draw.RoundedBox(0, 0, 0, w, 65, Color(200,200,200))
if !ix.config.Get("arcadeDisableTokenSystem") then
local timeleft = string.FormattedTime(timer.TimeLeft("PacMan_CloseTime"))
local extranum
if timeleft.s < 10 then
extranum = 0
else
extranum = ""
end
draw.SimpleText("Time Left: "..timeleft.m..":"..extranum..timeleft.s, "arcade_font30", 5, 17, Color(255,255,255))
end
end
Schema:AllowMessage(frame)
local close = vgui.Create("DButton", frame)
close:SetPos(frame:GetWide()-50, 20)
close:SetSize(50,25)
close:SetText("Close")
close.DoClick = function()
frame:Close()
timer.Remove("PacMan_CloseTime")
end
close.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(200,0,0))
end
if !ix.config.Get("arcadeDisableTokenSystem") then
local moretime = vgui.Create("DButton", frame)
moretime:SetPos(frame:GetWide()-200, 20)
moretime:SetSize(150,25)
moretime:SetText("Insert another coin?")
moretime.DoClick = function()
net.Start("arcade_moretime_credit")
net.SendToServer()
end
moretime.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,155,155))
end
end
local webshell = vgui.Create("DPanel", frame)
webshell:SetSize(frame:GetWide(), frame:GetTall()-60)
webshell:SetPos(0,60)
local web = vgui.Create("HTML", webshell)
web:Dock( FILL )
web:OpenURL(ix.config.Get("arcadePacManWebsite"))
end)

View File

@@ -0,0 +1,122 @@
--[[
| 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/
--]]
net.Receive("arcade_request_pong", function()
local frame = vgui.Create("DFrame")
frame:SetSize(300, 125)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, h, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
draw.SimpleText("Play PONG for "..ix.config.Get("arcadePrice").." Credit?", "arcade_font30", w/2, h/4, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local accept = vgui.Create("DButton", frame)
accept:SetPos(5, 50)
accept:SetSize(140,70)
accept:SetText("")
accept.DoClick = function()
frame:Close()
net.Start("arcade_accept_pong")
net.SendToServer()
end
accept.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,100,0))
draw.SimpleText("Insert Credit", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local deny = vgui.Create("DButton", frame)
deny:SetPos(155, 50)
deny:SetSize(140,70)
deny:SetText("")
deny.DoClick = function()
frame:Close()
end
deny.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(100,0,0))
draw.SimpleText("Nevermind", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
end)
net.Receive("arcade_open_pong", function()
local frame = vgui.Create("DFrame")
frame:SetSize(ScrH()*0.95, ScrH()*0.7+25)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
if !ix.config.Get("arcadeDisableTokenSystem") then
timer.Create("PONG_CloseTime", (ix.config.Get("arcadeTime")*ix.config.Get("arcadePrice")), 1, function() frame:Close() end)
end
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, 50, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
-- draw.RoundedBox(0, 0, 0, w, 65, Color(200,200,200))
if !ix.config.Get("arcadeDisableTokenSystem") then
local timeleft = string.FormattedTime(timer.TimeLeft("PONG_CloseTime"))
local extranum
if timeleft.s < 10 then
extranum = 0
else
extranum = ""
end
draw.SimpleText("Time Left: "..timeleft.m..":"..extranum..timeleft.s, "arcade_font30", 5, 17, Color(255,255,255))
end
end
Schema:AllowMessage(frame)
local close = vgui.Create("DButton", frame)
close:SetPos(frame:GetWide()-50, 20)
close:SetSize(50,25)
close:SetText("Close")
close.DoClick = function()
frame:Close()
timer.Remove("PONG_CloseTime")
end
close.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(200,0,0))
end
if !ix.config.Get("arcadeDisableTokenSystem") then
local moretime = vgui.Create("DButton", frame)
moretime:SetPos(frame:GetWide()-200, 20)
moretime:SetSize(150,25)
moretime:SetText("Insert another coin?")
moretime.DoClick = function()
net.Start("arcade_moretime_credit")
net.SendToServer()
end
moretime.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,155,155))
end
end
local webshell = vgui.Create("DPanel", frame)
webshell:SetSize(frame:GetWide(), frame:GetTall()-60)
webshell:SetPos(0,60)
local web = vgui.Create("HTML", webshell)
web:Dock( FILL )
web:OpenURL(ix.config.Get("arcadePongWebsite"))
end)

View File

@@ -0,0 +1,122 @@
--[[
| 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/
--]]
net.Receive("arcade_request_space", function()
local frame = vgui.Create("DFrame")
frame:SetSize(300, 125)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, h, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
draw.SimpleText("Play Space Invaders for "..ix.config.Get("arcadePrice").." Credit?", "arcade_font25", w/2, h/4, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local accept = vgui.Create("DButton", frame)
accept:SetPos(5, 50)
accept:SetSize(140,70)
accept:SetText("")
accept.DoClick = function()
frame:Close()
net.Start("arcade_accept_space")
net.SendToServer()
end
accept.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,100,0))
draw.SimpleText("Insert Credit", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
local deny = vgui.Create("DButton", frame)
deny:SetPos(155, 50)
deny:SetSize(140,70)
deny:SetText("")
deny.DoClick = function()
frame:Close()
end
deny.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(100,0,0))
draw.SimpleText("Nevermind", "arcade_font30", w/2, h/2, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
end)
net.Receive("arcade_open_space", function()
local frame = vgui.Create("DFrame")
frame:SetSize(ScrH()*0.95, ScrH()*0.95+25)
frame:Center()
frame:MakePopup()
frame:SetDraggable(false)
frame:SetTitle("")
frame:ShowCloseButton(false)
if !ix.config.Get("arcadeDisableTokenSystem") then
timer.Create("Space_CloseTime", (ix.config.Get("arcadeTime")*ix.config.Get("arcadePrice")), 1, function() frame:Close() end)
end
frame.Paint = function(self, w, h)
Derma_DrawBackgroundBlur(frame, 4)
draw.RoundedBox(0, 0, 0, w, 50, Color(0,0,0,100))
draw.RoundedBox(0, 0, 0, w, 15, Color(25,25,25,255))
-- draw.RoundedBox(0, 0, 0, w, 65, Color(200,200,200))
if !ix.config.Get("arcadeDisableTokenSystem") then
local timeleft = string.FormattedTime(timer.TimeLeft("Space_CloseTime"))
local extranum
if timeleft.s < 10 then
extranum = 0
else
extranum = ""
end
draw.SimpleText("Time Left: "..timeleft.m..":"..extranum..timeleft.s, "arcade_font30", 5, 17, Color(255,255,255))
end
end
Schema:AllowMessage(frame)
local close = vgui.Create("DButton", frame)
close:SetPos(frame:GetWide()-50, 20)
close:SetSize(50,25)
close:SetText("Close")
close.DoClick = function()
frame:Close()
timer.Remove("Space_CloseTime")
end
close.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(200,0,0))
end
if !ix.config.Get("arcadeDisableTokenSystem") then
local moretime = vgui.Create("DButton", frame)
moretime:SetPos(frame:GetWide()-200, 20)
moretime:SetSize(150,25)
moretime:SetText("Insert another coin?")
moretime.DoClick = function()
net.Start("arcade_moretime_credit")
net.SendToServer()
end
moretime.Paint = function(self, w, h)
draw.RoundedBox(0,0,0,w,h,Color(0,155,155))
end
end
local webshell = vgui.Create("DPanel", frame)
webshell:SetSize(frame:GetWide(), frame:GetTall()-60)
webshell:SetPos(0,60)
local web = vgui.Create("HTML", webshell)
web:Dock( FILL )
web:OpenURL(ix.config.Get("arcadeSpaceWebsite"))
end)

View File

@@ -0,0 +1,102 @@
--[[
| 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/
--]]
include("shared.lua")
local DrawCircle
DrawCircle = function( x, y, radius, seg )
local cir = {}
table.insert( cir, { x = x, y = y, u = 0.5, v = 0.5 } )
for i = 0, seg do
local a = math.rad( ( i / seg ) * -360 )
table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )
end
local a = math.rad( 0 ) -- This is needed for non absolute segment counts
table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )
surface.DrawPoly( cir )
end
local mat = {}
mat[0] = Material("displays/pacman_open.png")
mat[1] = Material("displays/pacman_closed.png")
function ENT:Draw()
self:DrawModel()
if LocalPlayer():GetPos():Distance( self:GetPos() ) > 500 then return end
-- Basic setups
local Pos = self:GetPos()
local Ang = self:GetAngles()
Ang:RotateAroundAxis(Ang:Up(), -90)
Ang:RotateAroundAxis(Ang:Forward(), 76)
cam.Start3D2D(Pos + Ang:Up()*10, Ang, 0.05)
-- draw.RoundedBox(0, -120, -250, 170, 110, Color(70, 70, 70))
draw.SimpleText("PACMAN", "arcade_font120", -0, -450, HSVToColor(CurTime()*6*5%360,1,1), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
if ((CurTime()*4)%4) > 2 then
draw.SimpleText("Insert "..ix.config.Get("arcadePrice").." Credit", "arcade_font60", -0, -360, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
draw.SimpleText("to play!", "arcade_font60", -0, -320, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
surface.SetDrawColor( 255, 255, 255, 255 )
draw.NoTexture()
if ((CurTime()*80)%494) < 160 then
DrawCircle(100, -220, 10, 20)
end
if ((CurTime()*80)%494) < 260 then
DrawCircle(0, -220, 10, 20)
end
if ((CurTime()*80)%494) < 360 then
DrawCircle(-100, -220, 10, 20)
end
surface.SetDrawColor( Color(255,255,255) )
surface.SetMaterial( mat[math.Round(CurTime()*4)%2] )
surface.DrawTexturedRectUV( 216-((CurTime()*80)%494), -250, 64, 64, 0, 0, 1, 1 )
-- Off screen Right = 216
-- Off screen Left = -278
-- Speed = 216-((CurTime()*30)%494)
--print(CurTime()%1)
--print(216-(CurTime()%494))
cam.End3D2D()
Ang:RotateAroundAxis(Ang:Forward(), 14)
local tr = LocalPlayer():GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
local HeighlightColor = HSVToColor(CurTime()*6*5%360,1,1)
cam.Start3D2D(Pos + Ang:Up()*22.4, Ang, 0.05)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
draw.RoundedBox(0, -200, 40, 40, 100, HeighlightColor)
else
draw.RoundedBox(0, -200, 40, 40, 100, Color(0, 0, 0, 240))
end
draw.RoundedBox(0, -195, 45, 30, 90, Color(40, 40, 40, 255))
draw.SimpleText("|", "arcade_font60", -180, 85, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
cam.End3D2D()
end
/*
-22.174904 9.953964 -2.079835
-22.252708 8.003653 -6.987538
*/

View File

@@ -0,0 +1,53 @@
--[[
| 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
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize()
self:SetModel("models/freeman/arcade_pacman.mdl")
self:SetUseType(SIMPLE_USE)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
local phys = self:GetPhysicsObject()
phys:Wake()
end
function ENT:Use(ply)
local tr = ply:GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
if ix.config.Get("arcadeDisableTokenSystem") then
net.Start("arcade_open_pacman")
net.Send(ply)
else
net.Start("arcade_request_pacman")
net.Send(ply)
end
end
net.Receive("arcade_accept_pacman", function(_, client)
PLUGIN:PayArcade(client, function()
timer.Simple(1.5, function()
net.Start("arcade_open_pacman")
net.Send(client)
end)
end)
end)
end
function ENT:Think()
end

View File

@@ -0,0 +1,17 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_gmodentity"
ENT.PrintName = "Pacman"
ENT.Author = "Owain Owjo"
ENT.Category = "Arcade Machines"
ENT.Spawnable = true
ENT.AdminSpawnable = true

View File

@@ -0,0 +1,77 @@
--[[
| 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/
--]]
include("shared.lua")
local DrawCircle
DrawCircle = function( x, y, radius, seg )
local cir = {}
table.insert( cir, { x = x, y = y, u = 0.5, v = 0.5 } )
for i = 0, seg do
local a = math.rad( ( i / seg ) * -360 )
table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )
end
local a = math.rad( 0 ) -- This is needed for non absolute segment counts
table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } )
surface.DrawPoly( cir )
end
function ENT:Draw()
self:DrawModel()
if LocalPlayer():GetPos():Distance( self:GetPos() ) > 500 then return end
-- Basic setups
local Pos = self:GetPos()
local Ang = self:GetAngles()
Ang:RotateAroundAxis(Ang:Up(), -90)
Ang:RotateAroundAxis(Ang:Forward(), 76)
cam.Start3D2D(Pos + Ang:Up()*10, Ang, 0.05)
-- draw.RoundedBox(0, -120, -250, 170, 110, Color(70, 70, 70))
draw.SimpleText("PONG", "arcade_font80", -0, -450, HSVToColor(CurTime()*6*5%360,1,1), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
if ((CurTime()*4)%4) > 2 then
draw.SimpleText("Insert "..ix.config.Get("arcadePrice").." Credit", "arcade_font60", -0, -360, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
draw.SimpleText("to play!", "arcade_font60", -0, -320, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
surface.SetDrawColor( 255, 255, 255, 255 )
draw.NoTexture()
if ((CurTime()*40)%494) > 247 then
DrawCircle(216-(CurTime()*80)%494, -220, 10, 20)
else
DrawCircle(-216+(CurTime()*80)%494, -220, 10, 20)
end
draw.RoundedBox(0, -215, -260, 10, 70, Color(255,255,255))
draw.RoundedBox(0, 205, -260, 10, 70, Color(255,255,255))
cam.End3D2D()
Ang:RotateAroundAxis(Ang:Forward(), 14)
local tr = LocalPlayer():GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
local HeighlightColor = HSVToColor(CurTime()*6*5%360,1,1)
cam.Start3D2D(Pos + Ang:Up()*22.4, Ang, 0.05)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
draw.RoundedBox(0, -200, 40, 40, 100, HeighlightColor)
else
draw.RoundedBox(0, -200, 40, 40, 100, Color(0, 0, 0, 240))
end
draw.RoundedBox(0, -195, 45, 30, 90, Color(40, 40, 40, 255))
draw.SimpleText("|", "arcade_font60", -180, 85, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
cam.End3D2D()
end

View File

@@ -0,0 +1,53 @@
--[[
| 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
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize()
self:SetModel("models/freeman/arcade_pong.mdl")
self:SetUseType(SIMPLE_USE)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
local phys = self:GetPhysicsObject()
phys:Wake()
end
function ENT:Use(ply)
local tr = ply:GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
if ix.config.Get("arcadeDisableTokenSystem") then
net.Start("arcade_open_pong")
net.Send(ply)
else
net.Start("arcade_request_pong")
net.Send(ply)
end
end
net.Receive("arcade_accept_pong", function(_, client)
PLUGIN:PayArcade(client, function()
timer.Simple(1.5, function()
net.Start("arcade_open_pong")
net.Send(client)
end)
end)
end)
end
function ENT:Think()
end

View File

@@ -0,0 +1,17 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_gmodentity"
ENT.PrintName = "Pong"
ENT.Author = "Owain Owjo"
ENT.Category = "Arcade Machines"
ENT.Spawnable = true
ENT.AdminSpawnable = true

View File

@@ -0,0 +1,75 @@
--[[
| 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/
--]]
include("shared.lua")
local DrawShip
DrawShip = function()
draw.RoundedBox(0, 216-((CurTime()*80)%494)+0, -200, 60, 20, Color(55,255,55))
draw.RoundedBox(0, 216-((CurTime()*80)%494)+5, -205, 50, 5, Color(55,255,55))
draw.RoundedBox(0, 216-((CurTime()*80)%494)+20, -215, 20, 10, Color(55,255,55))
end
function ENT:Draw()
self:DrawModel()
if LocalPlayer():GetPos():Distance( self:GetPos() ) > 500 then return end
-- Basic setups
local Pos = self:GetPos()
local Ang = self:GetAngles()
Ang:RotateAroundAxis(Ang:Up(), -90)
Ang:RotateAroundAxis(Ang:Forward(), 76)
cam.Start3D2D(Pos + Ang:Up()*10, Ang, 0.05)
-- draw.RoundedBox(0, -120, -250, 170, 110, Color(70, 70, 70))
draw.SimpleText("Space Invaders", "arcade_font80", -0, -450, HSVToColor(CurTime()*6*5%360,1,1), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
if ((CurTime()*4)%4) > 2 then
draw.SimpleText("Insert "..ix.config.Get("arcadePrice").." Credit", "arcade_font60", -0, -360, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
draw.SimpleText("to play!", "arcade_font60", -0, -320, Color(55,210,55), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end
if ((CurTime()*80)%494) > 140 and ((CurTime()*80)%494) < 300 then
draw.RoundedBox(0, 100, -210-((CurTime()*80)%494)/10, 10, 10, Color(55,255,55))
end
if ((CurTime()*80)%494) > 240 and ((CurTime()*80)%494) < 420 then
draw.RoundedBox(0, 0, -200-((CurTime()*80)%494)/10, 10, 10, Color(55,255,55))
end
if ((CurTime()*80)%494) > 340 and ((CurTime()*80)%494) < 580 then
draw.RoundedBox(0, -100, -190-((CurTime()*80)%494)/10, 10, 10, Color(55,255,55))
end
DrawShip()
-- Movement = 216-((CurTime()*60)%494)
-- Off screen Right = 216
-- Off screen Left = -278
cam.End3D2D()
Ang:RotateAroundAxis(Ang:Forward(), 14)
local tr = LocalPlayer():GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
local HeighlightColor = HSVToColor(CurTime()*6*5%360,1,1)
cam.Start3D2D(Pos + Ang:Up()*22.4, Ang, 0.05)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
draw.RoundedBox(0, -200, 40, 40, 100, HeighlightColor)
else
draw.RoundedBox(0, -200, 40, 40, 100, Color(0, 0, 0, 240))
end
draw.RoundedBox(0, -195, 45, 30, 90, Color(40, 40, 40, 255))
draw.SimpleText("|", "arcade_font60", -180, 85, Color(255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
cam.End3D2D()
end

View File

@@ -0,0 +1,53 @@
--[[
| 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
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize()
self:SetModel("models/freeman/arcade_invaders.mdl")
self:SetUseType(SIMPLE_USE)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
local phys = self:GetPhysicsObject()
phys:Wake()
end
function ENT:Use(ply)
local tr = ply:GetEyeTrace().HitPos
local pos = self:WorldToLocal(tr)
if pos.x < -22.174904 and pos.x > -23.252708 and pos.y < 9.953964 and pos.y > 8.003653 and pos.z < -2.079835 and pos.z > -6.987538 then
if ix.config.Get("arcadeDisableTokenSystem") then
net.Start("arcade_open_space")
net.Send(ply)
else
net.Start("arcade_request_space")
net.Send(ply)
end
end
net.Receive("arcade_accept_space", function(_, client)
PLUGIN:PayArcade(client, function()
timer.Simple(1.5, function()
net.Start("arcade_open_space")
net.Send(client)
end)
end)
end)
end
function ENT:Think()
end

View File

@@ -0,0 +1,17 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_gmodentity"
ENT.PrintName = "Space Invaders"
ENT.Author = "Owain Owjo"
ENT.Category = "Arcade Machines"
ENT.Spawnable = true
ENT.AdminSpawnable = true

View File

@@ -0,0 +1,44 @@
--[[
| 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
PLUGIN.name = "Arcade Machines"
PLUGIN.author = "The Dream Team, AleXXX_007 (Integration to IX)"
PLUGIN.description = "Adds 3 arcade machines"
ix.config.Add("arcadeDisableTokenSystem", false, "Simply set this to true and all games are free", nil, {
category = "Arcade Machines"
})
ix.config.Add("arcadePacManWebsite", "http://0wain.xyz/pacman/", "The website source. I suggest leaving it as is if you don't really understand this", nil, {
category = "Arcade Machines"
})
ix.config.Add("arcadePongWebsite", "http://kanocomputing.github.io/Pong.js/examples/player-vs-bot.html", "The website source. I suggest leaving it as is if you don't really understand this", nil, {
category = "Arcade Machines"
})
ix.config.Add("arcadeSpaceWebsite", "http://funhtml5games.com/spaceinvaders/index.html", "The website source. I suggest leaving it as is if you don't really understand this", nil, {
category = "Arcade Machines"
})
ix.config.Add("arcadePrice", 1, "The price to play arcade game", nil, {
data = {min = 1, max = 1000},
category = "Arcade Machines"
})
ix.config.Add("arcadeTime", 300, "How long it is possible to play for 1 payment (SECONDS)", nil, {
data = {min = 60, max = 3600},
category = "Arcade Machines"
})
ix.util.Include("cl_plugin.lua")
ix.util.Include("sv_plugin.lua")

View File

@@ -0,0 +1,75 @@
--[[
| 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
util.AddNetworkString("arcade_msg")
util.AddNetworkString("arcade_moretime_credit")
util.AddNetworkString("arcade_adjust_timer")
util.AddNetworkString("arcade_request_pacman")
util.AddNetworkString("arcade_accept_pacman")
util.AddNetworkString("arcade_open_pacman")
util.AddNetworkString("arcade_request_space")
util.AddNetworkString("arcade_accept_space")
util.AddNetworkString("arcade_open_space")
util.AddNetworkString("arcade_request_pong")
util.AddNetworkString("arcade_accept_pong")
util.AddNetworkString("arcade_open_pong")
net.Receive("arcade_moretime_credit", function(_, client)
PLUGIN:PayArcade(client, function()
net.Start("arcade_adjust_timer")
net.Send(client)
end)
end)
function PLUGIN:PayArcade(client, callback)
local price = ix.config.Get("arcadePrice")
client:SelectCIDCard(function(cardItem)
if (cardItem) then
if (cardItem:GetData("active")) then
if (cardItem:HasCredits(price)) then
cardItem:TakeCredits(price, "Arcade machine", "Arcade Game cost")
ix.city.main:AddCredits(price)
client:Notify("You paid " .. price .. " credit(s) to the arcade machine.")
callback()
client:EmitSound("buttons/lever8.wav", 65)
else
client:Notify("The arcade machines emits a mocking error sound. \"Insufficient funds.\"")
end
else
ix.combineNotify:AddImportantNotification("WRN:// Inactive Identification Card #" .. cardItem:GetData("cid", 00000) .. " usage attempt detected", nil, client, client:GetPos())
client:Notify("The arcade machine emits a mocking error sound. \"Unable to read CID card data.\"")
end
cardItem:LoadOwnerGenericData(function(idCard, genericData)
local isBOL = genericData.bol
local isAC = genericData.anticitizen
if (isBOL or isAC) then
local text = isBOL and "BOL Suspect" or "Anti-Citizen"
ix.combineNotify:AddImportantNotification("WRN:// " .. text .. " Identification Card activity detected", nil, client, client:GetPos())
end
end)
else
client:Notify("The arcade machine emits a mocking error sound. \"Unable to read CID card data.\"")
end
end, function()
client:Notify("The arcade machine stands idle, the CID card reader light blinking. It is waiting for a CID card.")
end)
end

View File

@@ -0,0 +1,61 @@
--[[
| 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/
--]]
-- ArcCW.Sway
function PLUGIN:CreateMove(userCmd)
local client = LocalPlayer()
local weapon = client:GetActiveWeapon()
if !weapon.ArcCW then return end
local angles = userCmd:GetViewAngles()
if (weapon:GetState() == ArcCW.STATE_SIGHTS and !weapon.NoSway) then
local sway = weapon:GetBuff("Sway")
sway = sway != 0 and sway or self.swayDefault
-- sway = sway * math.Clamp(1 / (weapon:GetActiveSights().ScopeMagnification or 1), 0.1, 1)
if (sway == 0) then
return
end
local character = client:GetCharacter()
local skillLevel = character:GetSkillLevel("guns")
local minSkillLevel, maxSkillLevel = ix.weapons:GetWeaponSkillRequired(weapon:GetClass())
if (skillLevel < minSkillLevel) then
sway = sway + (sway * self.swayMaxIncrease) * (1 - skillLevel / minSkillLevel)
else
skillLevel = math.min(skillLevel, maxSkillLevel)
sway = sway - (sway * self.swayMaxDecrease) * ((skillLevel - minSkillLevel) / (maxSkillLevel - minSkillLevel))
end
if weapon:InBipod() then
sway = sway * (weapon.BipodDispersion * weapon:GetBuff_Mult("Mult_BipodDispersion"))
end
if sway > 0.05 then
angles.p = math.Clamp(angles.p + math.sin(CurTime() * 1.25) * FrameTime() * sway, -89, 89)
ArcCW.SwayDir = ArcCW.SwayDir + math.Rand(-360, 360) * FrameTime() / math.min(sway, 1)
angles.p = angles.p + math.sin(ArcCW.SwayDir) * FrameTime() * sway
angles.y = angles.y + math.cos(ArcCW.SwayDir) * FrameTime() * sway
-- angles.p = angles.p + math.Rand(-1, 1) * FrameTime() * sway
-- angles.y = angles.y + math.Rand(-1, 1) * FrameTime() * sway
userCmd:SetViewAngles(angles)
end
end
end
hook.Remove("CreateMove", "ArcCW_Sway")

View File

@@ -0,0 +1,248 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Fire Particle"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/Items/AR2_Grenade.mdl"
ENT.FireTime = 15
ENT.Armed = false
ENT.NextDamageTick = 0
ENT.Ticks = 0
ENT.ArcCW_Killable = false
AddCSLuaFile()
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
local maxs = Vector(1, 1, 1)
local mins = -maxs
self:PhysicsInitBox(mins, maxs)
self:DrawShadow( false )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
self:Detonate()
self.FireTime = math.Rand(14.5, 15.5)
timer.Simple(0.1, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
local fired = {
"sprites/flamelet1",
"sprites/flamelet2",
"sprites/flamelet3",
"sprites/flamelet4",
"sprites/flamelet5",
}
local function GetFireParticle()
return fired[math.random(#fired)]
end
function ENT:Think()
if !self.SpawnTime then self.SpawnTime = CurTime() end
if CLIENT then
local emitter = ParticleEmitter(self:GetPos())
if !self:IsValid() or self:WaterLevel() > 2 then return end
if !IsValid(emitter) then return end
if math.random(1, 100) < 10 then
local fire = emitter:Add(GetFireParticle(), self:GetPos() + (VectorRand() * 16))
fire:SetVelocity( VectorRand() * 500 * VectorRand() )
fire:SetGravity( Vector(0, 0, 100) )
fire:SetDieTime( math.Rand(0.5, 0.75) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 25 )
fire:SetEndSize( 100 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 150 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.75)
fire:SetNextThink( CurTime() + FrameTime() )
fire:SetThinkFunction( function(pa)
if !pa then return end
local col1 = Color(255, 255, 255)
local col2 = Color(0, 0, 0)
local col3 = col1
local d = pa:GetLifeTime() / pa:GetDieTime()
col3.r = Lerp(d, col1.r, col2.r)
col3.g = Lerp(d, col1.g, col2.g)
col3.b = Lerp(d, col1.b, col2.b)
pa:SetColor(col3.r, col3.g, col3.b)
pa:SetNextThink( CurTime() + FrameTime() )
end )
end
if math.random(1, 100) < 5 then
local fire = emitter:Add("particles/smokey", self:GetPos())
fire:SetVelocity( VectorRand() * 25 )
fire:SetGravity( Vector(0, 0, 1500) )
fire:SetDieTime( math.Rand(0.25, 1) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 10 )
fire:SetEndSize( 150 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 150 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.75)
fire:SetNextThink( CurTime() + FrameTime() )
fire:SetThinkFunction( function(pa)
if !pa then return end
local col1 = Color(255, 135, 0)
local col2 = Color(150, 150, 150)
local col3 = col1
local d = pa:GetLifeTime() / pa:GetDieTime()
col3.r = Lerp(d, col1.r, col2.r)
col3.g = Lerp(d, col1.g, col2.g)
col3.b = Lerp(d, col1.b, col2.b)
pa:SetColor(col3.r, col3.g, col3.b)
pa:SetNextThink( CurTime() + FrameTime() )
end )
end
emitter:Finish()
self.Ticks = self.Ticks + 1
else
if self:GetVelocity():LengthSqr() <= 32 then
self:SetMoveType( MOVETYPE_NONE )
end
if self.NextDamageTick > CurTime() then return end
if self:WaterLevel() > 2 then self:Remove() return end
self.NextDamageTick = CurTime() + 0.25
for i, ent in pairs(ents.FindInSphere(self:GetPos(), 100)) do
if (ent and IsValid(ent) and ((ent:IsPlayer() and ent:Alive()) or ent:IsNPC()) and ent:Health() > 0) then
local timerName = "arrcw_go_fire_tracker_"..ent:EntIndex()
if (!timer.Exists(timerName)) then
local dmg = DamageInfo()
dmg:SetDamageType(DMG_BURN)
dmg:SetDamage(20)
dmg:SetInflictor(self)
dmg:SetAttacker(self:GetOwner())
local burnStartTime = CurTime()
timer.Create(timerName, 0.25, 0, function()
if (!IsValid(ent)
or (ent.Alive and !ent:Alive())
or (ent:IsPlayer() and ent:Health() <= 2)
or (ent:IsNPC() and ent:Health() == 0)
or ent:WaterLevel() > 2) then
timer.Remove(timerName)
return
end
if (!ent:IsOnFire()) then
ent:Ignite(ix.config.Get("burnTime", 3) + 0.25)
end
if (self and IsValid(self) and self:GetPos():DistToSqr(ent:GetPos()) < 10000) then
burnStartTime = CurTime() -- still in the fire
dmg:SetDamage(10) -- in the fire, more damage
else
dmg:SetDamage(4) -- out of the fire, less damage
end
ent:TakeDamageInfo(dmg)
if ((burnStartTime + ix.config.Get("burnTime", 3)) <= CurTime()) then
timer.Remove(timerName)
return
end
end)
end
end
end
if self.SpawnTime + self.FireTime <= CurTime() then
self:Remove()
return
end
end
end
function ENT:OnRemove()
if !self.FireSound then return end
self.FireSound:Stop()
end
function ENT:Detonate()
if !self:IsValid() then return end
self.Armed = true
if self.Order and self.Order != 1 then return end
self.FireSound = CreateSound(self, "arccw_go/molotov/fire_loop_1.wav")
self.FireSound:Play()
self.FireSound:ChangePitch(80, self.FireTime)
timer.Simple(self.FireTime - 1, function()
if !IsValid(self) then return end
self.FireSound:ChangeVolume(0, 1)
end)
timer.Simple(self.FireTime, function()
if !IsValid(self) then return end
self:Remove()
end)
end
function ENT:Draw()
-- cam.Start3D() -- Start the 3D function so we can draw onto the screen.
-- render.SetMaterial( GetFireParticle() ) -- Tell render what material we want, in this case the flash from the gravgun
-- render.DrawSprite( self:GetPos(), math.random(200, 250), math.random(200, 250), Color(255, 255, 255) ) -- Draw the sprite in the middle of the map, at 16x16 in it's original colour with full alpha.
-- cam.End3D()
end

View File

@@ -0,0 +1,73 @@
--[[
| 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()
-- Ugly way to get around some engine limitations
ENT.PrintName = "Ricochet"
ENT.Spawnable = false
ENT.Type = "anim"
if CLIENT then
function ENT:Draw()
end
return
end
function ENT:Initialize()
self:SetModel("models/Combine_Helicopter/helicopter_bomb01.mdl")
self:DrawShadow(false)
self:SetNoDraw(true)
end
function ENT:Think()
if self.FireTime < CurTime() then
local ricsleft = self.RicsLeft or 40
self:FireBullets({
Attacker = self.Owner,
Damage = self.Damage,
Force = 0,
Distance = 5000,
Num = 1,
Tracer = 1,
TracerName = "ToolTracer",
Dir = self.Direction,
Spread = Vector(0.025,0.025,0),
Src = self:GetPos(),
--IgnoreEntity = self.Owner,
Callback = function(attacker, tr, dmginfo)
if IsValid(self.Inflictor) then dmginfo:SetInflictor(self.Inflictor) end
if ricsleft > 0 and self.Damage > 1 then
local dir = tr.Normal - 2 * (tr.Normal:Dot(tr.HitNormal)) * tr.HitNormal
for _, ent in pairs(ents.FindInCone(tr.HitPos, dir, 2000, math.cos(math.pi * 0.25))) do
if ((ent:IsPlayer() and ent ~= self.Owner) or ent:IsNPC() or ent:IsNextBot())
and util.QuickTrace(tr.HitPos, ent:WorldSpaceCenter() - tr.HitPos).Entity == ent then
dir = (ent:WorldSpaceCenter() - tr.HitPos):GetNormalized()
break
end
end
local r = ents.Create("arccw_ricochet_gauss")
r.FireTime = CurTime()
r.Owner = self.Owner
r.Damage = math.ceil(self.Damage * (tr.HitNonWorld and 0.9 or 0.99))
r.Direction = dir
r.Inflictor = self.Inflictor
r.RicsLeft = ricsleft - 1
r:SetPos(tr.HitPos)
r:Spawn()
end
end
})
self:EmitSound("weapons/fx/rics/ric" .. math.random(1,5) .. ".wav", 70, 100)
self:Remove()
end
end

View File

@@ -0,0 +1,146 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Flash Grenade"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/weapons/arccw_go/w_eq_flashbang_thrown.mdl"
ENT.FuseTime = 2.5
ENT.ArmTime = 0
ENT.ImpactFuse = false
ENT.Armed = true
AddCSLuaFile()
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:PhysicsInit( SOLID_VPHYSICS )
self:DrawShadow( true )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
if self.FuseTime <= 0 then
self:Detonate()
end
timer.Simple(0, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
function ENT:PhysicsCollide(data, physobj)
if SERVER then
if data.Speed > 75 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_hard" .. math.random(1,3) .. ".wav"))
elseif data.Speed > 25 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_soft" .. math.random(1,3) .. ".wav"))
end
if (CurTime() - self.SpawnTime >= self.ArmTime) and self.ImpactFuse then
self:Detonate()
end
end
end
function ENT:Think()
if SERVER and CurTime() - self.SpawnTime >= self.FuseTime then
self:Detonate()
end
end
function ENT:FlashBang()
if !self:IsValid() then return end
self:EmitSound("arccw_go/flashbang/flashbang_explode1.wav", 100, 100, 1, CHAN_ITEM)
self:EmitSound("arccw_go/flashbang/flashbang_explode1_distant.wav", 140, 100, 1, CHAN_WEAPON)
local attacker = self
if self:GetOwner():IsValid() then
attacker = self:GetOwner()
end
util.BlastDamage(self, attacker, self:GetPos(), 64, 10)
local effectdata = EffectData()
effectdata:SetOrigin( self:GetPos() )
util.Effect( "arccw_flashexplosion", effectdata)
local flashorigin = self:GetPos()
local flashpower = 1024
local targets = ents.FindInSphere(flashorigin, flashpower)
for _, k in pairs(targets) do
if k:IsPlayer() then
local dist = k:EyePos():Distance(flashorigin)
local dp = (k:EyePos() - flashorigin):Dot(k:EyeAngles():Forward())
local time = Lerp( dp, 2.5, 0.25 )
time = Lerp( dist / flashpower, time, 0 )
if k:VisibleVec( flashorigin ) then
k:ScreenFade( SCREENFADE.IN, Color( 255, 255, 255, 255 ), 2.5, time )
end
k:SetDSP( 37, false )
elseif k:IsNPC() then
k:SetNPCState(NPC_STATE_PLAYDEAD)
if timer.Exists( k:EntIndex() .. "_arccw_flashtimer" ) then
timer.Remove( k:EntIndex() .. "_arccw_flashtimer" )
end
timer.Create( k:EntIndex() .. "_arccw_flashtimer", 10, 1, function()
if !k:IsValid() then return end
k:SetNPCState(NPC_STATE_ALERT)
end)
end
end
end
function ENT:Detonate()
if !self:IsValid() or self:WaterLevel() > 2 then return end
if !self.Armed then return end
self.Armed = false
self:FlashBang()
self:Remove()
end
function ENT:DrawTranslucent()
self:Draw()
end
function ENT:Draw()
self:DrawModel()
end

View File

@@ -0,0 +1,105 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Frag Grenade"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/weapons/arccw_go/w_eq_fraggrenade_thrown.mdl"
ENT.FuseTime = 3.5
ENT.ArmTime = 0
ENT.ImpactFuse = false
AddCSLuaFile()
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:PhysicsInit( SOLID_VPHYSICS )
self:DrawShadow( true )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
if self.FuseTime <= 0 then
self:Detonate()
end
timer.Simple(0, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
function ENT:PhysicsCollide(data, physobj)
if SERVER then
if data.Speed > 75 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_hard" .. math.random(1,3) .. ".wav"))
elseif data.Speed > 25 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_soft" .. math.random(1,3) .. ".wav"))
end
if (CurTime() - self.SpawnTime >= self.ArmTime) and self.ImpactFuse then
self:Detonate()
end
end
end
function ENT:Think()
if SERVER and CurTime() - self.SpawnTime >= self.FuseTime then
self:Detonate()
end
end
function ENT:Detonate()
if SERVER then
if !self:IsValid() then return end
local effectdata = EffectData()
effectdata:SetOrigin( self:GetPos() )
if self:WaterLevel() >= 1 then
util.Effect("WaterSurfaceExplosion", effectdata)
self:EmitSound("weapons/underwater_explode3.wav", 120, 100, 1, CHAN_AUTO)
else
util.Effect("Explosion", effectdata)
self:EmitSound("arccw_go/hegrenade/hegrenade_detonate_01.wav", 125, 100, 1, CHAN_AUTO)
end
local attacker = self
if self.Owner:IsValid() then
attacker = self.Owner
end
util.BlastDamage(self, attacker, self:GetPos(), 400, 150)
self:Remove()
end
end
function ENT:DrawTranslucent()
self:Draw()
end
function ENT:Draw()
self:DrawModel()
end

View File

@@ -0,0 +1,310 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Incendiary Grenade"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/weapons/arccw_go/w_eq_incendiarygrenade_thrown.mdl"
ENT.FuseTime = 5
ENT.ArmTime = 0
ENT.FireTime = 15
ENT.ImpactFuse = false
ENT.Armed = false
ENT.NextDamageTick = 0
ENT.Ticks = 0
AddCSLuaFile()
function ENT:SetupDataTables()
self:NetworkVar( "Bool", 0, "Armed" )
if SERVER then
self:SetArmed(false)
end
end
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:PhysicsInit( SOLID_VPHYSICS )
self:DrawShadow( true )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
timer.Simple(0, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
function ENT:PhysicsCollide(data, physobj)
if SERVER then
if data.Speed > 75 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_hard" .. math.random(1,3) .. ".wav"))
elseif data.Speed > 25 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_soft" .. math.random(1,3) .. ".wav"))
end
if (CurTime() - self.SpawnTime >= self.ArmTime) and self.ImpactFuse then
self:Detonate()
end
end
end
local fired = {
"effects/fire_embers1",
"effects/fire_embers2",
"effects/fire_embers3",
}
local function GetFireParticle()
return fired[math.random(#fired)]
end
function ENT:Think()
if !self.SpawnTime then self.SpawnTime = CurTime() end
if SERVER and CurTime() - self.SpawnTime >= self.FuseTime and !self.Armed then
self:Detonate()
self:SetArmed(true)
end
if self:GetArmed() then
if SERVER then
if self.NextDamageTick > CurTime() then return end
local dmg = DamageInfo()
dmg:SetDamageType(DMG_BURN)
dmg:SetDamage(75)
dmg:SetInflictor(self)
dmg:SetAttacker(self.Owner)
util.BlastDamageInfo(dmg, self:GetPos(), 256)
self.NextDamageTick = CurTime() + 0.25
self.ArcCW_Killable = false
else
if !self.Light then
self.Light = DynamicLight(self:EntIndex())
if (self.Light) then
self.Light.Pos = self:GetPos()
self.Light.r = 255
self.Light.g = 135
self.Light.b = 0
self.Light.Brightness = 8
self.Light.Size = 256
self.Light.DieTime = CurTime() + self.FireTime
end
else
self.Light.Pos = self:GetPos()
end
local emitter = ParticleEmitter(self:GetPos())
if !self:IsValid() or self:WaterLevel() > 2 then return end
if !IsValid(emitter) then return end
if self.Ticks % 5 == 0 then
local fire = emitter:Add("particles/smokey", self:GetPos())
fire:SetVelocity( (VectorRand() * 25) + (self:GetAngles():Up() * 300) )
fire:SetGravity( Vector(0, 0, 1500) )
fire:SetDieTime( math.Rand(0.5, 1) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 10 )
fire:SetEndSize( 150 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 150 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.75)
fire:SetNextThink( CurTime() + FrameTime() )
fire:SetThinkFunction( function(pa)
if !pa then return end
local col1 = Color(255, 135, 0)
local col2 = Color(255, 255, 255)
local col3 = col1
local d = pa:GetLifeTime() / pa:GetDieTime()
col3.r = Lerp(d, col1.r, col2.r)
col3.g = Lerp(d, col1.g, col2.g)
col3.b = Lerp(d, col1.b, col2.b)
pa:SetColor(col3.r, col3.g, col3.b)
pa:SetNextThink( CurTime() + FrameTime() )
end )
end
if self.Ticks % 10 == 0 then
local fire = emitter:Add("effects/spark", self:GetPos())
fire:SetVelocity( VectorRand() * 750 )
fire:SetGravity( Vector(math.Rand(-5, 5), math.Rand(-5, 5), -2000) )
fire:SetDieTime( math.Rand(0.5, 1) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 5 )
fire:SetEndSize( 0 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 50 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.8)
fire.Ticks = 0
end
self.NextFlareTime = self.NextFlareTime or CurTime()
if self.NextFlareTime <= CurTime() then
self.NextFlareTime = CurTime() + math.Rand(0.1, 0.5)
local fire = emitter:Add("sprites/orangeflare1", self:GetPos())
fire:SetVelocity( VectorRand() * 750 )
fire:SetGravity( Vector(math.Rand(-5, 5), math.Rand(-5, 5), -2000) )
fire:SetDieTime( math.Rand(1, 2) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 50 )
fire:SetEndSize( 0 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 50 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.8)
fire.Ticks = 0
fire:SetNextThink( CurTime() + FrameTime() )
fire:SetThinkFunction( function(pa)
if !pa then return end
local aemitter = ParticleEmitter(pa:GetPos())
local d = pa:GetLifeTime() / pa:GetDieTime()
if !IsValid(aemitter) then return end
if pa.Ticks % 5 == 0 then
local afire = aemitter:Add("particles/smokey", pa:GetPos())
afire:SetVelocity( VectorRand() * 5 )
afire:SetGravity( Vector(0, 0, 1500) )
afire:SetDieTime( math.Rand(0.25, 0.5) * d )
afire:SetStartAlpha( 255 )
afire:SetEndAlpha( 0 )
afire:SetStartSize( 5 * d )
afire:SetEndSize( 20 )
afire:SetRoll( math.Rand(-180, 180) )
afire:SetRollDelta( math.Rand(-0.2,0.2) )
afire:SetColor( 255, 255, 255 )
afire:SetAirResistance( 150 )
afire:SetPos( pa:GetPos() )
afire:SetLighting( false )
afire:SetCollide(true)
afire:SetBounce(0.9)
afire:SetNextThink( CurTime() + FrameTime() )
afire:SetThinkFunction( function(apa)
if !apa then return end
local col1 = Color(255, 135, 0)
local col2 = Color(255, 255, 255)
local col3 = col1
local d = apa:GetLifeTime() / apa:GetDieTime()
col3.r = Lerp(d, col1.r, col2.r)
col3.g = Lerp(d, col1.g, col2.g)
col3.b = Lerp(d, col1.b, col2.b)
apa:SetColor(col3.r, col3.g, col3.b)
apa:SetNextThink( CurTime() + FrameTime() )
end )
end
aemitter:Finish()
pa.Ticks = pa.Ticks + 1
pa:SetNextThink( CurTime() + FrameTime() )
end )
end
emitter:Finish()
self.Ticks = self.Ticks + 1
end
end
end
function ENT:OnRemove()
if !self.FireSound then return end
self.FireSound:Stop()
end
function ENT:Detonate()
if !self:IsValid() then return end
self.Armed = true
self.FireSound = CreateSound(self, "weapons/flaregun/burn.wav")
self.FireSound:Play()
self.FireSound:ChangePitch(80, self.FireTime)
timer.Simple(self.FireTime - 1, function()
if !IsValid(self) then return end
self.FireSound:ChangeVolume(0, 1)
end)
timer.Simple(self.FireTime, function()
if !IsValid(self) then return end
self:Remove()
end)
end
function ENT:DrawTranslucent()
self:Draw()
end
function ENT:Draw()
if CLIENT then
self:DrawModel()
if !self:GetArmed() then return end
cam.Start3D() -- Start the 3D function so we can draw onto the screen.
render.SetMaterial( Material("sprites/orangeflare1") ) -- Tell render what material we want, in this case the flash from the gravgun
render.DrawSprite( self:GetPos(), math.random(400, 500), math.random(400, 500), Color(255, 255, 255) ) -- Draw the sprite in the middle of the map, at 16x16 in it's original colour with full alpha.
cam.End3D()
end
end

View File

@@ -0,0 +1,151 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Molotov Cocktail"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/weapons/arccw_go/w_eq_molotov_thrown.mdl"
ENT.FuseTime = 5
ENT.ArmTime = 0
ENT.FireTime = 15
ENT.ImpactFuse = true
ENT.Armed = false
ENT.NextDamageTick = 0
ENT.Ticks = 0
AddCSLuaFile()
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:PhysicsInit( SOLID_VPHYSICS )
self:DrawShadow( true )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
timer.Simple(0, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
function ENT:PhysicsCollide(data, physobj)
if SERVER then
self:Detonate()
end
end
function ENT:Think()
if !self.SpawnTime then self.SpawnTime = CurTime() end
if SERVER and CurTime() - self.SpawnTime >= self.FuseTime and !self.Armed then
self:Detonate()
end
if CLIENT then
local emitter = ParticleEmitter(self:GetPos())
if !self:IsValid() or self:WaterLevel() > 2 then return end
if !IsValid(emitter) then return end
if self.Ticks % 5 == 0 then
local fire = emitter:Add("particles/smokey", self:GetPos())
fire:SetVelocity( (VectorRand() * 25) + (self:GetAngles():Up() * 300) )
fire:SetGravity( Vector(0, 0, 1500) )
fire:SetDieTime( math.Rand(0.5, 1) )
fire:SetStartAlpha( 255 )
fire:SetEndAlpha( 0 )
fire:SetStartSize( 10 )
fire:SetEndSize( 50 )
fire:SetRoll( math.Rand(-180, 180) )
fire:SetRollDelta( math.Rand(-0.2,0.2) )
fire:SetColor( 255, 255, 255 )
fire:SetAirResistance( 150 )
fire:SetPos( self:GetPos() )
fire:SetLighting( false )
fire:SetCollide(true)
fire:SetBounce(0.75)
fire:SetNextThink( CurTime() + FrameTime() )
fire:SetThinkFunction( function(pa)
if !pa then return end
local col1 = Color(255, 135, 0)
local col2 = Color(255, 255, 255)
local col3 = col1
local d = pa:GetLifeTime() / pa:GetDieTime()
col3.r = Lerp(d, col1.r, col2.r)
col3.g = Lerp(d, col1.g, col2.g)
col3.b = Lerp(d, col1.b, col2.b)
pa:SetColor(col3.r, col3.g, col3.b)
pa:SetNextThink( CurTime() + FrameTime() )
end )
end
emitter:Finish()
self.Ticks = self.Ticks + 1
end
end
function ENT:Detonate()
if self.Exploded then return end
self.Exploded = true
self:EmitSound("arccw_go/molotov/molotov_detonate_1.wav", 75, 100, 1, CHAN_ITEM)
self:EmitSound("arccw_go/molotov/molotov_detonate_1_distant.wav", 100, 100, 1, CHAN_WEAPON)
for i = 1,10 do
local cloud = ents.Create( "arccw_go_fire" )
if !IsValid(cloud) then return end
local vel = Vector(math.Rand(-1, 1), math.Rand(-1, 1), math.Rand(-1, 1)) * 1500
cloud.Order = i
cloud:SetPos(self:GetPos() - (self:GetVelocity() * FrameTime()) + VectorRand())
cloud:SetAbsVelocity(vel + self:GetVelocity())
cloud:SetOwner(self:GetOwner())
cloud:Spawn()
end
self:Remove()
end
function ENT:DrawTranslucent()
self:Draw()
end
function ENT:Draw()
if CLIENT then
self:DrawModel()
cam.Start3D() -- Start the 3D function so we can draw onto the screen.
render.SetMaterial( Material("sprites/orangeflare1") ) -- Tell render what material we want, in this case the flash from the gravgun
render.DrawSprite( self:GetPos(), math.random(75, 100), math.random(75, 100), Color(255, 255, 255) ) -- Draw the sprite in the middle of the map, at 16x16 in it's original colour with full alpha.
cam.End3D()
end
end

View File

@@ -0,0 +1,89 @@
--[[
| 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/
--]]
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Smoke Grenade"
ENT.Author = ""
ENT.Information = ""
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Model = "models/weapons/arccw_go/w_eq_smokegrenade_thrown.mdl"
ENT.FuseTime = 3.5
ENT.ArmTime = 0
ENT.ImpactFuse = false
AddCSLuaFile()
function ENT:Initialize()
if SERVER then
self:SetModel( self.Model )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:PhysicsInit( SOLID_VPHYSICS )
self:DrawShadow( true )
local phys = self:GetPhysicsObject()
if phys:IsValid() then
phys:Wake()
phys:SetBuoyancyRatio(0)
end
self.SpawnTime = CurTime()
timer.Simple(0, function()
if !IsValid(self) then return end
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
end)
end
end
function ENT:PhysicsCollide(data, physobj)
if SERVER then
if data.Speed > 75 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_hard" .. math.random(1,3) .. ".wav"))
elseif data.Speed > 25 then
self:EmitSound(Sound("physics/metal/metal_grenade_impact_soft" .. math.random(1,3) .. ".wav"))
end
if (CurTime() - self.SpawnTime >= self.ArmTime) and self.ImpactFuse then
self:Detonate()
end
end
end
function ENT:Think()
if SERVER and CurTime() - self.SpawnTime >= self.FuseTime then
self:Detonate()
end
end
function ENT:Detonate()
if !self:IsValid() or self:WaterLevel() > 2 then return end
self:EmitSound("arccw_go/smokegrenade/smoke_emit.wav", 90, 100, 1, CHAN_AUTO)
local cloud = ents.Create( "arccw_smoke" )
if !IsValid(cloud) then return end
cloud:SetPos(self:GetPos())
cloud:Spawn()
self:Remove()
end
function ENT:DrawTranslucent()
self:Draw()
end
function ENT:Draw()
self:DrawModel()
end

View File

@@ -0,0 +1,232 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Pulse Rifle"
SWEP.TrueName = "Overwatch Standard Issue Pulse-Rifle"
-- Technically you can omit all trivia info, but that's not fun! Do a bit of research and write some stuff in!
SWEP.Trivia_Class = "Pulse Rifle"
SWEP.Trivia_Desc = "Overwatch Pulse Rifle given to most combine soldiers, developed from the V952.71.2 Prototype. Later models feature a integrated reflex sight, which display a black screen unless viewed through a Combine Soldier's visor. Removing the sight renders the weapon inoperable; perhaps a failsafe against rebels looting the weapon."
SWEP.Trivia_Manufacturer = "The Combine"
SWEP.Trivia_Calibre = "Medium Pulse Capsule"
SWEP.Trivia_Mechanism = "Dark Energy Thumper"
SWEP.Trivia_Country = "Universal Union - Earth Overwatch"
SWEP.Trivia_Year = "Occupation Period 3, 203x"
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "The Combine"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/oar2/v_o2rifle.mdl"
SWEP.WorldModel = "models/weapons/w_IRifle.mdl"
SWEP.ViewModelFOV = 60
SWEP.Damage = 20
SWEP.DamageMin = 20
SWEP.Range = 250 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 925 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 60
SWEP.ReducedClipSize = 20
SWEP.Recoil = 0.45
SWEP.RecoilSide = 0.55
SWEP.RecoilRise = 1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 550 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 5 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 95 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 225
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "oar" -- the magazine pool this gun draws from
SWEP.ShootVol = 115 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/oar2/ar2/fire1.wav"
SWEP.ShootSoundSilenced = "weapons/ar21/primary.wav"
SWEP.DistantShootSound = "weapons/oar/ar2.dist1.wav"
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellModel = nil
SWEP.ShellScale = 0
SWEP.ShellMaterial = nil
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.95
SWEP.SightedSpeedMult = 0.65
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-2, 2, 2.267),
Ang = Angle(-0.066, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 0, 2)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Base",
Offset = {
vpos = Vector(1.631, 4.261, 23.079), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, 0),
wpos = Vector(15.625, -0.1, -6.298),
wang = Angle(-8.829, -0.556, 90)
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Stock",
Slot = "stock",
DefaultAttName = "Standard Stock"
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "ociw master", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-1.158, -1.022, 2.867), -- offset that the attachment will be relative to the bone
vang = Angle(0, 90, 0),
wpos = Vector(6.099, 1.1, -3.301),
wang = Angle(171.817, 180-1.17, 0),
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle_ironsight",
Time = 0
},
["draw"] = {
Source = "IR_draw",
Time = 0.4,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"IR_fire", "fire2", "fire3", "fire4"},
Time = 0.25,
},
["fire_iron"] = {
Source = "IR_idle",
Time = 0.25,
},
["reload"] = {
Source = "IR_reload",
Time = 1.7,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/oar2/ar2/npc_ar2_reload.wav", t = 0}},
},
["reload_empty"] = {
Source = "reloadempty",
Time = 1.7,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/oar2/ar2/npc_ar2_reload.wav", t = 0}},
},
}

View File

@@ -0,0 +1,267 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Heavy Pulse Rifle"
SWEP.TrueName = "Overwatch Hammer Issue"
-- Technically you can omit all trivia info, but that's not fun! Do a bit of research and write some stuff in!
SWEP.Trivia_Class = "Heavy Assault Rifle"
SWEP.Trivia_Desc = "A heavier, more powerful version of the Combine Pulse-Rifle. Extremely inaccurate when moving. Ball launcher not included and is sold separately."
SWEP.Trivia_Manufacturer = "The Combine"
SWEP.Trivia_Calibre = "High-Mass Pulse Capsule"
SWEP.Trivia_Mechanism = "Dark Energy Thumper"
SWEP.Trivia_Country = "Universal Union - Earth Overwatch"
SWEP.Trivia_Year = "Occupation Period 3, 203x"
SWEP.Slot = 3
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "The Combine"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/irifle2/c_irifle2.mdl"
SWEP.WorldModel = "models/weapons/irifle2/w_irifle2.mdl"
SWEP.ViewModelFOV = 90
SWEP.Damage = 23
SWEP.DamageMin = 23
SWEP.Range = 250 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_AIRBOAT
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 900 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 24 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 48
SWEP.ReducedClipSize = 12
SWEP.Recoil = 0.7
SWEP.RecoilSide = 0.5
SWEP.RecoilRise = 0.02
SWEP.Delay = 60 / 350 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 8 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 150 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 600
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "ar21" -- the magazine pool this gun draws from
SWEP.ShootVol = 115 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/ar21/primary.wav"
SWEP.ShootSoundSilenced = "weapons/ar21/primary.wav"
SWEP.DistantShootSound = "weapons/ar21/primary.wav"
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellModel = nil
SWEP.ShellScale = 0
SWEP.ShellMaterial = nil
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(0, 0, 0),
Ang = Angle(0, 0, 0),
Magnification = 1.5,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = true
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-2, -6, 0)
SWEP.ActiveAng = Angle(2, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
["extendedmag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{ind = 1, bg = 1}},
},
["reducedmag"] = {
VMBodygroups = {{ind = 1, bg = 2}},
WMBodygroups = {{ind = 1, bg = 2}},
},
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Magic Zoom",
Slot = {"optic", "optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "ociw master", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.01, -4.495, 4.716), -- offset that the attachment will be relative to the bone
vang = Angle(0, 90, 0),
wpos = Vector(6.099, 0.699, -6.301),
wang = Angle(171.817, 180-1.17, 0),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 0),
},
{
PrintName = "Underbarrel",
Slot = {"ubgl"},
Bone = "ociw master",
Offset = {
vpos = Vector(-0.311, -9.306, -0.087),
vang = Angle(0, 90, 0),
wpos = Vector(17, 0.6, -4.676),
wang = Angle(-10, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "ociw master",
Offset = {
vpos = Vector(-1.05, -4.038, 3.24), -- offset that the attachment will be relative to the bone
vang = Angle(0, 90, 90),
wpos = Vector(15.625, -0.1, -6.298),
wang = Angle(-8.829, -0.556, 90)
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Stock",
Slot = "stock",
DefaultAttName = "Standard Stock"
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "ociw master", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-1.158, -1.022, 2.867), -- offset that the attachment will be relative to the bone
vang = Angle(0, 90, 0),
wpos = Vector(6.099, 1.1, -3.301),
wang = Angle(171.817, 180-1.17, 0),
},
},
}
SWEP.Animations = {
["idle"] = false,
["draw"] = {
Source = "IR_draw",
Time = 0.4,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"fire2", "fire3", "fire4"},
Time = 0.5,
},
["fire_iron"] = {
Source = "IR_fire",
Time = 0.1,
},
["reload"] = {
Source = "IR_reload",
Time = 2.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/ar21/ar2_reload_push.wav", t = 0}},
},
["reload_empty"] = {
Source = "IR_reload",
Time = 2.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/ar21/ar2_reload_push.wav", t = 0}},
},
}

View File

@@ -0,0 +1,584 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Oldie Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "M1911"
SWEP.TrueName = "M1911"
SWEP.Trivia_Class = "Pistol"
SWEP.Trivia_Desc = "Commonly known simply as Colt, the M1911 is one of the most famous handguns on the planet. It went through both World War's as a standard-issue US Army pistol, and despite that it was replaced in 1986, its further variations are still a sidearm of choice in different US Special Forces. M1911A1 is the further generation of a M1911 pistol, after World War I, the military's Model 1911 went through various changes including shorter trigger with frame cuts, improved sights, an arched mainspring housing and a redesigned grip safety."
SWEP.Trivia_Manufacturer = "Colt"
SWEP.Trivia_Calibre = ".45 ACP"
SWEP.Trivia_Mechanism = "Short Recoil"
SWEP.Trivia_Country = "Italy"
SWEP.Trivia_Year = 1911
SWEP.Slot = 1
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_1911/c_eft_1911/models/c_eft_1911.mdl"
SWEP.WorldModel = "models/weapons/w_pist_usp.mdl"
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 13
SWEP.DamageMin = 13 -- damage done at maximum range
SWEP.Range = 100 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 12 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 17
SWEP.PhysBulletMuzzleVelocity = 200
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.Recoil = 1.0
SWEP.RecoilSide = 0.3
SWEP.RecoilRise = 0.3
SWEP.RecoilPunch = -2
SWEP.Delay = 60 / 350 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_pistol"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 12 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "1911" -- the magazine pool this gun draws from
SWEP.ShootVol = 110 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.FirstShootSound = "weapons/m1911/m1911_fp.wav"
SWEP.ShootSound = "weapons/m1911/m1911_fp.wav"
SWEP.ShootSoundSilenced = "weapons/m1911/m1911_silenced_fp.wav"
SWEP.DistantShootSound = "weapons/m1911/m1911_dist.wav"
SWEP.MuzzleEffect = "muzzleflash_pistol"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.75
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.99
SWEP.SightedSpeedMult = 0.85
SWEP.SightTime = 0.2
SWEP.IronSightStruct = {
Pos = Vector(-3.725, 2.5, 2.025),
Ang = Angle(1, 0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "pistol"
SWEP.HoldtypeSights = "revolver"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL
SWEP.ActivePos = Vector(0, 2, 1.5)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, 0, -1)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelOffsetCrouch = Vector(0, 0, -2)
SWEP.CustomizePos = Vector(0, 2, 0.5)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 26
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[1] = "patron_001",
[2] = "patron_002"
}
SWEP.AttachmentElements = {
["default_barrel"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["optic_mount"] = {
VMBodygroups = {{ind = 10, bg = 1}},
},
["trigger_mount"] = {
VMBodygroups = {{ind = 9, bg = 1}},
},
["default_mag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["default_hammer"] = {
VMBodygroups = {{ind = 7, bg = 1}},
},
["default_trigger"] = {
VMBodygroups = {{ind = 8, bg = 1}},
},
["default_grip"] = {
VMBodygroups = {{ind = 4, bg = 1}},
},
["default_catch"] = {
VMBodygroups = {{ind = 5, bg = 1}},
},
}
SWEP.ExtraSightDist = 20
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-12.5, 4, -2.5),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = "eft_optic_small", -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0.075, 21, 1.5),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(-0.075, 20, 1.5),
vmax = Vector(-0.075, 22, 1.5),
wmin = Vector(5.5, 0.5, -5.8),
wmax = Vector(6.5, 0.5, -5.9),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 0),
InstalledEles = {"optic_mount"},
ExcludeFlags = {"triggermountattached"},
GivesFlags = {"opticmountattached"},
},
{
PrintName = "Barrel", -- print name
DefaultAttName = "Standard Barrel",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_barrel_icon.png"),
Slot = "eft_barrel_1911", -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0.0734, 20.82208, -0.1864),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"default_barrel"},
},
{
PrintName = "Muzzle Device", -- print name
DefaultAttName = "No Muzzle Device",
Slot = "eft_muzzle_1911", -- what kind of attachments can fit here, can be string or table
Bone = "mod_muzzle", -- relevant bone any attachments will be mostly referring to
RequireFlags = {"barrelthread"},
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
},
{
PrintName = "Catch", -- print name
DefaultAttName = "Standard Catch",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_catch_icon.png"),
Slot = "eft_catch_1911", -- what kind of attachments can fit here, can be string or table
Bone = "mod_catch", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"default_catch"},
},
{
PrintName = "Hammer", -- print name
DefaultAttName = "Standard Hammer",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_hammer_icon.png"),
Slot = "eft_hammer_1911", -- what kind of attachments can fit here, can be string or table
Bone = "mod_hammer", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"default_hammer"},
},
{
PrintName = "Trigger", -- print name
DefaultAttName = "Standard Trigger",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_trigger_icon.png"),
Slot = "eft_trigger_1911", -- what kind of attachments can fit here, can be string or table
Bone = "mod_trigger", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"default_trigger"},
},
{
PrintName = "Grip", -- print name
DefaultAttName = "Standard Grip",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_grip_icon.png"),
Slot = "eft_grip_1911", -- what kind of attachments can fit here, can be string or table
Bone = "mod_pistol_grip", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"default_grip"},
},
{
PrintName = "Tactical", -- print name
DefaultAttName = "No Tactical",
Slot = "eft_tactical", -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 23.3, -0.5),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"trigger_mount"},
ExcludeFlags = {"opticmountattached"},
GivesFlags = {"triggermountattached"},
},
{
PrintName = "Magazine",
DefaultAttName = "7-round Mag",
DefaultAttIcon = Material("vgui/entities/eft_attachments/1911_mag_icon.png"),
InstalledEles = {"default_mag"},
Bone = "mod_magazine",
Offset = {
vpos = Vector(0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(-5, 0, 0),
},
Slot = "eft1911_mag"
},
{
PrintName = "Caliber",
DefaultAttName = ".45 ACP FMJ",
DefaultAttIcon = Material("vgui/entities/eft_attachments/9x19_Icon.png"),
Slot = "ammo_eft_45"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_in.wav",
t = 0
}
},
},
["draw_empty"] = {
Source = "draw_empty",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_in.wav",
t = 0
}
},
},
["holster"] = {
Source = "holster",
LHIK = true,
Time = 0.5,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_out.wav",
t = 0
}
},
},
["holster_empty"] = {
Source = "holster_Empty",
LHIK = true,
Time = 0.5,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_out.wav",
t = 0
}
},
},
["ready"] = {
Source = "draw_first",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "weapons/eft_shared/grach_catch_slider.wav",
t = 0.65
},
{
s = "weapons/eft_shared/grach_catch_slider.wav",
t = 0.8
}
},
},
["fire"] = {
Source = "shoot",
Time = 0.2,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shoot",
Time = 0.2,
ShellEjectAt = 0,
},
["fire_empty"] = {
Source = "shoot_dry",
Time = 0.1,
ShellEjectAt = 0,
},
["fire_iron_empty"] = {
Source = "shoot_dry",
Time = 0.1,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/eft_shared/grach_mag_button.wav",
t = 0.35
},
{
s = "weapons/eft_shared/grach_mag_out.wav",
t = 0.37
},
{
s = "weapons/eft_shared/grach_mag_pullout.wav",
t = 0.4
},
{
s = "weapons/eft_shared/grach_mag_pullin.wav",
t = 1.9
},
{
s = "weapons/eft_shared/grach_mag_in.wav",
t = 2
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LastClip1OutTime = 1, -- when should the belt visually replenish on a belt fed
Time = 3.7,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/eft_shared/grach_mag_button.wav",
t = 0.35
},
{
s = "weapons/eft_shared/grach_mag_out.wav",
t = 0.37
},
{
s = "weapons/eft_shared/grach_mag_pullout.wav",
t = 0.4
},
{
s = "weapons/eft_shared/grach_mag_pullin.wav",
t = 2.1
},
{
s = "weapons/eft_shared/grach_mag_in.wav",
t = 2.2
},
{
s = "weapons/eft_shared/grach_catch_button.wav",
t = 2.9
},
{
s = "weapons/eft_shared/grach_catch_slider.wav",
t = 3
}
},
},
["reload_long"] = {
Source = "reload_extended",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
Time = 3,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/eft_shared/grach_mag_button.wav",
t = 0.35
},
{
s = "weapons/eft_shared/grach_mag_out.wav",
t = 0.37
},
{
s = "weapons/eft_shared/grach_mag_pullout.wav",
t = 0.4
},
{
s = "weapons/eft_shared/grach_mag_pullin.wav",
t = 2
},
{
s = "weapons/eft_shared/grach_mag_in.wav",
t = 2.1
}
},
},
["reload_long_empty"] = {
Source = "reload_empty_extended",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
Time = 3.7,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/eft_shared/grach_mag_button.wav",
t = 0.35
},
{
s = "weapons/eft_shared/grach_mag_out.wav",
t = 0.37
},
{
s = "weapons/eft_shared/grach_mag_pullout.wav",
t = 0.4
},
{
s = "weapons/eft_shared/grach_mag_pullin.wav",
t = 2.1
},
{
s = "weapons/eft_shared/grach_mag_in.wav",
t = 2.2
},
{
s = "weapons/eft_shared/grach_catch_button.wav",
t = 2.9
},
{
s = "weapons/eft_shared/grach_catch_slider.wav",
t = 3
}
},
},
["enter_inspect"] = {
Source = "customise_begin",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["enter_inspect_empty"] = {
Source = "customise_begin_empty",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "customise_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["idle_inspect_empty"] = {
Source = "customise_idle_empty",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "customise_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
["exit_inspect_empty"] = {
Source = "customise_end_empty",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,634 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Oldie Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "AKS-74u"
SWEP.Trivia_Class = "Carbine"
SWEP.Trivia_Desc = "Reduced version of AKS-74 assault rifle, developed in the early 80s for combat vehicle crews and airborne troops, also became very popular with law enforcement and special forces for its compact size."
SWEP.Trivia_Manufacturer = "Kalashnikov"
SWEP.Trivia_Calibre = "5.45x39mm"
SWEP.Trivia_Mechanism = "blowback-operated"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 1979
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_aks74u/eft_aks74u/models/c_eft_aks74u.mdl"
SWEP.WorldModel = "models/weapons/w_smg1.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 13
SWEP.DamageMin = 13 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 735 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 735
SWEP.Recoil = 0.6
SWEP.RecoilSide = 0.24
SWEP.RecoilRise = 0.35
SWEP.RecoilPunch = 2
SWEP.Delay = 60 / 650 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0,
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 14 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 300 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "ak74" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/arccw_eft_aks74u/ak74_raw_close.wav"
SWEP.ShootSoundSilenced = "weapons/arccw_eft_aks74u/ak74_silenced_close.wav"
SWEP.DistantShootSound = "weapons/arccw_eft_aks74u/ak74_raw_far1.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_mp5"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[0] = "patron_in_weapon",
[1] = "patron_001",
[2] = "patron_002",
[3] = "patron_003"
}
SWEP.SpeedMult = 0.9
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.25
SWEP.IronSightStruct = {
Pos = Vector(-3.65, 3, 1.39),
Ang = Angle(0, 0.0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 4, 1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-1, 3, 0.5)
SWEP.CrouchAng = Angle(0, 0, -5)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(0, 4, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
["handguard"] = {
VMBodygroups = {{ind = 5, bg = 1}},
},
["pgrip"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["magazine"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["Stock_Fold"] = {
VMBodygroups = {{ind = 4, bg = 1}},
},
["Stock_Gone"] = {
VMBodygroups = {{ind = 4, bg = 2}},
},
["Mount_scopes"] = {
VMBodygroups = {{ind = 6, bg = 1}},
},
["No_Mount"] = {
VMBodygroups = {{ind = 6, bg = 0}},
},
["Remove_Receiver"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["Rear_Mount"] = {
--VMBodygroups = {{ind = 3, bg = 1}},
AttPosMods = {
[1] = {
vpos = Vector(0, -5, 0.2),
vang = Angle(90, -90, -90),
}
},
},
["b11_handguard"] = {
--VMBodygroups = {{ind = 3, bg = 1}},
AttPosMods = {
[5] = {
vpos = Vector(0, 2.5, -1.3),
vang = Angle(0, -90, 0),
},
[6] = {
vpos = Vector(1, 3.65, -0.35),
vang = Angle(90, -90, 0),
},
[7] = {
vpos = Vector(-1, 3.65, -0.35),
vang = Angle(-90, -90, 0),
}
},
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-4.3, 4.2, -8),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/ironsight.png"),
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "mod_topmount", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0.01, 0, 0.7),
vang = Angle(90, -90, -90),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
ExcludeFlags = {"NoReceiver"},
InstalledEles = {"Mount_scopes"},
},
{
PrintName = "Dust Cover", -- print name
DefaultAttName = "6P26 Dust Cover",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/receiver_std.png"),
Slot = "eft_aks74u_receiever",
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0.0, 0, 0),
vang = Angle(0, 0, 0),
},
InstalledEles = {"Remove_Receiver"},
},
{
PrintName = "Handguard",
DefaultAttName = "6P26 Handguard",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/handguard_std.png"),
InstalledEles = {"handguard"},
Slot = "eftaks74u_handguard",
Bone = "mod_handguard", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Muzzle Device",
DefaultAttName = "No Muzzle",
--DefaultAttIcon = Material("vgui/entities/eft_aks74u/handguard_std.png"),
Slot = "eft_muzzle_ak545",
Bone = "mod_handguard", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 5.8, -0.5),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Underbarrel",
Slot = "eft_foregrip",
Bone = "mod_handguard",
DefaultAttName = "No Underbarrel",
Offset = {
vpos = Vector(0, 2.5, -1.7),
vang = Angle(0, -90, 0)
},
RequireFlags = {"lowerrail"},
},
{
PrintName = "Gadget - Left",
Slot = "eft_tactical",
Bone = "mod_handguard",
DefaultAttName = "No Gadget",
Offset = {
vpos = Vector(1.1, 3.5, -0.5),
vang = Angle(90, -90, 0)
},
RequireFlags = {"leftrail"},
},
{
PrintName = "Gadget - Right",
Slot = "eft_tactical",
Bone = "mod_handguard",
DefaultAttName = "No Gadget",
Offset = {
vpos = Vector(-1.1, 3.5, -0.5),
vang = Angle(-90, -90, 0)
},
RequireFlags = {"rightrail"},
},
{
PrintName = "Magazine",
Slot = "eft_mag_ak545",
Bone = "mod_magazine",
DefaultAttName = "6L20 30-round magazine",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/mag_std.png"),
Offset = {
vpos = Vector(0, 0, -0),
vang = Angle(0, -90, 0)
},
InstalledEles = {"magazine"},
},
{
PrintName = "Pistol Grip",
Slot = {"eft_ak_pgrip"},
Bone = "mod_pistol_grip",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/pgrip_std.png"),
DefaultAttName = "6P4 Texolite Grip",
--DefaultAttIcon = Material("vgui/entities/eft_aks74u/stock_unfolded.png"),
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(0, -90, 0)
},
InstalledEles = {"pgrip"},
},
{
PrintName = "Stock",
Slot = {"eft_aks74u_stock", "eftaks_stock"},
Bone = "mod_stock",
DefaultAttName = "Unfolded Stock",
DefaultAttIcon = Material("vgui/entities/eft_aks74u/stock_unfolded.png"),
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(0, 0, 0)
},
InstalledEles = {"Stock_Gone"},
},
{
PrintName = "Caliber",
Slot = {"eft_ammo_545x39"},
Bone = "mod_stock",
DefaultAttName = "5.45x39mm BP ammo",
DefaultAttIcon = Material("vgui/entities/eft_attachments/762x51_icon.png"),
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(0, 0, 0)
},
}
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
LHIK = false,
LHIKIn = 0.25,
LHIKOut = 0.25,
},
["holster"] = {
Source = "holster",
LHIK = false,
LHIKIn = 0.5,
LHIKOut = 0,
},
["ready"] = {
Source = {"ready_1", "ready_2", "ready_3"},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.8,
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_slider_up.wav",
t = 0.6
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_down.wav",
t = 0.9
}
},
},
["fire"] = {
Source = "fire",
Time = 0.1,
FrameRate = 300,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "fire",
Time = 0.1,
FrameRate = 300,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 1.7, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.2, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_up.wav",
t = 4
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_down.wav",
t = 4.4
}
},
},
["reload_saiga"] = {
Source = "reload_saiga",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
}
},
},
["reload_saiga_empty"] = {
Source = "reload_saiga_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 1.7, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.2, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_up.wav",
t = 4
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_down.wav",
t = 4.4
}
},
},
["reload_6l31"] = {
Source = "reload_6l31",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
}
},
},
["reload_6l31_empty"] = {
Source = "reload_6l31_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 1.7, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.2, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_up.wav",
t = 4
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_down.wav",
t = 4.4
}
},
},
["reload_drum"] = {
Source = "reload_drum",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
}
},
},
["reload_drum_empty"] = {
Source = "reload_drum_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 1.7, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.2, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft_aks74u/ak74_magrelease_button.wav",
t = 0.55
},
{
s = "weapons/arccw_eft_aks74u/ak74_magout_plastic.wav",
t = 0.65
},
{
s = "weapons/arccw_eft_aks74u/ak74_magin_plastic.wav",
t = 2.6
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_up.wav",
t = 4
},
{
s = "weapons/arccw_eft_aks74u/ak74_slider_down.wav",
t = 4.4
}
},
},
["enter_inspect"] = {
Source = "customize_begin",
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "customize_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "customize_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,444 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "MP-153"
SWEP.TrueName = "MP-153"
SWEP.Trivia_Class = "Semi-automatic shotgun"
SWEP.Trivia_Desc = "Smoothbore multi-shot. MP-153 shotgun, produced by Izhmekh. Reliable and practical hunting and self-defence weapon."
SWEP.Trivia_Manufacturer = "Izhmekh"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Gas-operated Rotating bolt"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 2000
SWEP.Slot = 4
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
SWEP.WorldModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "000000000000"
SWEP.Num = 8 -- number of shots per trigger pull.
SWEP.Damage = 9
SWEP.DamageMin = 9 -- damage done at maximum range
SWEP.RangeMin = 20 -- in METRES
SWEP.Range = 70 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 4 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 8
SWEP.PhysBulletMuzzleVelocity = 415
SWEP.TriggerDelay = false
SWEP.ReloadInSights = true
SWEP.ReloadInSights_FOVMult = 1
SWEP.Recoil = 2.5
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.3
SWEP.RecoilPunch = 2.5
SWEP.VisualRecoilMult = 10
SWEP.RecoilPunchBackMax = 18
SWEP.RecoilPunchBackMaxSights = 19 -- may clip with scopes
SWEP.Delay = 60 / 120 -- 60 / RPM.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 60 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 300
SWEP.Primary.Ammo = "buckshot" -- what ammo type the gun uses
SWEP.MagID = "MP153" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = {"weapons/darsu_eft/mp153/mr153_fire_close1.wav", "weapons/darsu_eft/mp153/mr153_fire_close2.wav"}
SWEP.ShootSoundSilenced = "weapons/darsu_eft/mp153/mr133_fire_silenced_close.wav"
SWEP.DistantShootSound = {"weapons/darsu_eft/mp153/mr153_fire_distant1.wav", "weapons/darsu_eft/mp153/mr153_fire_distant2.wav"}
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellModel = "models/weapons/arccw/eft_shells/patron_12x70_shell.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.5
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.SpeedMult = 0.95
SWEP.SightedSpeedMult = 0.8
SWEP.SightTime = 0.5*0.93
SWEP.IronSightStruct = {
Pos = Vector(-4.281, -2, 0.681),
Ang = Angle(0.25, 0.004, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.Jamming = false
SWEP.HeatCapacity = 9
SWEP.HeatDissipation = 0.3
SWEP.HeatLockout = true -- overheating means you cannot fire until heat has been fully depleted
SWEP.HeatFix = true -- when the "fix" animation is played, all heat is restored.
SWEP.Malfunction = false
SWEP.MalfunctionJam = false -- After a malfunction happens, the gun will dryfire until reload is pressed. If unset, instead plays animation right after.
SWEP.MalfunctionTakeRound = false -- When malfunctioning, a bullet is consumed.
SWEP.MalfunctionWait = 0 -- The amount of time to wait before playing malfunction animation (or can reload)
SWEP.MalfunctionMean = 48 -- The mean number of shots between malfunctions, will be autocalculated if nil
SWEP.MalfunctionVariance = 0.2 -- The fraction of mean for variance. e.g. 0.2 means 20% variance
SWEP.MalfunctionSound = "weapons/arccw/malfunction.wav"
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL
SWEP.ActivePos = Vector(0.2, -3.5, 0.7)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-1.2, -4.5, 0.2)
SWEP.CrouchAng = Angle(0, 0, -6)
SWEP.HolsterPos = Vector(0.2, -3.5, 0.7)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelOffsetCrouch = Vector(0, 0, -2)
SWEP.CustomizePos = Vector(0.2, -3.5, 0.7)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 18
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[1] = {"shellport", "patron_in_weapon"},
}
SWEP.AttachmentElements = {
["sightmount"] = {VMBodygroups = {{ind = 4, bg = 1}},},
["bottommount"] = {VMBodygroups = {{ind = 5, bg = 1}},},
["b660"] = {
VMBodygroups = {{ind = 1, bg = 1}},
AttPosMods = {
[3] = {
vpos = Vector(0, 46, 1.8),
vang = Angle(0, -90, 0),
},
},
},
["b710"] = {
VMBodygroups = {{ind = 1, bg = 2}},
AttPosMods = {
[3] = {
vpos = Vector(0, 47.8, 1.8),
vang = Angle(0, -90, 0),
},
},
},
["b750"] = {
VMBodygroups = {{ind = 1, bg = 3}},
AttPosMods = {
[3] = {
vpos = Vector(0, 49.4, 1.8),
vang = Angle(0, -90, 0),
},
},
},
["m5"] = {VMBodygroups = {{ind = 3, bg = 1}},},
["m6"] = {VMBodygroups = {{ind = 3, bg = 2}},},
["m7"] = {VMBodygroups = {{ind = 3, bg = 3}},},
["m8"] = {VMBodygroups = {{ind = 3, bg = 4}},},
["swooden"] = {VMBodygroups = {{ind = 6, bg = 1}},},
["spistol"] = {VMBodygroups = {{ind = 6, bg = 2}},},
["12rip"] = {VMBodygroups = {{ind = 10, bg = 1}},},
["12fl"] = {VMBodygroups = {{ind = 10, bg = 2}},},
["12dss"] = {VMBodygroups = {{ind = 10, bg = 3}},},
["12bmg"] = {VMBodygroups = {{ind = 10, bg = 4}},},
["12ap20"] = {VMBodygroups = {{ind = 10, bg = 5}},},
["12ftx"] = {VMBodygroups = {{ind = 10, bg = 6}},},
["12g40"] = {VMBodygroups = {{ind = 10, bg = 7}},},
["12cop"] = {VMBodygroups = {{ind = 10, bg = 8}},},
["12p3"] = {VMBodygroups = {{ind = 10, bg = 9}},},
["12p6u"] = {VMBodygroups = {{ind = 10, bg = 10}},},
["12sfp"] = {VMBodygroups = {{ind = 10, bg = 11}},},
["12lead"] = {VMBodygroups = {{ind = 10, bg = 10}},},
}
SWEP.ExtraSightDist = 6
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-10, 5.5, -2),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.ShotgunReload = true
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "None",
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_sights_standard.png"),
Slot = {"eft_optic_small", "eft_optic_medium", "eft_optic_large"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
CorrectiveAng = Angle(0, 180, 0),
InstalledEles = {"sightmount"},
Offset = {
vpos = Vector(0, 17, 2.7),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Barrel", -- print name
DefaultAttName = "610mm barrel",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp153_b610.png"),
Slot = "eft_mp153_barrel", -- what kind of attachments can fit here, can be string or table
},
{
PrintName = "Muzzle Device",
Slot = "eft_muzzle_12g",
Bone = "weapon",
DefaultAttName = "None",
-- DefaultAttIcon = Material("vgui/entities/eft_attachments/att_scarl_muzzle_std.png"),
Offset = {
vpos = Vector(0, 44, 1.8),
vang = Angle(90, -90, -90),
},
},
{
PrintName = "Magazine", -- print name
DefaultAttName = "4-shell",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp153_m4.png"),
Slot = "eft_mp153_mag", -- what kind of attachments can fit here, can be string or table
},
{
PrintName = "Stock", -- print name
DefaultAttName = "Plastic stock",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp153_stock_std.png"),
Slot = "eft_mp153_stock", -- what kind of attachments can fit here, can be string or table
},
{
PrintName = "Left Tactical", -- print name
DefaultAttName = "No Tactical",
Slot = {"eft_tactical"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"bottommount"},
Offset = {
vpos = Vector(1.3, 33.5, 1.35),
vang = Angle(0, -90, 120),
},
},
{
PrintName = "Bottom Tactical", -- print name
DefaultAttName = "No Tactical",
Slot = {"eft_tactical"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"bottommount"},
Offset = {
vpos = Vector(0, 33.5, -.9),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Right Tactical", -- print name
DefaultAttName = "No Tactical",
Slot = {"eft_tactical"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"bottommount"},
Offset = {
vpos = Vector(-1.3, 33.5, 1.35),
vang = Angle(0, -90, 240),
},
},
{
PrintName = "Ammo",
DefaultAttName = "12/70 7mm buckshot",
DefaultAttIcon = Material("vgui/entities/eft_attachments/ammo/12g_def.png"),
Slot = "ammo_eft_12"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
Time = 1.2,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
},
},
["holster"] = {
Source = "holster",
Time = 1.2,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_holster.wav", t = 0},
},
},
["ready"] = {
Source = {"ready0", "ready1", "ready2"},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.4},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.8},
},
},
["fire"] = {
Source = "fire",
Time = 0.15,
ShellEjectAt = 0.05,
SoundTable = {
{s = "eft_shared/weap_trigger_hammer.wav", t = 0.05}
},
},
["sgreload_start"] = {
Source = "reload_start",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
},
},
["sgreload_start_empty"] = {
Source = "reload_start_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0.15},
{s = "weapons/darsu_eft/mp153/mr133_shell_in_port.wav", t = 0.85},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.2},
},
},
["sgreload_insert"] = {
Source = "reload_loop",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr133_shell_in_mag2.wav", t = 0.3},
},
},
["sgreload_finish"] = {
Source = "reload_end",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "eft_shared/weap_handon.wav", t = 0.1},
},
},
["enter_inspect"] = {
Source = "enter_inspect",
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
},
},
["idle_inspect"] = {
Source = "idle_inspect",
},
["exit_inspect"] = {
Source = "exit_inspect",
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 1.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.8},
},
},
["unjam"] = {
Source = {"jam0","jam1","jam2"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.8},
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 1.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.52},
},
},
["fix"] = {
Source = {"misfire0","misfire1","misfire2"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.2,
-- ShellEjectAt = 0.8,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.7},
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 0.75},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.9},
},
},
}

View File

@@ -0,0 +1,749 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "MP-155"
SWEP.TrueName = "MP-155"
SWEP.Trivia_Class = "Semi-automatic shotgun"
SWEP.Trivia_Desc = "Russian smoothbore multi-shot MP-155 12 gauge shotgun, manufactured by IzhMekh (\"Izhevsky Mechanical Plant\"). The gun weighs less than its predecessor MP-153 and features enhanced ergonomics and an easy-to-replace barrel mechanism. The new design also makes it easier to use for left-handed users."
SWEP.Trivia_Manufacturer = "Izhmekh"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Gas-operated Rotating bolt"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 2017
SWEP.Slot = 4
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
SWEP.WorldModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "1415003000"
SWEP.Num = 8 -- number of shots per trigger pull.
SWEP.Damage = 10
SWEP.DamageMin = 10 -- damage done at maximum range
SWEP.RangeMin = 20 -- in METRES
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 4 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 8
SWEP.PhysBulletMuzzleVelocity = 415
SWEP.TriggerDelay = false
SWEP.ReloadInSights = true
SWEP.ReloadInSights_FOVMult = 1
SWEP.Recoil = 2.5
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.3
SWEP.RecoilPunch = 2.5
SWEP.VisualRecoilMult = 10
SWEP.RecoilPunchBackMax = 18
SWEP.RecoilPunchBackMaxSights = 19 -- may clip with scopes
SWEP.Delay = 60 / 120 -- 60 / RPM.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 48 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 300
SWEP.Primary.Ammo = "buckshot" -- what ammo type the gun uses
SWEP.MagID = "MP153" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = {"weapons/darsu_eft/mp153/mr153_fire_close1.wav", "weapons/darsu_eft/mp153/mr153_fire_close2.wav"}
SWEP.ShootSoundSilenced = "weapons/darsu_eft/mp153/mr133_fire_silenced_close.wav"
SWEP.DistantShootSound = {"weapons/darsu_eft/mp153/mr153_fire_distant1.wav", "weapons/darsu_eft/mp153/mr153_fire_distant2.wav"}
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellModel = "models/weapons/arccw/eft_shells/patron_12x70_shell.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.5
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.8
SWEP.SightTime = 0.5*1.07
SWEP.IronSightStruct = {
Pos = Vector(-4.281, -2, 0.681),
Ang = Angle(0.25, 0.004, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.Jamming = false
SWEP.HeatCapacity = 9
SWEP.HeatDissipation = 0.3
SWEP.HeatLockout = true -- overheating means you cannot fire until heat has been fully depleted
SWEP.HeatFix = true -- when the "fix" animation is played, all heat is restored.
SWEP.Malfunction = false
SWEP.MalfunctionJam = false -- After a malfunction happens, the gun will dryfire until reload is pressed. If unset, instead plays animation right after.
SWEP.MalfunctionTakeRound = false -- When malfunctioning, a bullet is consumed.
SWEP.MalfunctionWait = 0 -- The amount of time to wait before playing malfunction animation (or can reload)
SWEP.MalfunctionMean = 48 -- The mean number of shots between malfunctions, will be autocalculated if nil
SWEP.MalfunctionVariance = 0.2 -- The fraction of mean for variance. e.g. 0.2 means 20% variance
SWEP.MalfunctionSound = "weapons/arccw/malfunction.wav"
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL
SWEP.ActivePos = Vector(0.2, -3.5, 0.7)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-1.2, -4.5, 0.2)
SWEP.CrouchAng = Angle(0, 0, -6)
SWEP.HolsterPos = Vector(0.2, -3.5, 0.7)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelOffsetCrouch = Vector(0, 0, -2)
SWEP.CustomizePos = Vector(0.2, -3.5, 0.7)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 28
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[1] = {"shellport", "patron_in_weapon"},
}
SWEP.AttachmentElements = {
["sightmount"] = {VMBodygroups = {{ind = 4, bg = 1}},},
["bottommount"] = {VMBodygroups = {{ind = 5, bg = 2}},},
["m5"] = {VMBodygroups = {{ind = 3, bg = 6}},},
["m6"] = {VMBodygroups = {{ind = 3, bg = 7}},},
["m7"] = {VMBodygroups = {{ind = 3, bg = 8}},},
["m8"] = {VMBodygroups = {{ind = 3, bg = 9}},},
["ultimapistol"] = {
VMBodygroups = {{ind = 6, bg = 4}},
Override_IronSightStruct = {
Pos = Vector(-4.281, -4.5, -1.0),
Ang = Angle(0.25, 0.004, 0),
Magnification = 1.5,
}
},
["ultimatoprail"] = {
VMBodygroups = {{ind = 4, bg = 2}},
AttPosMods = {
[1] = {
vpos = Vector(0, 19, 2.9),
vang = Angle(0, -90, 0),
},
},
Override_IronSightStruct = {
Pos = Vector(-4.281, -4.5, -1.0),
Ang = Angle(0.25, 0.004, 0),
Magnification = 1.5,
},
NameChange = "MP-155 Ultima",
TrueNameChange = "MP-155 Ultima",
},
["ultimastock"] = {VMBodygroups = {{ind = 8, bg = 1}},},
["ultimapistolend"] = {VMBodygroups = {{ind = 7, bg = 1}},},
["ultimastockendL"] = {VMBodygroups = {{ind = 7, bg = 2}},},
["ultimastockendM"] = {VMBodygroups = {{ind = 7, bg = 3}},},
["ultimastockendS"] = {VMBodygroups = {{ind = 7, bg = 4}},},
["ultimacamera"] = {VMBodygroups = {{ind = 9, bg = 1}},},
["ultimahg"] = {VMBodygroups = {{ind = 2, bg = 2}},},
["12rip"] = {VMBodygroups = {{ind = 10, bg = 1}},},
["12fl"] = {VMBodygroups = {{ind = 10, bg = 2}},},
["12dss"] = {VMBodygroups = {{ind = 10, bg = 3}},},
["12bmg"] = {VMBodygroups = {{ind = 10, bg = 4}},},
["12ap20"] = {VMBodygroups = {{ind = 10, bg = 5}},},
["12ftx"] = {VMBodygroups = {{ind = 10, bg = 6}},},
["12g40"] = {VMBodygroups = {{ind = 10, bg = 7}},},
["12cop"] = {VMBodygroups = {{ind = 10, bg = 8}},},
["12p3"] = {VMBodygroups = {{ind = 10, bg = 9}},},
["12p6u"] = {VMBodygroups = {{ind = 10, bg = 10}},},
["12sfp"] = {VMBodygroups = {{ind = 10, bg = 11}},},
["12lead"] = {VMBodygroups = {{ind = 10, bg = 10}},},
}
SWEP.ExtraSightDist = 6
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-10, 5.5, -2),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.ShotgunReload = true
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "None",
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_sights_standard.png"),
Slot = {"eft_optic_small", "eft_optic_medium", "eft_optic_large"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
CorrectiveAng = Angle(0, 180, 0),
InstalledEles = {"sightmount"},
Offset = {
vpos = Vector(0, 17, 2.7),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Bodykit", -- print name
DefaultAttName = "Default",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp155_kit_std.png"),
Slot = "eft_mp155_kit", -- what kind of attachments can fit here, can be string or table
GivesFlags = {"ultima"},
},
{
PrintName = "Muzzle Device",
Slot = "eft_muzzle_12g",
Bone = "weapon",
DefaultAttName = "None",
-- DefaultAttIcon = Material("vgui/entities/eft_attachments/att_scarl_muzzle_std.png"),
Offset = {
vpos = Vector(0, 40, 1.8),
vang = Angle(90, -90, -90),
},
},
{
PrintName = "Magazine", -- print name
DefaultAttName = "4-shell",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp153_m4.png"),
Slot = "eft_mp153_mag", -- what kind of attachments can fit here, can be string or table
Installed = "mag_eft_mp153_6",
},
{
PrintName = "Stock", -- print name
DefaultAttName = "Walnut stock",
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp155_stock_std.png"),
Slot = "eft_mp155_stock", -- what kind of attachments can fit here, can be string or table
GivesFlags = {"ultimacam"},
},
{
PrintName = "Right Tactical", -- print name
DefaultAttName = "No Tactical",
Slot = {"eft_tactical"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
RequireFlags = {"ultima"},
HideIfBlocked = true,
Offset = {
vpos = Vector(-1.17, 33.4, 1.7),
vang = Angle(0, -90, -90),
},
},
{
PrintName = "Underbarrel",
Slot = "eft_foregrip",
Bone = "mod_mount_000",
DefaultAttName = "No Underbarrel",
Offset = {
vpos = Vector(0, -5.5, -1.2),
vang = Angle(90, -90, -90),
},
InstalledEles = {"bottommount"},
RequireFlags = {"ultima"},
},
{
PrintName = "Top Gadget", -- print name
DefaultAttName = "No Tactical",
Slot = {"eft_tactical_big", "eft_mp155_tac"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
RequireFlags = {"ultima"},
HideIfBlocked = true,
Offset = {
vpos = Vector(0, 33, 2.9),
vang = Angle(0, -90, 180),
},
},
{
PrintName = "Ammo",
DefaultAttName = "12/70 7mm buckshot",
DefaultAttIcon = Material("vgui/entities/eft_attachments/ammo/12g_def.png"),
Slot = "ammo_eft_12"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
Time = 1.2,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
},
},
["holster"] = {
Source = "holster",
Time = 1.2,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_holster.wav", t = 0},
},
},
["ready"] = {
Source = {"ready0", "ready1", "ready2"},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.4},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.8},
},
},
["fire"] = {
Source = "fire",
Time = 0.15,
ShellEjectAt = 0.05,
SoundTable = {
{s = "eft_shared/weap_trigger_hammer.wav", t = 0.05}
},
},
["sgreload_start"] = {
Source = "reload_start",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
},
},
["sgreload_start_empty"] = {
Source = "reload_start_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0.15},
{s = "weapons/darsu_eft/mp153/mr133_shell_in_port.wav", t = 0.85},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.2},
},
},
["sgreload_insert"] = {
Source = "reload_loop",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr133_shell_in_mag2.wav", t = 0.3},
},
},
["sgreload_finish"] = {
Source = "reload_end",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = "eft_shared/weap_handon.wav", t = 0.1},
},
},
["enter_inspect"] = {
Source = "enter_inspect",
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
},
},
["idle_inspect"] = {
Source = "idle_inspect",
},
["exit_inspect"] = {
Source = "exit_inspect",
SoundTable = {
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 1.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.8},
},
},
["unjam"] = {
Source = {"jam0","jam1","jam2"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.8},
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 1.2},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.52},
},
},
["fix"] = {
Source = {"misfire0","misfire1","misfire2"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.2,
-- ShellEjectAt = 0.8,
SoundTable = {
{s = "eft_shared/weap_handoff.wav", t = 0},
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.7},
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 0.75},
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.9},
},
},
}
if CLIENT then
-- Stuff to always draw thermal on this shotgun if camera is installed
-- Mostly copied from arccw's cl_holosight.lua
local blackColor = Color(0, 0, 0)
local rtsize = ScrH()
local rtmat = GetRenderTarget("arccw_rtmat_ultima", rtsize, rtsize, false)
local rtmaterial = CreateMaterial( "arccw_rtmat_ultima", "UnlitGeneric", {
['$basetexture'] = rtmat:GetName(),
} );
local colormod2 = Material("pp/colour")
local pp_ca_base, pp_ca_r, pp_ca_g, pp_ca_b = Material("pp/arccw/ca_base"), Material("pp/arccw/ca_r"), Material("pp/arccw/ca_g"), Material("pp/arccw/ca_b")
local pp_ca_r_thermal, pp_ca_g_thermal, pp_ca_b_thermal = Material("pp/arccw/ca_r_thermal"), Material("pp/arccw/ca_g_thermal"), Material("pp/arccw/ca_b_thermal")
pp_ca_r:SetTexture("$basetexture", render.GetScreenEffectTexture())
pp_ca_g:SetTexture("$basetexture", render.GetScreenEffectTexture())
pp_ca_b:SetTexture("$basetexture", render.GetScreenEffectTexture())
pp_ca_r_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
pp_ca_g_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
pp_ca_b_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
local coldtime = 30
local reticle = Material("hud/scopes/ultimareticle6.png")
function SWEP:UltimaFormRTScope()
cam.Start3D()
-- ArcCW.Overdraw = true
-- ArcCW.LaserBehavior = true
-- ArcCW.VMInRT = true
local rtangles, rtpos, rtdrawvm
if GetConVar("arccw_drawbarrel"):GetBool() and GetConVar("arccw_vm_coolsway"):GetBool() then
rtangles = self.VMAng - self.VMAngOffset
rtangles.x = rtangles.x - self.VMPosOffset_Lerp.z * 10
rtangles.y = rtangles.y + self.VMPosOffset_Lerp.y * 10
rtpos = self.VMPos + self.VMAng:Forward() * 15
else
rtangles = EyeAngles()
rtpos = EyePos()
end
local addads = 1
local rt = {
w = rtsize,
h = rtsize,
angles = rtangles,
origin = rtpos,
drawviewmodel = false,
fov = 15,
}
rtsize = ScrH()
if ScrH() > ScrW() then rtsize = ScrW() end
local rtres = ScrH()*0.2
rtmat = GetRenderTarget("arccw_rtmat_ultima", rtres, rtres, false)
render.PushRenderTarget(rtmat, 0, 0, rtsize, rtsize)
render.ClearRenderTarget(rt, blackColor)
-- if self:GetState() == ArcCW.STATE_SIGHTS then
render.RenderView(rt)
cam.Start3D(EyePos(), EyeAngles(), rt.fov, 0, 0, nil, nil, 0, nil)
self:DoLaser(false)
cam.End3D()
-- end
-- ArcCW.Overdraw = false
-- ArcCW.LaserBehavior = false
-- ArcCW.VMInRT = false
-- self:FormPP(rtmat)
render.PopRenderTarget()
cam.End3D()
-- if asight.Thermal then
self:UltimaFormThermalImaging(rtmat)
-- end
end
local function IsWHOT(ent)
if !ent:IsValid() or ent:IsWorld() then return false end
if ent:IsPlayer() then -- balling
if ent.ArcticMedShots_ActiveEffects and ent.ArcticMedShots_ActiveEffects["coldblooded"] or ent:Health() <= 0 then return false end -- arc stims
return true
end
if ent:IsNPC() or ent:IsNextBot() then -- npcs
if ent.ArcCWCLHealth and ent.ArcCWCLHealth <= 0 or ent:Health() <= 0 then return false end
return true
end
if ent:IsRagdoll() then -- ragdolling
if !ent.ArcCW_ColdTime then ent.ArcCW_ColdTime = CurTime() + coldtime end
return ent.ArcCW_ColdTime > CurTime()
end
if ent:IsVehicle() or ent:IsOnFire() or ent.ArcCW_Hot or ent:IsScripted() and !ent:GetOwner():IsValid() then -- vroom vroom + :fire: + ents but not guns (guns on ground will be fine)
return true
end
return false
end
function SWEP:UltimaFormThermalImaging(tex)
if !tex then
tex = render.GetRenderTarget()
end
render.PushRenderTarget(tex)
cam.Start3D()
if tex then
colormod2:SetTexture("$fbtexture", tex)
else
colormod2:SetTexture("$fbtexture", render.GetScreenEffectTexture())
end
local nvsc = {r=255+0, g=255+1, b=255+16/255}
local tvsc = {r=-255, g=-255, b=-255}
local tab = ents.GetAll()
-- table.Add(tab, player.GetAll())
-- table.Add(tab, ents.FindByClass("npc_*"))
render.SetStencilEnable(true)
render.SetStencilWriteMask(255)
render.SetStencilTestMask(255)
render.ClearStencil()
local sw = ScrH()
local sh = sw
local sx = (ScrW() - sw) / 2
local sy = (ScrH() - sh) / 2
render.SetScissorRect( sx, sy, sx + sw, sy + sh, true )
render.SetStencilReferenceValue(64)
render.SetStencilPassOperation(STENCIL_REPLACE)
render.SetStencilFailOperation(STENCIL_KEEP)
render.SetStencilZFailOperation(STENCIL_KEEP)
render.SetStencilCompareFunction(STENCIL_ALWAYS)
for _, v in pairs(tab) do
if !IsWHOT(v) then continue end
-- if !asight.ThermalScopeSimple then
render.SetBlend(0.5)
render.SuppressEngineLighting(true)
render.SetColorModulation(250, 250, 250)
v:DrawModel()
-- end
end
render.SetColorModulation(1, 1, 1)
render.SuppressEngineLighting(false)
render.MaterialOverride()
render.SetBlend(1)
render.SetStencilCompareFunction(STENCIL_EQUAL)
DrawColorModify({
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = 0,
["$pp_colour_contrast"] = 1,
["$pp_colour_colour"] = 0,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
})
DrawColorModify({
["$pp_colour_addr"] = tvsc.r - 255,
["$pp_colour_addg"] = tvsc.g - 255,
["$pp_colour_addb"] = tvsc.b - 255,
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = 0,
["$pp_colour_contrast"] = 1,
["$pp_colour_colour"] = 1,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
})
-- if !asight.ThermalNoCC then
render.SetStencilCompareFunction(STENCIL_NOTEQUAL)
render.SetStencilPassOperation(STENCIL_KEEP)
if GetConVar("arccw_thermalpp"):GetBool() and GetConVar("arccw_scopepp"):GetBool() then
-- chromatic abberation
render.CopyRenderTargetToTexture(render.GetScreenEffectTexture())
render.SetMaterial( pp_ca_base )
render.DrawScreenQuad()
render.SetMaterial( pp_ca_r_thermal )
render.DrawScreenQuad()
render.SetMaterial( pp_ca_g_thermal )
render.DrawScreenQuad()
render.SetMaterial( pp_ca_b_thermal )
render.DrawScreenQuad()
-- pasted here cause otherwise either target colors will get fucked either pp either motion blur
end
DrawColorModify({
["$pp_colour_addr"] = nvsc.r - 255,
["$pp_colour_addg"] = nvsc.g - 255,
["$pp_colour_addb"] = nvsc.b - 255,
-- ["$pp_colour_addr"] = 0,
-- ["$pp_colour_addg"] = 0,
-- ["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = 0.1,
["$pp_colour_contrast"] = 0.5,
["$pp_colour_colour"] = 0.12,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
})
-- end
render.SetScissorRect( sx, sy, sx + sw, sy + sh, false )
render.SetStencilEnable(false)
colormod2:SetTexture("$fbtexture", render.GetScreenEffectTexture())
cam.End3D()
if GetConVar("arccw_thermalpp"):GetBool() then
if !render.SupportsPixelShaders_2_0() then return end
DrawSharpen(0.3,0.9)
DrawBloom(0,0.3,5,5,3,0.5,1,1,1)
-- DrawMotionBlur(0.7,1,1/(15)) -- seems to break shit
end
cam.Start2D()
surface.SetMaterial(reticle)
surface.SetDrawColor(255, 255, 255, 255)
surface.DrawTexturedRect(0, 0, ScrH(), ScrH())
cam.End2D()
render.PopRenderTarget()
end
local fpsdelay = CurTime()
hook.Add("RenderScene", "ArcCW_ULTIMA_CAM", function()
local wpn = LocalPlayer():GetActiveWeapon()
if wpn.ArcCW and wpn:GetClass() == "arccw_eft_mp155" and wpn.Attachments[8].Installed == "tac_eft_mp155_ultima_camera" then
if fpsdelay > CurTime() then return end
wpn:UltimaFormRTScope()
wpn.Owner:GetViewModel():SetSubMaterial(28, "!arccw_rtmat_ultima")
fpsdelay = CurTime()+1/15
end
end)
end

View File

@@ -0,0 +1,520 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Oldie Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Regiment 9mm"
SWEP.TrueName = "MP5"
SWEP.Trivia_Class = "Submachine-Gun"
SWEP.Trivia_Desc = "HK MP5 9x19 submachinegun with Navy 3 Round Burst firing mechanism version, which features three-round cutoff. Widely acclaimed model of a submachinegun, primarily known as weapon of GSG9 and similar forces of the world, and famous through frequent appearance in movies and video games."
SWEP.Trivia_Manufacturer = "Heckler and Koch"
SWEP.Trivia_Calibre = "9x19mm"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Germany"
SWEP.Trivia_Year = 1966
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then SWEP.PrintName = SWEP.TrueName end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_mp5/c_eft_mp5_std/models/c_eft_mp5_std.mdl"
SWEP.WorldModel = "models/weapons/arc_eft_mp5/w_eft_mp5_std/models/w_eft_mp5_std.mdl"
SWEP.ViewModelFOV = 54
SWEP.Damage = 10
SWEP.DamageMin = 10 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 400 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.CanFireUnderwater = false
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 50
SWEP.ReducedClipSize = 20
SWEP.Recoil = .38
SWEP.RecoilSide = 0.125
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 800 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = -3,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 18 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 300 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "eft_mp5" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 110 -- pitch of shoot sound
SWEP.FirstShootSound = "weapons/arccw_eft/mp5k/mp5k_fp.wav"
SWEP.ShootSound = "weapons/arccw_eft/mp5k/mp5k_fp.wav"
SWEP.ShootSoundSilenced = "weapons/arccw_eft/mp5k/mp5k_suppressed_fp.wav"
SWEP.DistantShootSound = "weapons/arccw_eft/mp5k/mp5k_dist.wav"
SWEP.MuzzleEffect = "muzzleflash_mp5"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellScale = 1.5
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.ShellScale = 1
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.SightTime = 0.275
SWEP.SpeedMult = 0.96
SWEP.SightedSpeedMult = 0.75
SWEP.BarrelLength = 20
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = true
SWEP.ProceduralIronFire = true
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-3.642, -2, 2.05),
Ang = Angle(-0.0, 0.0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "smg"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG
SWEP.ActivePos = Vector(-1, 0, 2)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(4, -2, 1)
SWEP.HolsterAng = Angle(0, 50, -15)
SWEP.CustomizePos = Vector(-1.2 , 0, 1)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.ExtraSightDist = 5
SWEP.AttachmentElements = {
["Mount_scopes"] = {
VMBodygroups = {{ind = 2, bg = 1}},
WMBodygroups = {{ind = 2, bg = 1}},
},
["Default_Stock"] = {
VMBodygroups = {{ind = 4, bg = 1}},
WMBodygroups = {{ind = 3, bg = 1}},
},
["Magazine_30"] = {
VMBodygroups = {{ind = 5, bg = 1}},
WMBodygroups = {{ind = 4, bg = 1}},
},
["Magazine_20"] = {
VMBodygroups = {{ind = 5, bg = 3}},
WMBodygroups = {{ind = 4, bg = 3}},
},
["extendedmag"] = {
VMBodygroups = {{ind = 5, bg = 2}},
WMBodygroups = {{ind = 4, bg = 2}},
},
["Default_Handguard"] = {
VMBodygroups = {{ind = 6, bg = 1}},
WMBodygroups = {{ind = 5, bg = 1}},
},
["Default_Muzzle"] = {
VMBodygroups = {{ind = 7, bg = 1}},
WMBodygroups = {{ind = 6, bg = 1}},
},
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
Offset = {
vang = Angle(90, -90, -90),
wang = Angle(-5, 0, 180)
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(0, 0.5, 3.65),
vmax = Vector(0, -1.6, 3.7),
wmin = Vector(5.5, 0.5, -5.8),
wmax = Vector(6.5, 0.5, -5.9),
},
InstalledEles = {"Mount_scopes"},
},
{
PrintName = "Muzzle Device",
DefaultAttName = "3 Lug adapter",
Slot = {"eft_muzzle_mp5", "eft_surpressor_9mm"},
DefaultAttIcon = Material("vgui/entities/eft_attachments/3lug_muzzleicon.png"),
Bone = "mod_reciever",
Offset = {
vpos = Vector(0, 9.5, 2.25),
vang = Angle(0, -90, 0),
wpos = Vector(16.6, 0.5, -5.3),
wang = Angle(-5, 0, 0),
},
InstalledEles = {"Default_Muzzle"},
},
{
PrintName = "Tactical",
Slot = "eft_tactical",
Bone = "mod_reciever",
Offset = {
vpos = Vector(-.9, 5.5, 2), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, -90),
wpos = Vector(13, -0.45, -4.95),
wang = Angle(-5, 0, 90),
},
RequireFlags = {"siderail"},
},
{
PrintName = "Underbarrel",
Slot = "eft_foregrip",
Bone = "mod_reciever",
DefaultAttName = "No Underbarrel",
Offset = {
vpos = Vector(0, 6, 1.25),
vang = Angle(90, -90, -90),
wpos = Vector(12, 0, -4),
wang = Angle(-5, 0, 180)
},
RequireFlags = {"lowerrail"},
},
{
PrintName = "Stock",
Slot = "eftmp5_stock",
DefaultAttIcon = Material("vgui/entities/eft_attachments/A2_StockIcon.png"),
Bone = "mod_stock",
DefaultAttName = "A2 Stock",
Offset = {
vpos = Vector(0, 0, 0), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
wpos = Vector(2, 0.5, -3),
wang = Angle(-5, 0, 180)
},
InstalledEles = {"Default_Stock"},
},
{
PrintName = "Handguard",
Slot = "eftmp5_handguard",
DefaultAttIcon = Material("vgui/entities/eft_attachments/Navy_HandguardIcon.png"),
Bone = "mod_reciever",
DefaultAttName = "Navy Handguard",
Offset = {
vpos = Vector(0, 5.25, 1.9), -- offset that the attachment will be relative to the bone
vang = Angle(-90, -0, -90),
wpos = Vector(12.25, 0.5, -4.75),
wang = Angle(85, 0, 180)
},
InstalledEles = {"Default_Handguard"},
},
{
PrintName = "Magazine",
DefaultAttName = "30-Round Mag",
DefaultAttIcon = Material("vgui/entities/eft_attachments/MP5_30Mag_Icon.png"),
InstalledEles = {"Magazine_30"},
Slot = "eftmp5_mag"
},
{
PrintName = "Caliber",
DefaultAttName = "9x19 Pst Gzh",
DefaultAttIcon = Material("vgui/entities/eft_attachments/9x19_Icon.png"),
Slot = "ammo_eft_9x19"
}
}
SWEP.Animations = {
["idle"] = {
Source = false,
LHIK = false,
LHIKIn = 0,
LHIKOut = 0,
},
["ready"] = {
Source = "draw_first",
Time = 1.5,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.3
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 0.
}
},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["draw_empty"] = {
Source = "draw_empty",
Time = 0.75,
LHIK = true,
LHIKIn = 0,
LHIKOut = 2,
},
["draw"] = {
Source = "draw",
Time = 0.9,
LHIK = true,
LHIKIn = 0,
LHIKOut = 1,
},
["fire"] = {
Source = "shoot",
Time = 0.5,
ShellEjectAt = 0,
},
["fire_empty"] = {
Source = "shoot_dry",
Time = 1,
},
["fire_iron"] = {
Source = "shoot",
Time = 1,
ShellEjectAt = 0,
},
["fire_iron_empty"] = {
Source = "shoot_dry",
Time = 1,
},
["reload"] = {
Source = "reload",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_long"] = {
Source = "reload_extended",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_short"] = {
Source = "reload_decreased",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_empty"] = {
Source = "reload_empty",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
},
["reload_long_empty"] = {
Source = "reload_empty_extended",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
},
["reload_short_empty"] = {
Source = "reload_empty_decreased",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.3,
},
["enter_inspect"] = {
Source = "customise_begin",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "customise_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "customise_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,474 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Oldie Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Regiment-SD 9mm"
SWEP.TrueName = "MP5SD"
SWEP.Trivia_Class = "Submachine-Gun"
SWEP.Trivia_Desc = "HK MP5 9x19 submachinegun with Navy 3 Round Burst firing mechanism version, which features three-round cutoff. Widely acclaimed model of a submachinegun, primarily known as weapon of GSG9 and similar forces of the world, and famous through frequent appearance in movies and video games."
SWEP.Trivia_Manufacturer = "Heckler and Koch"
SWEP.Trivia_Calibre = "9x19mm"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Germany"
SWEP.Trivia_Year = 1966
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then SWEP.PrintName = SWEP.TrueName end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_mp5/c_eft_mp5/models/c_eft_mp5.mdl"
SWEP.WorldModel = "models/weapons/arc_eft_mp5/w_eft_mp5/models/w_eft_mp5.mdl"
SWEP.ViewModelFOV = 54
SWEP.Damage = 10
SWEP.DamageMin = 10 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 400 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.CanFireUnderwater = false
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 50
SWEP.ReducedClipSize = 20
SWEP.Recoil = .36
SWEP.RecoilSide = 0.125
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 800 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = -3,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 15 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 250 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 150
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "eft_mp5" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 110 -- pitch of shoot sound
SWEP.FirstShootSound = "weapons/arccw_eft/mp5k/mp5k_suppressed_fp.wav"
SWEP.ShootSound = "weapons/arccw_eft/mp5k/mp5k_suppressed_fp.wav"
SWEP.ShootSoundSilenced = "weapons/arccw_eft/mp5k/mp5k_suppressed_fp.wav"
SWEP.DistantShootSound = "weapons/arccw_eft/mp5k/mp5k_suppressed_tp.wav"
SWEP.GMMuzzleEffect = true
SWEP.MuzzleEffect = ""
SWEP.NoFlash = true
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellScale = 1.5
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.ShellScale = 1
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.SightTime = 0.275
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.75
SWEP.BarrelLength = 24
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = true
SWEP.ProceduralIronFire = true
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-3.642, -2, 2.05),
Ang = Angle(-0.0, 0.0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "smg"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG
SWEP.ActivePos = Vector(-1, 0, 2)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(4, -2, 1)
SWEP.HolsterAng = Angle(0, 50, -15)
SWEP.CustomizePos = Vector(-1.2 , 0, 1)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.ExtraSightDist = 5
SWEP.AttachmentElements = {
["Mount_scopes"] = {
VMBodygroups = {{ind = 2, bg = 1}},
WMBodygroups = {{ind = 2, bg = 1}},
},
["Gadget_Mount"] = {
VMBodygroups = {{ind = 3, bg = 1}},
WMBodygroups = {{ind = 3, bg = 1}},
},
["Default_Stock"] = {
VMBodygroups = {{ind = 4, bg = 1}},
WMBodygroups = {{ind = 4, bg = 1}},
},
["Magazine_30"] = {
VMBodygroups = {{ind = 5, bg = 1}},
WMBodygroups = {{ind = 5, bg = 1}},
},
["Magazine_20"] = {
VMBodygroups = {{ind = 5, bg = 3}},
WMBodygroups = {{ind = 5, bg = 3}},
},
["extendedmag"] = {
VMBodygroups = {{ind = 5, bg = 2}},
WMBodygroups = {{ind = 5, bg = 2}},
},
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
Offset = {
vang = Angle(90, -90, -90),
wang = Angle(-5, 0, 180)
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(0, 0.5, 3.65),
vmax = Vector(0, -1.6, 3.7),
wmin = Vector(5.5, 0.5, -5.8),
wmax = Vector(6.5, 0.5, -5.9),
},
InstalledEles = {"Mount_scopes"},
},
{
PrintName = "Tactical",
Slot = "eft_tactical",
Bone = "mod_reciever",
Offset = {
vpos = Vector(0, 10, 1), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
wpos = Vector(16.65, 0.5, -4),
wang = Angle(-5, 0, 180),
},
InstalledEles = {"Gadget_Mount"},
},
{
PrintName = "Stock",
Slot = "eftmp5_stock",
DefaultAttIcon = Material("vgui/entities/eft_attachments/A2_StockIcon.png"),
Bone = "mod_stock",
DefaultAttName = "A2 Stock",
Offset = {
vpos = Vector(0, 0, 0), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
wpos = Vector(2, 0.5, -3),
wang = Angle(-5, 0, 180)
},
InstalledEles = {"Default_Stock"},
},
{
PrintName = "Magazine",
DefaultAttName = "30-Round Mag",
DefaultAttIcon = Material("vgui/entities/eft_attachments/MP5_30Mag_Icon.png"),
InstalledEles = {"Magazine_30"},
Slot = "eftmp5_mag"
},
{
PrintName = "Caliber",
DefaultAttName = "9x19 Pst Gzh",
DefaultAttIcon = Material("vgui/entities/eft_attachments/9x19_Icon.png"),
Slot = "ammo_eft_9x19"
}
}
SWEP.Animations = {
["idle"] = {
Source = false
},
["ready"] = {
Source = "draw_first",
Time = 1.5,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.3
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 0.
}
},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["draw_empty"] = {
Source = "draw_empty",
Time = 0.75,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["draw"] = {
Source = "draw",
Time = 0.75,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = "shoot",
Time = 0.5,
ShellEjectAt = 0,
},
["fire_empty"] = {
Source = "shoot_dry",
Time = 1,
},
["fire_iron"] = {
Source = "shoot",
Time = 1,
ShellEjectAt = 0,
},
["fire_iron_empty"] = {
Source = "shoot_dry",
Time = 1,
},
["reload"] = {
Source = "reload",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.5,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_long"] = {
Source = "reload_extended",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.5,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_short"] = {
Source = "reload_decreased",
Time = 3,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.5,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magrelease.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 1.8
}
},
},
["reload_empty"] = {
Source = "reload_empty",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
["reload_long_empty"] = {
Source = "reload_empty_extended",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
["reload_short_empty"] = {
Source = "reload_empty_decreased",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
FrameRate = 24,
SoundTable = {
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltback.wav",
t = 0.45
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltlock.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magout.wav",
t = 1.1
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_magin.wav",
t = 2.5
},
{
s = "weapons/arccw_eft/mp5k/handling/mp5k_boltrelease.wav",
t = 3.5
}
},
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
["enter_inspect"] = {
Source = "customise_begin",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
["idle_inspect"] = {
Source = "customise_idle",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
["exit_inspect"] = {
Source = "customise_end",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0.6,
},
}

View File

@@ -0,0 +1,505 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "MP7A1"
SWEP.Trivia_Class = "PDW"
SWEP.Trivia_Desc = "The MP7 is extremely compact, lightweight, can be used in very confined spaces, and is practically recoil-free. It can be carried continuously, making it the ideal personal weapon for the soldier of today. Those who carry it will be suitably armed for the broadest range of operations."
SWEP.Trivia_Manufacturer = "Heckler & Koch"
SWEP.Trivia_Calibre = "4.6x30mm"
SWEP.Trivia_Mechanism = "blowback-operated"
SWEP.Trivia_Country = "Germany"
SWEP.Trivia_Year = 2003
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_mp7/eft_mp7/models/c_eft_mp7.mdl"
SWEP.WorldModel = "models/weapons/w_smg1.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 10
SWEP.DamageMin = 10 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1050 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 740
SWEP.Recoil = 0.39
SWEP.RecoilSide = 0.091
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 850 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0,
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 17 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 400 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "mp7" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/arccw_eft/mp7/eft_mp7_close.wav"
SWEP.ShootSoundSilenced = "weapons/arccw_eft/mp7/eft_mp7_surpressed.wav"
SWEP.DistantShootSound = "weapons/arccw_eft/mp7/eft_mp7_distant.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_mp5"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.25
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[0] = "patron_in_weapon",
[1] = "patron_001",
[2] = "patron_002",
[3] = "patron_003",
[4] = "patron_004",
[5] = "patron_005"
}
SWEP.SpeedMult = 0.97
SWEP.SightedSpeedMult = 0.85
SWEP.SightTime = 0.24
SWEP.IronSightStruct = {
Pos = Vector(-3.673, 3, 1.06),
Ang = Angle(0, 0.0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "smg"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 4, 1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(0, 3, 0.6)
SWEP.CrouchAng = Angle(0, 0, 5)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(0, 3, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 24
SWEP.AttachmentElements = {
["Flip_Sights"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["Mag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["Stock"] = {
VMBodygroups = {{ind = 4, bg = 1}},
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-14, 6, -4),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-9, 5.5, -8.5),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material("vgui/entities/eft_mp7/eft_mp7_sight.png"),
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "mod_sight_front", -- relevant bone any attachments will be mostly referring to
Offset = {
vang = Angle(90, -90, -90),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(0, -4, 0),
vmax = Vector(0, -6.5, 0),
},
InstalledEles = {"Flip_Sights"},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "eft_mp7_surpressor",
Bone = "mod_muzzle",
Offset = {
vpos = Vector(-0, 0.5, 0), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Tactical - Left",
Slot = "eft_tactical",
Bone = "mod_sight_front",
Offset = {
vpos = Vector(0.8, -1, -2), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 90),
},
},
{
PrintName = "Tactical - Right",
Slot = "eft_tactical",
Bone = "mod_sight_front",
Offset = {
vpos = Vector(-0.8, -1, -2), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, -90),
},
},
{
PrintName = "Stock",
DefaultAttName = "Unfolded Stock",
Slot = "eft_mp7_stock",
DefaultAttIcon = Material("vgui/entities/eft_mp7/eft_mp7_StockUnFolded.png"),
InstalledEles = {"Stock"},
},
{
PrintName = "Magazine",
DefaultAttName = "20-Round Mag",
DefaultAttIcon = Material("vgui/entities/eft_mp7/eft_mp7_mag20.png"),
InstalledEles = {"Magazine_20"},
Slot = "eft_mag_mp7",
Bone = "mod_magazine", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 0, 0),
vang = Angle(90, -90, -90),
},
InstalledEles = {"Mag"},
},
{
PrintName = "Caliber",
DefaultAttName = "4.6x30mm FMJ",
DefaultAttIcon = Material("vgui/entities/eft_mp7/eft_mp7_bullet.png"),
Slot = "ammo_eft_46x30"
}
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["idle_inspect"] = {
Source = "inventory_idle"
},
["draw"] = {
Source = "draw",
LHIK = false,
LHIKIn = 0,
LHIKOut = 0.9,
},
["holster"] = {
Source = "holster",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["ready"] = {
Source = "draw_first", "draw_first2",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.8,
SoundTable = {
{
s = "weapons/arccw_eft/ump/mp5_weap_bolt_in_slap.wav",
t = 0.8
}
},
},
["fire"] = {
Source = "fire",
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "fire",
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload_short",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
}
},
},
["reload_empty"] = {
Source = "reload_short_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.8, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_bolt_in_slap.wav",
t = 3.1
}
},
},
["reload_extended"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
}
},
},
["reload_extended_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.8, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_bolt_in_slap.wav",
t = 3.1
}
},
},
["reload_extended2"] = {
Source = "reload_long",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
}
},
},
["reload_extended2_empty"] = {
Source = "reload_long_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.8, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_release_button.wav",
t = 0.5
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_out.wav",
t = 0.55
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_mag_in.wav",
t = 1.85
},
{
s = "weapons/arccw_eft/mp7/mp5_weap_bolt_in_slap.wav",
t = 3.1
}
},
},
["0_to_1"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["0_to_2"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["1_to_2"] = {
Source = "firemode_0",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["1_to_0"] = {
Source = "firemode_0",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["2_to_1"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["2_to_0"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["enter_inspect"] = {
Source = "inventory_begin",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "inventory_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "inventory_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,382 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Oldie Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "PPSH-41"
SWEP.Trivia_Class = "Submachine Gun"
SWEP.Trivia_Desc = "The PPSh-41 (pistolet-pulemyot Shpagina; Russian: Пистолет-пулемёт Шпагина; Shpagin machine pistol ) is a Soviet submachine gun designed by Georgy Shpagin as a cheap, reliable, and simplified alternative to the PPD-40."
SWEP.Trivia_Manufacturer = "Numerous"
SWEP.Trivia_Calibre = " 7.62x25mm Tokarev"
SWEP.Trivia_Mechanism = "Open Bolt"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 1941
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_ppsh/c_eft_ppsh/models/c_eft_ppsh.mdl"
SWEP.WorldModel = "models/weapons/w_smg_mp5.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 8
SWEP.DamageMin = 8 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 900 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 35 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 400
SWEP.Recoil = 0.34
SWEP.RecoilSide = 0.25
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 900 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 20 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 450 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "ppsh" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/arccw_eft/ppsh/tt_fire_indoor_close.wav"
SWEP.ShootSoundSilenced = "arccw_go/mp5/mp5_01.wav"
SWEP.DistantShootSound = "weapons/arccw_eft/ppsh/tt_fire_indoor_distant.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_mp5"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.25
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.98
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.3
SWEP.IronSightStruct = {
Pos = Vector(-3.6425, 3, 1.32),
Ang = Angle(0.75, 0.05, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 3, 0.6)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(0, 3, 0.6)
SWEP.CrouchAng = Angle(0, 0, 5)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(0, 3, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 30
SWEP.AttachmentElements = {
["magazine"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{ind = 1, bg = 1}},
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-14, 6, -4),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-6, 4, -7),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.Attachments = {
{
PrintName = "Magazine",
Slot = "eft_ppsh_magazine",
DefaultAttName = "41-round PPSH magazine",
Bone = "mod_magazine",
Offset = {
vpos = Vector(-0.0, -0, 0),
vang = Angle(90, 0, -90),
wpos = Vector(0, 0, 0),
wang = Angle(-0, 0, 0),
}
},
{
PrintName = "Caliber",
DefaultAttName = "7.62x25 - FMJ",
DefaultAttIcon = Material("vgui/entities/eft_attachments/9x19_Icon.png"),
Slot = "ammo_eft_762x25"
}
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["holster"] = {
Source = "Holster",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["ready"] = {
Source = "ready",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = "fire",
Time = 0.05,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "fire",
Time = 0.05,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/arccw_eft/ppsh/kedr_magrelease_button.wav",
t = 0.8
},
{
s = "weapons/arccw_eft/ppsh/kedr_magout.wav",
t = 0.9
},
{
s = "weapons/arccw_eft/ppsh/kedr_magin.wav",
t = 2.6
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30, 55},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/arccw_eft/ppsh/kedr_magrelease_button.wav",
t = 0.8
},
{
s = "weapons/arccw_eft/ppsh/kedr_magout.wav",
t = 0.9
},
{
s = "weapons/arccw_eft/ppsh/kedr_magin.wav",
t = 2.6
},
{
s = "weapons/arccw_eft/ppsh/kedr_slider_jam.wav",
t = 4.3
}
},
},
["reload_extended"] = {
Source = "reload_extended",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/arccw_eft/ppsh/kedr_magrelease_button.wav",
t = 0.8
},
{
s = "weapons/arccw_eft/ppsh/kedr_magout.wav",
t = 0.9
},
{
s = "weapons/arccw_eft/ppsh/kedr_magin.wav",
t = 2.6
}
},
},
["reload_extended_empty"] = {
Source = "reload_extended_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30, 55},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
SoundTable = {
{
s = "weapons/arccw_eft/ppsh/kedr_magrelease_button.wav",
t = 0.8
},
{
s = "weapons/arccw_eft/ppsh/kedr_magout.wav",
t = 0.9
},
{
s = "weapons/arccw_eft/ppsh/kedr_magin.wav",
t = 2.6
},
{
s = "weapons/arccw_eft/ppsh/kedr_slider_jam.wav",
t = 4.3
}
},
},
["1_to_2"] = {
Source = "firemode",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["2_to_1"] = {
Source = "firemode_alt",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["enter_inspect"] = {
Source = "inspect_begin",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "inspect_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "inspect_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}
sound.Add({
name = "ARCCW_GO_MP5.Draw",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_draw.wav"
})
sound.Add({
name = "ARCCW_GO_MP5.Slideback",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_Slideback.wav"
})
sound.Add({
name = "ARCCW_GO_MP5.Slideforward",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_Slideforward.wav"
})
sound.Add({
name = "ARCCW_GO_MP5.Clipout",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_clipout.wav"
})
sound.Add({
name = "ARCCW_GO_MP5.Clipin",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_clipin.wav"
})
sound.Add({
name = "ARCCW_GO_MP5.Cliphit",
channel = 16,
volume = 1.0,
sound = "arccw_go/mp5/mp5_cliphit.wav"
})

View File

@@ -0,0 +1,396 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "T-5000"
SWEP.Trivia_Class = "Bolt-Action Sniper"
SWEP.Trivia_Desc = "High-accuracy ORSIS T-5000 rifle is an outstanding result of our company designers' efforts. This model was created in cooperation with professional shooters and has the properties required for a customer in the Russian market. T-5000 model is a hand-reloaded repeater with sliding breech bolt and two front locking lugs. It is a multi-purpose weapon. Its specifications provide high-accuracy long-range shots (up to 1500m), high level of shooter's convenience while preparatory, firing and recoil phases, swift sighting line recovery, excellent reliability and ergonomics."
SWEP.Trivia_Manufacturer = "ORSIS"
SWEP.Trivia_Calibre = "7.62x51mm NATO"
SWEP.Trivia_Mechanism = "bolt-Action"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 2011
SWEP.Slot = 3
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_t5000/eft_t5000/models/c_eft_t5000.mdl"
SWEP.WorldModel = "models/weapons/w_snip_scout.mdl"
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-9, 5.5, -8.5),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "0000000000"
SWEP.Damage = 70
SWEP.DamageMin = 70 -- damage done at maximum range
SWEP.Range = 150 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 826 -- projectile or phys bullet muzzle velocity
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 5 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 10
SWEP.Recoil = 6
SWEP.RecoilSide = 1.5
SWEP.RecoilRise = 4
SWEP.VisualRecoilMult = 1
SWEP.Delay = 60 / 45-- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = {
"weapon_ar2",
"weapon_crossbow",
}
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 1 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 650 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "T5000" -- the magazine pool this gun draws from
SWEP.ShootVol = 115 -- volume of shoot sound
SWEP.ShootSound = "weapons/arccw_eft_t5000/sv98_fire_close.wav"
SWEP.ShootSoundSilenced = "weapons/arccw_eft_t5000/rsass_indoor_close_silenced1.wav"
SWEP.DistantShootSound = "weapons/arccw_eft_t5000/sv98_fire_far.wav"
SWEP.MuzzleEffect = "muzzleflash_4"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 90
SWEP.ShellScale = 1.5
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.ProceduralViewBobAttachment = 1
SWEP.CamAttachment = 3
SWEP.SpeedMult = 0.9
SWEP.SightedSpeedMult = 0.6
SWEP.SightTime = 0.24
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[0] = "patron_in_weapon",
[1] = "patron_001",
[2] = "patron_002",
[3] = "patron_003"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ShotgunReload = false
SWEP.ManualAction = true -- pump/bolt action
SWEP.NoLastCycle = true -- do not cycle on last shot
SWEP.CaseBones = {
}
SWEP.IronSightStruct = {
Pos = Vector(-3.6, -3, 2.75),
Ang = Angle(0.1, -0.05, 0),
Magnification = 1.25,
CrosshairInSights = false,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-0, 0, 1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.SprintPos = Vector(5, -2, -2)
SWEP.SprintAng = Angle(0, 30, 0)
SWEP.CustomizePos = Vector(0, 0, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(3, 0, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, 0)
SWEP.BarrelOffsetHip = Vector(0, 0, 0)
SWEP.BarrelLength = 30
SWEP.ExtraSightDist = 5
SWEP.AttachmentElements = {
["Muzzle"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vang = Angle(90, -90, -90),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(0, 18.5, 0.75),
vmax = Vector(0, 20, 0.75),
},
},
{
PrintName = "Muzzle Device", -- print name
DefaultAttName = "Standard Muzzle Device",
DefaultAttIcon = Material("vgui/entities/eft_t5000/muzzle_t5000_icon.png"),
Slot = "eft_muzzle_762x51", -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 47.5, -0.25),
vang = Angle(0, -90, 0),
},
InstalledEles = {"Muzzle"},
},
{
PrintName = "Tactical - Right",
Slot = "eft_tactical",
Bone = "weapon",
Offset = {
vpos = Vector(-1.45, 33, -0.45), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, -90),
},
},
{
PrintName = "Tactical - Left",
Slot = "eft_tactical",
Bone = "weapon",
Offset = {
vpos = Vector(1.45, 33, -0.45), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 90),
},
},
{
PrintName = "Tactical - Top",
Slot = "eft_tactical_big",
Bone = "weapon",
Offset = {
vpos = Vector(0, 33, 1), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 180),
},
},
{
PrintName = "Tactical - Bottom",
Slot = "eft_tactical",
Bone = "weapon",
Offset = {
vpos = Vector(0, 31.8, -1.85), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Caliber",
DefaultAttName = "7.62x51mm M80",
DefaultAttIcon = Material("vgui/entities/eft_attachments/762x51_icon.png"),
Slot = "ammo_eft_762x51"
}
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0.25,
LHIKOut = 0.25,
},
["holster"] = {
Source = "holster",
LHIK = true,
LHIKIn = 0.25,
LHIKOut = 0.25,
},
["ready"] = {
Source = {"ready_1", "ready_2", "ready_3"},
LHIK = false,
LHIKIn = 0.25,
LHIKOut = 0.25,
SoundTable = {
{
s = "weapons/arccw_eft_t5000/t5000_bolt_1.wav",
t = 0.9
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_2.wav",
t = 1
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_3.wav",
t = 1.1
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_4.wav",
t = 1.2
}
}
},
["fire"] = {
Source = {"fire"},
},
["cycle"] = {
Source = {"chamber_1", "chamber_2", "chamber_3"},
ShellEjectAt = 20 / 30,
SoundTable = {
{
s = "weapons/arccw_eft_t5000/t5000_bolt_1.wav",
t = 0.4
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_2.wav",
t = 0.5
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_3.wav",
t = 0.6
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_4.wav",
t = 0.7
}
}
},
["fire_iron"] = {
Source = {"fire"},
},
["cycle_ads"] = {
Source = {"chamber_1", "chamber_2", "chamber_3"},
ShellEjectAt = 20 / 30,
SoundTable = {
{
s = "weapons/arccw_eft_t5000/t5000_bolt_1.wav",
t = 0.4
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_2.wav",
t = 0.5
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_3.wav",
t = 0.6
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_4.wav",
t = 0.7
}
}
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 30,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.2,
SoundTable = {
{
s = "weapons/arccw_eft_t5000/t5000_magbutton.wav",
t = 0.6
},
{
s = "weapons/arccw_eft_t5000/t5000_mag_out.wav",
t = 0.75
},
{
s = "weapons/arccw_eft_t5000/t5000_mag_in.wav",
t = 2.8
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 30,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.2,
SoundTable = {
{
s = "weapons/arccw_eft_t5000/t5000_mag_out.wav",
t = 0.7
},
{
s = "weapons/arccw_eft_t5000/t5000_mag_in.wav",
t = 2.3
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_1.wav",
t = 3.5
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_2.wav",
t = 3.6
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_3.wav",
t = 3.7
},
{
s = "weapons/arccw_eft_t5000/t5000_bolt_4.wav",
t = 3.8
}
},
},
["enter_inspect"] = {
Source = "inventory_begin",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "inventory_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "inventory_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,383 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "UMP-45"
SWEP.Trivia_Class = "Submachine Gun"
SWEP.Trivia_Desc = "Heckler & Koch UMP - submachine gun, designed by German company Heckler & Koch in the 1990s as a lighter and cheaper analog of the MP5. This version is designed to fire a .45 ACP cartridge and has a reduced to 600 rpm rate of fire."
SWEP.Trivia_Manufacturer = "Heckler & Koch"
SWEP.Trivia_Calibre = ".45 ACP"
SWEP.Trivia_Mechanism = "blowback-operated"
SWEP.Trivia_Country = "Germany"
SWEP.Trivia_Year = 2000
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_ump/eft_ump/models/c_eft_ump.mdl"
SWEP.WorldModel = "models/weapons/w_smg_ump45.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 12
SWEP.DamageMin = 12 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 700 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 400
SWEP.Recoil = 0.275
SWEP.RecoilSide = 0.125
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 550 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0,
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 14 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 300 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "ppsh" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/arccw_eft/ump/gyrza_close1.wav"
SWEP.ShootSoundSilenced = "arccw_go/mp5/mp5_01.wav"
SWEP.DistantShootSound = "weapons/arccw_eft/ump/gyrza_distant1.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_mp5"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.25
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[0] = "patron_in_weapon",
[1] = "patron_001",
[2] = "patron_002",
[3] = "patron_003",
[4] = "patron_004",
[5] = "patron_005",
[6] = "patron_006",
[7] = "patron_007",
[8] = "patron_008",
[9] = "patron_009",
[10] = "patron_010",
[11] = "patron_011",
[12] = "patron_012",
[13] = "patron_013",
[14] = "patron_014",
[15] = "patron_015",
[16] = "patron_016",
[17] = "patron_017",
[18] = "patron_018",
[19] = "patron_019",
[20] = "patron_020",
[21] = "patron_021",
[22] = "patron_022",
[23] = "patron_023",
[24] = "patron_024",
[25] = "patron_025"
}
SWEP.SpeedMult = 0.96
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.3
SWEP.IronSightStruct = {
Pos = Vector(-3.6425, 3, 1.7),
Ang = Angle(0, 0.0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 4, 1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(0, 3, 0.6)
SWEP.CrouchAng = Angle(0, 0, 5)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(0, 3, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 30
SWEP.AttachmentElements = {
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-14, 6, -4),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-6, 4, -8.5),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material("vgui/entities/eft_ump/eft_ump_iron.png"),
Slot = {"eft_optic_large", "eft_optic_medium", "eft_optic_small"}, -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
Offset = {
vang = Angle(90, -90, -90),
wang = Angle(-5, 0, 180)
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 180),
SlideAmount = { -- how far this attachment can slide in both directions.
-- overrides Offset
vmin = Vector(0, -4.5, 3),
vmax = Vector(0, -1, 3),
},
},
{
PrintName = "Tactical - Left",
Slot = "eft_tactical",
Bone = "mod_reciever",
Offset = {
vpos = Vector(1, 4, 1), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 90),
},
},
{
PrintName = "Tactical - Right",
Slot = "eft_tactical",
Bone = "mod_reciever",
Offset = {
vpos = Vector(-1.1, 4, 1), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, -90),
},
},
{
PrintName = "Underbarrel",
Slot = "eft_foregrip",
Bone = "mod_reciever",
DefaultAttName = "No Underbarrel",
Offset = {
vpos = Vector(0, 5, 0.1),
vang = Angle(90, -90, -90),
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["idle_inspect"] = {
Source = "inventory_idle"
},
["draw"] = {
Source = "draw",
LHIK = false,
LHIKIn = 0,
LHIKOut = 0.9,
},
["holster"] = {
Source = "holster",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
},
["ready"] = {
Source = "draw_first", "draw_first2",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.8,
SoundTable = {
{
s = "weapons/arccw_eft/ump/mp5_weap_bolt_in_slap.wav",
t = 0.8
}
},
},
["fire"] = {
Source = "fire",
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "fire",
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.4, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_release_button.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_out.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_in.wav",
t = 2
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4, -- In/Out controls how long it takes to switch to regular animation.
LHIKOut = 0.8, -- (not actually inverse kinematics)
LHIKEaseIn = 0.4, -- how long LHIK eases in.
LHIKEaseOut = 0.4, -- if no value is specified then ease = lhikin
Checkpoints = { 0.8, 1.9 },
SoundTable = {
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_release_button.wav",
t = 0.35
},
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_out.wav",
t = 0.4
},
{
s = "weapons/arccw_eft/ump/mp5_weap_mag_in.wav",
t = 2
},
{
s = "weapons/arccw_eft/ump/mp5_weap_bolt_in_slap.wav",
t = 3.1
}
},
},
["0_to_1"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["0_to_2"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["1_to_2"] = {
Source = "firemode_0",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["1_to_0"] = {
Source = "firemode_0",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["2_to_1"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["2_to_0"] = {
Source = "firemode_1",
LHIK = false,
LHIKIn = 0.2,
LHIKOut = 0.2,
},
["enter_inspect"] = {
Source = "inventory_begin",
LHIK = true,
LHIKIn = 1,
LHIKOut = 0,
},
["idle_inspect"] = {
Source = "inventory_idle",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "inventory_end",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
},
}

View File

@@ -0,0 +1,735 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "HK USP .45"
SWEP.TrueName = "HK USP .45"
SWEP.Trivia_Class = "Pistol"
SWEP.Trivia_Desc = "The HK USP (Universelle Selbstladepistole - Universal Self-loading Pistol) pistol is a further replacement of the HK P7 series pistols. Internationally accepted as an accurate and ultra-reliable handgun. Using a modified Browning-type action with a special patented recoil reduction system, the USP recoil reduction system reduces recoil effects on pistol components and also lowers the recoil forces felt by the shooter. This particular variant is chambered in .45 ACP. Manufactured by Heckler & Koch."
SWEP.Trivia_Manufacturer = "Heckler & Koch"
SWEP.Trivia_Calibre = ".45 ACP"
SWEP.Trivia_Mechanism = "Short Recoil"
SWEP.Trivia_Country = "Germany"
SWEP.Trivia_Year = 1989
SWEP.Slot = 1
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arc_eft_usp/c_eft_usp.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/v_pist_m9.mdl"
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 15
SWEP.DamageMin = 15 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 17 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 24
SWEP.PhysBulletMuzzleVelocity = 200
SWEP.TriggerDelay = false
SWEP.ReloadInSights = true
SWEP.ReloadInSights_FOVMult = 1
SWEP.Recoil = 1.0
SWEP.RecoilSide = 0.5
SWEP.RecoilRise = 0.24
SWEP.RecoilPunch = 2.5
SWEP.VisualRecoilMult = 12
SWEP.RecoilPunchBackMax = 15
SWEP.RecoilPunchBackMaxSights = 15 -- may clip with scopes
SWEP.Delay = 60 / 450 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_pistol"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 12 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "pistol" -- what ammo type the gun uses
SWEP.MagID = "USP" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 110 -- pitch of shoot sound
SWEP.ShootSound = "arc_eft_usp/usp_fire_close_alt.wav"
SWEP.ShootSoundSilenced = "arc_eft_usp/usp_fire_surpressed_alt.wav"
SWEP.DistantShootSound = "arc_eft_usp/usp_fire_distant_alt.wav"
SWEP.MuzzleEffect = "muzzleflash_pistol"
SWEP.ShellModel = "models/shells/shell_9mm.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.75
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
SWEP.SpeedMult = 0.98
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.2
SWEP.IronSightStruct = {
Pos = Vector(-3.65, 5, 2.17),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.Jamming = false
SWEP.HeatCapacity = 32
SWEP.HeatDissipation = 1
SWEP.HeatLockout = true -- overheating means you cannot fire until heat has been fully depleted
SWEP.HeatFix = true -- when the "fix" animation is played, all heat is restored.
SWEP.Malfunction = false
SWEP.MalfunctionJam = false -- After a malfunction happens, the gun will dryfire until reload is pressed. If unset, instead plays animation right after.
SWEP.MalfunctionTakeRound = false -- When malfunctioning, a bullet is consumed.
SWEP.MalfunctionWait = 0 -- The amount of time to wait before playing malfunction animation (or can reload)
SWEP.MalfunctionMean = 64 -- The mean number of shots between malfunctions, will be autocalculated if nil
SWEP.MalfunctionVariance = 0.2 -- The fraction of mean for variance. e.g. 0.2 means 20% variance
SWEP.MalfunctionSound = "weapons/arccw/malfunction.wav"
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "pistol"
SWEP.HoldtypeSights = "revolver"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL
SWEP.ActivePos = Vector(0, 2, 1.5)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-1, -1, 1.4)
SWEP.CrouchAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelOffsetCrouch = Vector(0, 0, -2)
SWEP.CustomizePos = Vector(0, 2, 0.5)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelLength = 18
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[1] = {"shellport", "patron_in_weapon"},
[2] = "patron_001",
[3] = "patron_002",
[4] = "patron_003",
[5] = "patron_004",
[6] = "patron_005",
[7] = "patron_006",
[8] = "patron_007",
[9] = "patron_008",
[10] = "patron_009",
[11] = "patron_010",
[12] = "patron_011",
[13] = "patron_012",
}
SWEP.AttachmentElements = {
["hidereceiver"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["showmount"] = {
VMBodygroups = {{ind = 9, bg = 1}},
},
["hidemount"] = {
VMBodygroups = {{ind = 9, bg = 0}},
},
["hidesights"] = {
VMBodygroups = {{ind = 6, bg = 1}},
},
["sightmount"] = {
VMBodygroups = {{ind = 6, bg = 2}},
},
["hidebarrel"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["45_AP"] = {
VMBodygroups = {{ind = 8, bg = 1}},
},
["45_RIP"] = {
VMBodygroups = {{ind = 8, bg = 2}},
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-12.6, 5.5, -7),
ang = Angle(-0, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "None",
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_sights_standard.png"),
Slot = "eft_optic_small", -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
CorrectiveAng = Angle(0, 180, 0),
InstalledEles = {"sightmount"},
GivesFlags = {"opticattached"},
Offset = {
vpos = Vector(0, -2, 0.9),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Iron Sights", -- print name
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_sights_standard.png"),
Slot = "eft_usp_sights", -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
CorrectiveAng = Angle(0, 180, 0),
InstalledEles = {"hidesights"},
ExcludeFlags = {"opticattached"},
Offset = {
vpos = Vector(0, -2.4, 0.75),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Slide", -- print name
DefaultAttName = "Standard Slide",
DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_slide_default.png"),
Slot = "eft_usp_slide", -- what kind of attachments can fit here, can be string or table
Bone = "mod_reciever", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"hidereceiver"},
Offset = {
vpos = Vector(0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Compensator", -- print name
DefaultAttName = "No Compensator",
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_barrel_match.png"),
Slot = "eft_usp_compensator", -- what kind of attachments can fit here, can be string or table
GivesFlags = {"Compensator"},
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 23.7, -0.45),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Barrel", -- print name
DefaultAttName = "Standard Barrel",
DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_barrel_match.png"),
Slot = "eft_usp_barrel", -- what kind of attachments can fit here, can be string or table
Bone = "mod_barrel", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"hidebarrel"},
Offset = {
vpos = Vector(0, 0, -0),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Muzzle", -- print name
DefaultAttName = "No Muzzle Device",
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_barrel_match.png"),
Slot = "eft_muzzle_1911", -- what kind of attachments can fit here, can be string or table
ExcludeFlags = {"Compensator"},
RequireFlags = {"threadedbarrel"},
Bone = "mod_barrel", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 3.7, 0.45),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Tactical", -- print name
DefaultAttName = "No Tactical",
//ExcludeFlags = {"Compensator"},
Slot = {"eft_tactical", "eft_usp_mount"}, -- what kind of attachments can fit here, can be string or table
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
InstalledEles = {"showmount"},
Offset = {
vpos = Vector(0, 23.7, -0.45),
vang = Angle(0, -90, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0),
},
},
{
PrintName = "Caliber",
DefaultAttName = ".45 ACP FMJ",
DefaultAttIcon = Material("vgui/entities/eft_attachments/9x19_Icon.png"),
Slot = "ammo_eft_45"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["draw"] = {
Source = "draw",
Time = 1.2,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_in.wav",
t = 0
}
},
},
["draw_empty"] = {
Source = "draw_empty",
Time = 1.2,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_in.wav",
t = 0
}
},
},
["holster"] = {
Source = "holster",
Time = 1.2,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{
s = "eft_shared/weap_out.wav",
t = 0
}
},
},
["holster_empty"] = {
Source = "holster_empty",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{
s = "eft_shared/weap_out.wav",
t = 0
}
},
},
["ready"] = {
Source = "ready",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{
s = "eft_shared/weap_pistol_use.wav",
t = 0.45
},
{
s = "arc_eft_usp/usp_slider_in.wav",
t = 0.8
}
},
},
["trigger"] = {
Source = "trigger",
Time = 0.1,
},
["fire"] = {
Source = "fire_new",
Time = 0.2,
ShellEjectAt = 0,
SoundTable = {
{
s = "eft_shared/weap_trigger_hammer.wav",
t = 0.05
}
},
},
["fire_iron"] = {
Source = "fire_new",
Time = 0.2,
ShellEjectAt = 0.05,
SoundTable = {
{
s = "eft_shared/weap_trigger_hammer.wav",
t = 0
}
},
},
["fire_iron_empty"] = {
Source = "fire_dry",
Time = 0.0,
ShellEjectAt = 0,
},
["fire_empty"] = {
Source = "fire_dry",
Time = 0.0,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
LastClip1OutTime = 2, -- when should the belt visually replenish on a belt fed
SoundTable = {
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weap_magrelease_button.wav",
t = 0.6
},
{
s = "arc_eft_usp/usp_mag_out.wav",
t = 0.7
},
{
s = "arc_eft_usp/usp_mag_pullout.wav",
t = 0.75
},
{
s = "eft_shared/weap_magin_rig.wav",
t = 1.3
},
{
s = "eft_shared/weap_mag_pullout.wav",
t = 1.9
},
{
s = "arc_eft_usp/usp_mag_pullin.wav",
t = 3
},
{
s = "arc_eft_usp/usp_mag_in.wav",
t = 3.1
}
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 0.4,
LastClip1OutTime = 2, -- when should the belt visually replenish on a belt fed
SoundTable = {
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weap_magrelease_button.wav",
t = 0.6
},
{
s = "arc_eft_usp/usp_mag_out.wav",
t = 0.7
},
{
s = "arc_eft_usp/usp_mag_pullout.wav",
t = 0.75
},
{
s = "eft_shared/weap_magin_rig.wav",
t = 1.3
},
{
s = "eft_shared/weap_mag_pullout.wav",
t = 1.9
},
{
s = "arc_eft_usp/usp_mag_pullin.wav",
t = 3
},
{
s = "arc_eft_usp/usp_mag_in.wav",
t = 3.1
},
{
s = "eft_shared/weap_bolt_catch_button.wav",
t = 4.1
},
{
s = "eft_shared/weap_pistol_use.wav",
t = 4.125
},
{
s = "arc_eft_usp/usp_slider_in.wav",
t = 4.3
}
},
},
["enter_inspect"] = {
Source = "inventory_start",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{
s = "eft_shared/weap_handoff.wav",
t = 0
},
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weapon_generic_pistol_spin3.wav",
t = 0.5
}
},
},
["enter_inspect_empty"] = {
Source = "inventory_start_empty",
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0,
SoundTable = {
{
s = "eft_shared/weap_handoff.wav",
t = 0
},
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weapon_generic_pistol_spin3.wav",
t = 0.5
}
},
},
["idle_inspect"] = {
Source = "inventory",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["idle_inspect_empty"] = {
Source = "inventory_empty",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "inventory_end_alt",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
SoundTable = {
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weapon_generic_pistol_spin3.wav",
t = 0.5
},
{
s = "eft_shared/weap_magrelease_button.wav",
t = 1
},
{
s = "arc_eft_usp/usp_mag_out.wav",
t = 1.2
},
{
s = "arc_eft_usp/usp_mag_pullout.wav",
t = 1.1
},
{
s = "eft_shared/weapon_generic_pistol_spin2.wav",
t = 2
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 2.4
},
{
s = "arc_eft_usp/usp_mag_pullin.wav",
t = 3.45
},
{
s = "arc_eft_usp/usp_mag_in.wav",
t = 3.55
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 3.9
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 4.2
},
{
s = "eft_shared/weap_pistol_use.wav",
t = 5.1
},
{
s = "arc_eft_usp/usp_slider_in.wav",
t = 6
},
{
s = "eft_shared/weapon_generic_pistol_spin2.wav",
t = 6.2
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 6.3
}
},
},
["exit_inspect_empty"] = {
Source = "inventory_end_new_empty",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.3,
SoundTable = {
{
s = "eft_shared/weapon_generic_pistol_spin1.wav",
t = 0.1
},
{
s = "eft_shared/weapon_generic_pistol_spin3.wav",
t = 0.5
},
{
s = "eft_shared/weap_magrelease_button.wav",
t = 1
},
{
s = "arc_eft_usp/usp_mag_out.wav",
t = 1.2
},
{
s = "arc_eft_usp/usp_mag_pullout.wav",
t = 1.1
},
{
s = "eft_shared/weapon_generic_pistol_spin2.wav",
t = 2
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 2.4
},
{
s = "arc_eft_usp/usp_mag_pullin.wav",
t = 3.45
},
{
s = "arc_eft_usp/usp_mag_in.wav",
t = 3.55
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 3.9
},
{
s = "eft_shared/weapon_generic_pistol_spin4.wav",
t = 4.2
}
},
},
["fix"] = {
Source = {"jam_soft"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
SoundTable = {
{
s = "eft_shared/weap_pistol_use.wav",
t = 0.75
},
{
s = "eft_shared/weap_round_out.wav",
t = 0.9
},
{
s = "arc_eft_usp/usp_slider_in.wav",
t = 1.2
}
},
},
["unjam"] = {
Source = {"jam_feed", "jam_shell"},
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
SoundTable = {
{
s = "eft_shared/weap_round_out.wav",
t = 2.3
},
{
s = "arc_eft_usp/usp_slider_in.wav",
t = 2.6
}
},
},
}

View File

@@ -0,0 +1,305 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Special Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Volk-ed PKP"
SWEP.Trivia_Class = "Energy Machine Gun"
SWEP.Trivia_Desc = "Belt-fed fully automatic energy weapon. Can not penetrate. Damage increase over long distance"
SWEP.Trivia_Manufacturer = "Some guy with a volk and pkp"
SWEP.Trivia_Calibre = "Energy Cells"
SWEP.Trivia_Mechanism = "Magic"
SWEP.Trivia_Country = "The Motherland"
SWEP.Trivia_Year = 2077
SWEP.CrouchPos = Vector(-1, 3, -0.5)
SWEP.CrouchAng = Angle(0, 0, -15)
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw/fml/c_volked_pkp.mdl"
SWEP.WorldModel = "models/weapons/arccw/fml/w_volked_pkp.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "00000000"
SWEP.DefaultWMBodygroups = "00000000"
SWEP.Damage = 15
SWEP.DamageMin = 15
SWEP.Range = 500 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 900 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 100 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 120
SWEP.ReducedClipSize = 60
SWEP.Recoil = 0.4
SWEP.RecoilSide = 0.15
SWEP.RecoilRise = 0.75
SWEP.Delay = 60 / 700 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 0
}
}
SWEP.CustomizePos = Vector(10, 2, -3)
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 80
SWEP.AccuracyMOA = 3.5 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 700 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 220
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "m200b" -- the magazine pool this gun draws from
SWEP.ShootVol = 70 -- volume of shoot sound
SWEP.ShootPitch = 120 -- pitch of shoot sound
SWEP.ShootSound = "weapons/fml_pkp_volk/fire.wav"
SWEP.ShootSoundSilenced = "weapons/fml_pkp_volk/ak74_suppressed_fp.wav"
SWEP.DistantShootSound = "weapons/arccw/negev/negev-1-distant.wav"
SWEP.MuzzleEffect = "muzzleflash_smg"
SWEP.ShellModel = "models/weapons/arccw/fml/shell_volked_pkp.mdl"
SWEP.ShellPitch = 95
SWEP.ShellScale = 1.5
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.65
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.475
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
[6] = "Weapon_Bullet0",
[5] = "Weapon_Bullet",
[4] = "Weapon_Bullet2",
[3] = "Weapon_Bullet3",
[2] = "Weapon_Bullet4",
[1] = "Weapon_Bullet5",
}
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-2.523, -3, 0.469),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.MeleeTime = 0.5
SWEP.MeleeAttackTime = 0.1
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 5, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(8, -2, -4.011)
SWEP.HolsterAng = Angle(1.898, 54.613, -10.113)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 32
SWEP.AttachmentElements = {
["bkrail"] = {
VMElements = {
{
Model = "models/weapons/arccw/atts/backup_rail.mdl",
Bone = "Weapon_Main",
Offset = {
pos = Vector(0, -3.8, 12),
ang = Angle(180, 90, 180),
},
},
}
},
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic"}, -- what kind of attachments can fit here, can be string or table
Bone = "Weapon_Lid", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, -0.5, -1.5), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(7, 0.9, -6),
wang = Angle(-9.738, -1, 180)
},
InstalledEles = {"nors"},
CorrectiveAng = Angle(0, 0, 0),
ExtraSightDist = 3
},
{
PrintName = "Backup Optic", -- print name
Slot = {"optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "Weapon_Main", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-0.6, -4.2, 12), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -45),
wpos = Vector(3, 0.832, -2),
wang = Angle(-10.393, 0, 180)
},
InstalledEles = {"bkrail"},
KeepBaseIrons = true,
ExtraSightDist = 12
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "Weapon_Main",
Offset = {
vpos = Vector(0, -2, 22),
vang = Angle(90, 0, -90),
wpos = Vector(25, 0.825, -7.5),
wang = Angle(-9.738, -1, 180)
},
},
{
PrintName = "Underbarrel",
Slot = {"foregrip", "ubgl", "bipod"},
Bone = "Weapon_Main",
Offset = {
vpos = Vector(0, -1, 14.738),
vang = Angle(90, 0, -90),
wpos = Vector(14.329, 0.602, -4.453),
wang = Angle(-10.216, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Weapon_Main",
Offset = {
vpos = Vector(-0.5, 0, 22), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(17, 2, -7),
wang = Angle(-10.393, 0, -90)
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
DefaultAttName = "None",
Slot = {"charm", "fml_charm"},
Bone = "Weapon_Main",
Offset = {
vpos = Vector(1, -2, 4),
vang = Angle(90, 0, -90),
wpos = Vector(8, 1, -3),
wang = Angle(-9, 0, 180)
},
FreeSlot = true,
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 0.35,
SoundTable = {{s = "weapons/arccw/m249/m249_draw.wav", t = 0}},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "deploy",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = "fire",
Time = 0.5,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "iron",
Time = 0.5,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LastClip1OutTime = 95/60,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LastClip1OutTime = 95/60,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.5,
},
["bash"] = {
Source = {"melee"},
Time = 30/60,
},
}

View File

@@ -0,0 +1,320 @@
--[[
| 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/
--]]
-- Model adapted from this: https://steamcommunity.com/sharedfiles/filedetails/?id=646754302
-- Thanks!
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Special Weaponry" -- edit this if you like
SWEP.AdminOnly = false
SWEP.AutoIconAngle = Angle(90, 0, 0)
SWEP.PrintName = "M2014 Gauss Rifle"
SWEP.Trivia_Class = "Antimateriel Rifle"
SWEP.Trivia_Desc = "Advanced anti-materiel rifle developed following controversial tests at the 2020 Lingshan Incident. Its lethality is comparable to .50 BMG rounds, but has more power and less recoil."
SWEP.Trivia_Manufacturer = "CryNet Armories"
SWEP.Trivia_Calibre = "10mm Slug"
SWEP.Trivia_Mechanism = "Magnetic Acceleration"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 2025
SWEP.Slot = 4
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw/c_gauss_rifle.mdl"
SWEP.WorldModel = "models/weapons/arccw/w_gauss_rifle.mdl"
SWEP.ViewModelFOV = 60
SWEP.Damage = 200
SWEP.DamageMin = 100 -- damage done at maximum range
SWEP.RangeMin = 50
SWEP.Range = 200 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 12000 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.Tracer = "ToolTracer"
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 4 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 8
SWEP.ReducedClipSize = 2
SWEP.Recoil = 4.5
SWEP.RecoilSide = 2
SWEP.MaxRecoilBlowback = 0.7
SWEP.Delay = 60 / 50 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = {"weapon_crossbow"}
SWEP.NPCWeight = 10
SWEP.AccuracyMOA = 1 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 900 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "SniperPenetratedRound" -- what ammo type the gun uses
SWEP.MagID = "gauss_rifle" -- the magazine pool this gun draws from
SWEP.ShootVol = 135 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/arccw/gauss_rifle/gauss-1.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_01.wav"
SWEP.DistantShootSound = nil --"weapons/arccw/bfg/bfg_fire_distant.wav"
SWEP.MuzzleEffect = nil
SWEP.ShellModel = "models/shells/shell_338mag.mdl"
SWEP.ShellPitch = 60
SWEP.ShellScale = 2
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SightTime = 0.45
SWEP.SpeedMult = 0.85
SWEP.SightedSpeedMult = 0.5
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-1.841, 0, 0.879),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_RPG
SWEP.ActivePos = Vector(1, 4, 0.5)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CustomizePos = Vector(7, 6, -2)
SWEP.HolsterPos = Vector(6, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 55
SWEP.AttachmentElements = {
["extendedmag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"optic", "optic_sniper", "optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "body", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-5, -4.5, 0), -- offset that the attachment will be relative to the bone
vang = Angle(180, 0, -90),
wpos = Vector(10, 1, -8),
wang = Angle(-5, 0, 180)
},
VMScale = Vector(1, 1, 1), --Vector(0.75, 0.75, 0.75),
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 0, 0),
Installed = "optic_gauss_scope",
ExtraSightDist = 5,
},
{
PrintName = "Capacitor",
DefaultAttName = "Standard Capacitors",
Slot = "gauss_rifle_capacitor",
},
{
PrintName = "Underbarrel",
Slot = {"foregrip", "bipod"},
Bone = "body",
Offset = {
vpos = Vector(-14, -1, 0),
vang = Angle(180, 0, -90),
wpos = Vector(18, 1, -4),
wang = Angle(-5, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "body",
Offset = {
vpos = Vector(-20, -1.2, 0),
vang = Angle(180, 0, -90),
wpos = Vector(28, 1, -5),
wang = Angle(-5, 0, 180)
},
ExtraSightDist = 15
},
{
PrintName = "Munitions",
DefaultAttName = "Iron Slugs",
Slot = "gauss_rifle_bullet"
},
{
PrintName = "Perk",
Slot = {"perk", "go_perk"}
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "body", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(-5, -1.5, 0.7), -- offset that the attachment will be relative to the bone
vang = Angle(180, 0, -90),
wpos = Vector(10, 2, -4),
wang = Angle(-5, 0, 180)
},
},
}
SWEP.Hook_PreDoEffects = function(wep, fx)
return true
end
SWEP.Hook_SelectFireAnimation = function(wep, anim)
local cap = wep.Attachments[2].Installed
if anim and cap == "gauss_rifle_capacitor" then
return anim .. "_turbo"
end
end
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 4
},
["draw"] = {
Source = "draw",
Time = 1.5,
LHIK = false
},
["fire"] = {
Source = "shoot",
Time = 1.2,
},
["fire_turbo"] = {
Source = "shoot_turbo",
Time = 1.2,
},
["fire_iron"] = {
Source = "shoot_iron",
Time = 1.2,
},
["fire_iron_turbo"] = {
Source = "shoot_iron",
Time = 1.2 / 1.5,
},
["reload"] = {
Source = "reload",
Time = 5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {25, 50, 70, 100, 115},
FrameRate = 37,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 1,
},
}
sound.Add({
name = "ArcCW_Gauss_Rifle.Draw",
channel = CHAN_WEAPON,
volume = 1.0,
sound = "weapons/arccw/gauss_rifle/draw.wav"
})
sound.Add({
name = "ArcCW_Gauss_Rifle.Boltback",
channel = CHAN_WEAPON,
volume = 1.0,
sound = "weapons/arccw/gauss_rifle/boltback.wav"
})
sound.Add({
name = "ArcCW_Gauss_Rifle.Boltforward",
channel = CHAN_WEAPON,
volume = 1.0,
sound = "weapons/arccw/gauss_rifle/boltforward.wav"
})
sound.Add({
name = "ArcCW_Gauss_Rifle.Clipout",
channel = CHAN_WEAPON,
volume = 1.0,
sound = "weapons/arccw/gauss_rifle/clipout.wav"
})
sound.Add({
name = "ArcCW_Gauss_Rifle.Clipin",
channel = CHAN_WEAPON,
volume = 1.0,
sound = "weapons/arccw/gauss_rifle/clipin.wav"
})
if engine.ActiveGamemode() == "terrortown" then
SWEP.Kind = WEAPON_EQUIP1
SWEP.Slot = 6
SWEP.CanBuy = { ROLE_TRAITOR }
SWEP.LimitedStock = true
SWEP.AutoSpawnable = false
SWEP.EquipMenuData = {
type = "Weapon",
desc = "Extremely powerful futuristic antimaterial rifle.\nHas unique and noticable tracers.\nCapacitor and munition attachments are free."
}
SWEP.Icon = "arccw/ttticons/arccw_m107.png"
end
local cvar = CreateConVar("arccw_gauss_rifle_op", "0", FCVAR_REPLICATED + FCVAR_ARCHIVE, "Enable to make the Gauss Rifle very overpowered. Set to 2 to also make it admin only.", 0, 2)
if cvar:GetInt() > 0 then
SWEP.AdminOnly = (cvar:GetInt() > 1)
SWEP.Recoil = 2.5
SWEP.RecoilSide = 1
SWEP.HipDispersion = 300
SWEP.MoveDispersion = 150
SWEP.SpeedMult = 0.9
SWEP.SightedSpeedMult = 0.6
SWEP.SightTime = 0.3
end

View File

@@ -0,0 +1,86 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base_nade"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "ArcCW - GSO (Gear)" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "M84 Stun"
SWEP.Trivia_Class = "Hand Grenade"
SWEP.Trivia_Desc = "The M84 is the currently-issued stun grenade (\"flashbang\") of the United States Armed Forces and SWAT teams throughout the United States. Upon detonation, it emits an intensely loud \"bang\" of 170180 decibels and a blinding flash of more than one million candela within five feet of initiation, sufficient to cause immediate flash blindness, deafness, tinnitus, and inner ear disturbance. Exposed personnel experience disorientation, confusion and loss of coordination and balance. While these effects are all intended to be temporary, there is risk of permanent injury. Consequently, the M84 is classified as a less-lethal weapon."
SWEP.Trivia_Manufacturer = "Picatinny Arsenal"
SWEP.Trivia_Calibre = "N/A"
SWEP.Trivia_Mechanism = "Magnesium/Ammonium Nitrate Mix"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1995
SWEP.Slot = 4
SWEP.NotForNPCs = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw_go/v_eq_flashbang.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/w_eq_flashbang_thrown.mdl"
SWEP.ViewModelFOV = 60
SWEP.WorldModelOffset = {
pos = Vector(3, 2, -1),
ang = Angle(-10, 0, 180)
}
SWEP.FuseTime = 2.5
SWEP.Throwing = true
SWEP.Primary.ClipSize = 1
SWEP.MuzzleVelocity = 1000
SWEP.ShootEntity = "arccw_thr_go_flash"
SWEP.TTTWeaponType = "weapon_ttt_confgrenade"
SWEP.NPCWeaponType = "weapon_grenade"
SWEP.NPCWeight = 50
SWEP.PullPinTime = 0.5
SWEP.Animations = {
["draw"] = {
Source = "deploy",
},
["pre_throw"] = {
Source = "pullpin",
},
["throw"] = {
Source = "throw",
TPAnim = ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE,
SoundTable = {
{
s = "arccw_go/hegrenade/grenade_throw.wav",
t = 0
}
}
}
}
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade_Start",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull_start.wav"
})
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull.wav"
})

View File

@@ -0,0 +1,86 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base_nade"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "ArcCW - GSO (Gear)" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "M67 Frag"
SWEP.Trivia_Class = "Hand Grenade"
SWEP.Trivia_Desc = "High explosive fragmentation hand grenade. Can be cooked."
SWEP.Trivia_Manufacturer = "Day & Zimmermann"
SWEP.Trivia_Calibre = "N/A"
SWEP.Trivia_Mechanism = "Composition B"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1968
SWEP.Slot = 4
SWEP.NotForNPCs = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw_go/v_eq_fraggrenade.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/w_eq_fraggrenade_thrown.mdl"
SWEP.ViewModelFOV = 60
SWEP.WorldModelOffset = {
pos = Vector(3, 2, -1),
ang = Angle(-10, 0, 180)
}
SWEP.FuseTime = 3.5
SWEP.Throwing = true
SWEP.Primary.ClipSize = 1
SWEP.MuzzleVelocity = 1000
SWEP.ShootEntity = "arccw_thr_go_frag"
SWEP.TTTWeaponType = "weapon_ttt_confgrenade"
SWEP.NPCWeaponType = "weapon_grenade"
SWEP.NPCWeight = 50
SWEP.PullPinTime = 0.5
SWEP.Animations = {
["draw"] = {
Source = "deploy",
},
["pre_throw"] = {
Source = "pullpin",
},
["throw"] = {
Source = "throw",
TPAnim = ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE,
SoundTable = {
{
s = "arccw_go/hegrenade/grenade_throw.wav",
t = 0
}
}
}
}
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade_Start",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull_start.wav"
})
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull.wav"
})

View File

@@ -0,0 +1,86 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base_nade"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "ArcCW - GSO (Gear)" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "AN/M14 Thermite"
SWEP.Trivia_Class = "Hand Grenade"
SWEP.Trivia_Desc = "A grenade that produces extremely hot molten iron via a burning thermite reaction. It is mainly intended to be used to destroy material rather than as a weapon."
SWEP.Trivia_Manufacturer = "Day & Zimmermann"
SWEP.Trivia_Calibre = "N/A"
SWEP.Trivia_Mechanism = "Thermite TH3"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1944
SWEP.Slot = 4
SWEP.NotForNPCs = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw_go/v_eq_incendiarygrenade.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/w_eq_incendiarygrenade_thrown.mdl"
SWEP.ViewModelFOV = 60
SWEP.WorldModelOffset = {
pos = Vector(3, 2, -1),
ang = Angle(-10, 0, 180)
}
SWEP.FuseTime = 5
SWEP.Throwing = true
SWEP.Primary.ClipSize = 1
SWEP.MuzzleVelocity = 1000
SWEP.ShootEntity = "arccw_thr_go_incendiary"
SWEP.TTTWeaponType = "weapon_zm_molotov"
SWEP.NPCWeaponType = "weapon_grenade"
SWEP.NPCWeight = 50
SWEP.PullPinTime = 0.5
SWEP.Animations = {
["draw"] = {
Source = "deploy",
},
["pre_throw"] = {
Source = "pullpin",
},
["throw"] = {
Source = "throw",
TPAnim = ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE,
SoundTable = {
{
s = "arccw_go/hegrenade/grenade_throw.wav",
t = 0
}
}
}
}
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade_Start",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull_start.wav"
})
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull.wav"
})

View File

@@ -0,0 +1,91 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base_nade"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "ArcCW - GSO (Gear)" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Molotov Cocktail"
SWEP.Trivia_Class = "Hand Grenade"
SWEP.Trivia_Desc = "Improvised hand grenade created with a bottle of fuel and a rag, lit on fire and thrown. The Molotov Cocktail earned its name from Soviet foreign minister Vyacheslav Molotov, who claimed that Soviet bombing raids were humanitarian aid packages. Sarcastically, the Finns dubbed the bombs 'Molotov's Breadbaskets', and when they developed the fuel bomb to fight Soviet tanks, named them 'Molotov's Cocktails', to go with his food parcels."
SWEP.Trivia_Manufacturer = "The People"
SWEP.Trivia_Calibre = "N/A"
SWEP.Trivia_Mechanism = "Gasoline + Dish Soap"
SWEP.Trivia_Country = "Finland"
SWEP.Trivia_Year = 1939
SWEP.Slot = 4
SWEP.NotForNPCs = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw_go/v_eq_molotov.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/w_eq_molotov_thrown.mdl"
SWEP.ViewModelFOV = 60
SWEP.WorldModelOffset = {
pos = Vector(3, 2, -1),
ang = Angle(-10, 0, 180)
}
SWEP.ProceduralViewBobIntensity = 0
SWEP.FuseTime = false
SWEP.FuseTime = false
SWEP.Throwing = true
SWEP.Primary.ClipSize = 1
SWEP.MuzzleVelocity = 1000
SWEP.ShootEntity = "arccw_thr_go_molotov"
SWEP.TTTWeaponType = "weapon_zm_molotov"
SWEP.NPCWeaponType = "weapon_grenade"
SWEP.NPCWeight = 50
SWEP.PullPinTime = 1
SWEP.Animations = {
["draw"] = {
Source = "deploy",
},
["pre_throw"] = {
Source = "pullpin",
SoundTable = {
{
t = 0,
s = "arccw_go/molotov/fire_idle_loop_1.wav",
c = CHAN_WEAPON
}
}
},
["throw"] = {
Source = "throw",
TPAnim = ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE,
SoundTable = {
{
t = 0,
s = "arccw_go/molotov/grenade_throw.wav",
c = CHAN_WEAPON
}
}
}
}
sound.Add({
name = "ARCCW_GO_MOLOTOV.Draw",
channel = 16,
volume = 1.0,
sound = "arccw_go/molotov/molotov_draw.wav"
})

View File

@@ -0,0 +1,86 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base_nade"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "ArcCW - GSO (Gear)" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Model 5210 Smoke"
SWEP.Trivia_Class = "Hand Grenade"
SWEP.Trivia_Desc = "A smoke grenade that produces a white smoke cloud for concealment. Smoke clouds last for around 15 seconds."
SWEP.Trivia_Manufacturer = "Combined Systems INC"
SWEP.Trivia_Calibre = "N/A"
SWEP.Trivia_Mechanism = "Pyrotechnic delay fuze"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1997
SWEP.Slot = 4
SWEP.NotForNPCs = true
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw_go/v_eq_smokegrenade.mdl"
SWEP.WorldModel = "models/weapons/arccw_go/w_eq_smokegrenade_thrown.mdl"
SWEP.ViewModelFOV = 60
SWEP.WorldModelOffset = {
pos = Vector(3, 2, -1),
ang = Angle(-10, 0, 180)
}
SWEP.FuseTime = 3.5
SWEP.Throwing = true
SWEP.Primary.ClipSize = 1
SWEP.MuzzleVelocity = 1000
SWEP.ShootEntity = "arccw_thr_go_smoke"
SWEP.TTTWeaponType = "weapon_ttt_smokegrenade"
SWEP.NPCWeaponType = "weapon_grenade"
SWEP.NPCWeight = 50
SWEP.PullPinTime = 0.5
SWEP.Animations = {
["draw"] = {
Source = "deploy",
},
["pre_throw"] = {
Source = "pullpin",
},
["throw"] = {
Source = "throw",
TPAnim = ACT_HL2MP_GESTURE_RANGE_ATTACK_GRENADE,
SoundTable = {
{
s = "arccw_go/hegrenade/grenade_throw.wav",
t = 0
}
}
}
}
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade_Start",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull_start.wav"
})
sound.Add({
name = "ARCCW_GO_GRENADE.PullPin_Grenade",
channel = 16,
volume = 1.0,
sound = "arccw_go/hegrenade/pinpull.wav"
})

View File

@@ -0,0 +1,279 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Heavy Shotgun"
SWEP.TrueName = "Heavy Shotgun"
SWEP.Trivia_Class = "Semi-Auto"
SWEP.Trivia_Desc = "The Heavy Shotgun does a great job at destroying targets at close range. When it comes to certain situations"
SWEP.Trivia_Manufacturer = "Overwatch"
SWEP.Trivia_Calibre = "6 Gauge"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Bulgaria"
SWEP.Trivia_Year = 2015
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Overwatch"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_heavyshotgun.mdl"
SWEP.WorldModel = "models/weapons/w_heavyshotgun.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "0000000"
SWEP.Damage = 11
SWEP.DamageMin = 11 -- damage done at maximum range
SWEP.Range = 90 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 150 -- projectile or phys bullet muzzle velocity
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 6
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 12 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 20
SWEP.ReducedClipSize = 5
SWEP.Recoil = 2.5
SWEP.RecoilSide = 0.5
SWEP.RecoilRise = 1
SWEP.Delay = 60 / 90 -- 60 / RPM.
SWEP.Num = 8 -- number of shots per trigger pull.
SWEP.RunawayBurst = false
SWEP.Firemodes = {
{
Mode = 1
},
{
Mode = 0
}
}
SWEP.NotForNPCS = true
SWEP.NPCWeaponType = {"weapon_shotgun"}
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 45 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 250 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 500
SWEP.ShootWhileSprint = false
SWEP.Primary.Ammo = "buckshot" -- what ammo type the gun uses
SWEP.MagID = "HShotgun" -- the magazine pool this gun draws from
SWEP.ShootVol = 200 -- volume of shoot sound
SWEP.ShootPitch = 90 -- pitch of shoot sound
SWEP.ShootSound = "shotgun_dbl_fire.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_silencer_01.wav"
SWEP.DistantShootSound = "weapons/arccw/ak47/ak47-1-distant.wav"
SWEP.MuzzleEffect = "muzzleflash_minimi"
SWEP.ShellModel = ""
SWEP.ShellScale = 0
SWEP.ShellMaterial = ""
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.75
SWEP.SightedSpeedMult = 0.6
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-4, -4, 0),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.WorldModelOffset = {
pos = Vector(7, 1, -2),
ang = Angle(0, 90, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.BarrelLength = 20
SWEP.AttachmentElements = {
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Choke",
DefaultAttName = "Standard Choke",
Slot = "choke",
},
{
PrintName = "Ammo Type",
Slot = "ammo_shotgun",
},
{
PrintName = "Perk",
Slot = "perk"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["holster"] = {
Source = "holster",
Time = 0.4,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "idle",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = "fire1",
Time = 0.5,
},
["fire_iron"] = {
Source = "fire1",
Time = 0.5,
},
["reload"] = {
Source = "reload",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reload",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 30,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
}
local soundData = {
name = "Weapon_Swing" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "draw_minigun_heavy.wav"
}
sound.Add(soundData)
local soundData = {
name = "Weapon_Swing2" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "draw_default.wav"
}
sound.Add(soundData)
local soundData = {
name = "Magazine.Out" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "sniper_military_slideback_1.wav"
}
sound.Add(soundData)
local soundData = {
name = "Magazine.In" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "sniper_military_slideforward_1.wav"
}
sound.Add(soundData)
local soundData = {
name = "Cock" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "shotgun_cock.wav"
}
sound.Add(soundData)

View File

@@ -0,0 +1,289 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "OICW"
SWEP.TrueName = "Overwatch Tactical Issue"
-- Technically you can omit all trivia info, but that's not fun! Do a bit of research and write some stuff in!
SWEP.Trivia_Class = "Assault Rifle"
SWEP.Trivia_Desc = "Fast firing battle rifle designed to replace the human MP7 in the Combine's arsenal, with an ever faster 5-round burst mode. Good for runnin' and gunnin'."
SWEP.Trivia_Manufacturer = "The Combine"
SWEP.Trivia_Calibre = "Light Pulse Capsule"
SWEP.Trivia_Mechanism = "Dark Energy Cyclotron"
SWEP.Trivia_Country = "Universal Union - Earth Overwatch"
SWEP.Trivia_Year = "Occupation Period 1, 201x"
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "The Combine"
end
SWEP.UseHands = false
SWEP.ViewModel = "models/weapons/oicw/v_oicw.mdl"
SWEP.WorldModel = "models/weapons/oicw/w_oicw.mdl"
SWEP.ViewModelFOV = 54
SWEP.Damage = 12
SWEP.DamageMin = 12
SWEP.Range = 350 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 600 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 45 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 60
SWEP.ReducedClipSize = 30
SWEP.Recoil = 0.53
SWEP.RecoilSide = 0.3
SWEP.RecoilRise = 0.1
SWEP.Delay = 60 / 600 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = -5,
Mult_RPM = 2,
RunawayBurst = true,
PostBurstDelay = 0.25
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 150
SWEP.AccuracyMOA = 12 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 450 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "oicw2" -- the magazine pool this gun draws from
SWEP.ShootVol = 115 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/oicw/smg1_fire1.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_silencer_01.wav"
SWEP.DistantShootSound = "weapons/oicw/smg1_fire1.wav"
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellModel = nil
SWEP.ShellScale = 0
SWEP.ShellMaterial = nil
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 1
SWEP.SightedSpeedMult = 0.7
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-10, 0, 0),
Ang = Angle(-30, 0 ,0),
Magnification = 2,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = true
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-2, -6, 0)
SWEP.ActiveAng = Angle(2, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, 0)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
["optic"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{indc = 1, bg = 1}},
},
["optic_lp"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{ind = 1, bg = 1}},
},
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Integral Sight (2x)",
Slot = {"optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "Bip01 R Hand", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(10.438, -1.599, 11.939), -- offset that the attachment will be relative to the bone
vang = Angle(0, 0, 0),
wpos = Vector(6.099, 0.699, -6.301),
wang = Angle(171.817, 180-1.17, 0),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(2, 0, 0),
},
{
PrintName = "Underbarrel",
Slot = {"ubgl"},
Bone = "Bip01 R Hand",
Offset = {
vpos = Vector(21.67, -2.573, 3.747),
vang = Angle(0, 0, 0),
wpos = Vector(17, 0.6, -4.676),
wang = Angle(-10, 0, 180)
},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "Bip01 R Hand",
Offset = {
vpos = Vector(31.375, -2.731, 7.867),
vang = Angle(-1.7, 0, 0),
wpos = Vector(26.648, 0.782, -8.042),
wang = Angle(-9.79, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Bip01 R Hand",
Offset = {
vpos = Vector(19.806, -4.776, 8.824), -- offset that the attachment will be relative to the bone
vang = Angle(-2, 0, -90),
wpos = Vector(15.625, -0.1, -6.298),
wang = Angle(-8.829, -0.556, 90)
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Stock",
Slot = "stock",
DefaultAttName = "Standard Stock"
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "Bip01 R Hand", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(12.66, -3.62, 9.439), -- offset that the attachment will be relative to the bone
vang = Angle(0, 0, 0),
wpos = Vector(6.099, 1.1, -3.301),
wang = Angle(171.817, 180-1.17, 0),
},
},
}
SWEP.Animations = {
["idle"] = false,
["draw"] = {
Source = "AR2_draw",
Time = 0.4,
SoundTable = {{s = "weapons/arccw/ak47/ak47_draw.wav", t = 0}},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"AR2_primary_fire3", "AR2_primary_fire4"},
Time = 0.5,
},
["fire_iron"] = {
Source = "AR2_primary_dry",
Time = 0.5,
},
["reload"] = {
Source = "AR2_reload",
Time = 2.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/oicw/smg1_reload.wav", t = 0}},
},
["reload_empty"] = {
Source = "AR2_reload",
Time = 2.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
SoundTable = {{s = "weapons/oicw/smg1_reload.wav", t = 0}},
},
}

View File

@@ -0,0 +1,231 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Ordinal Rifle"
SWEP.TrueName = "Ordinal Rifle"
SWEP.Trivia_Class = "Assault Carbine"
SWEP.Trivia_Desc = "It does the shoot"
SWEP.Trivia_Manufacturer = "Overwatch"
SWEP.Trivia_Calibre = "Energy things"
SWEP.Trivia_Mechanism = "Plasma Pulse"
SWEP.Trivia_Country = "Bulgaria"
SWEP.Trivia_Year = 2015
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_ordinalriflearccw.mdl"
SWEP.WorldModel = "models/weapons/c_ordinalriflearccw.mdl"
SWEP.ViewModelFOV = 60
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-10, 4.2, -6),
ang = Angle(-10, 0, 180)
}
SWEP.DefaultBodygroups = "00000000000"
SWEP.Damage = 19
SWEP.DamageMin = 19
SWEP.Range = 250 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1050 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 45
SWEP.ReducedClipSize = 10
SWEP.PhysBulletMuzzleVelocity = 700
SWEP.Recoil = 0.3
SWEP.RecoilSide = 0.670
SWEP.RecoilRise = 0.1
SWEP.Delay = 60 / 525 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 5 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 100 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 175
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "ar2" -- the magazine pool this gun draws from
SWEP.ShootVol = 60 -- volume of shoot sound
SWEP.ShootPitch = 140 -- pitch of shoot sound
SWEP.ShootSound = "weapons/ar2/fire1.wav"
SWEP.ShootSoundSilenced = "weapons/ar2/fire1.wav"
SWEP.DistantShootSound = "weapons/ar2/fire1.wav"
SWEP.MuzzleEffect = "muzzleflash_minimi"
SWEP.ShellModel = ""
SWEP.ShellScale = 0
SWEP.ShellMaterial = ""
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 1
SWEP.SightedSpeedMult = 1
SWEP.SightTime = 0.2
SWEP.IronSightStruct = {
Pos = Vector(-3.2, -1, 0.3),
Ang = Angle(0, 0, -30),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = true
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(2,2,-0.6)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(0, -3, 1)
SWEP.CrouchAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.BarrelLength = 24
SWEP.AttachmentElements = {
}
SWEP.ExtraSightDist = 10
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = "optic_lp",
Bone = "pulserifle",
DefaultAttName = "Iron Sights",
Offset = {
vpos = Vector(-0, -5, 4.25),
vang = Angle(0, 90, 0),
},
VMScale = Vector(1.15, 1.15, 1.15),
CorrectivePos = Vector(0, -10, 0),
CorrectiveAng = Angle(0, 0, 0),
},
{
PrintName = "Underbarrel",
Slot = "foregrip",
Bone = "pulserifle",
Offset = {
vpos = Vector(0, 10, -1.1),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "pulserifle",
Offset = {
vpos = Vector(-0, 12, 1.2),
vang = Angle(0, -90, 0),
},
},
{
PrintName = "Hammer",
Slot = "ar2_hammer",
DefaultAttName = "Standard Pulse-Action",
},
{
PrintName = "Plug Type",
Slot = "ar2_ammo",
DefaultAttName = "Standard Plug"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "pulserifle", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.5, -1, 4), -- offset that the attachment will be relative to the bone
vang = Angle(0, -90, 0),
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = {"fire1","fire2"},
Time = 0.5,
},
["fire_iron"] = {
Source = "fire3",
Time = 0.5,
},
["enter_sights"] = {
Source = "idle",
Time = 0,
},
["idle_sights"] = {
Source = "idle",
Time = 0,
},
["exit_sights"] = {
Source = "idle",
Time = 0,
},
["enter_inspect"] = {
Source = "inspect",
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
},
}

View File

@@ -0,0 +1,308 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Suppressor LMG"
SWEP.TrueName = "Suppressor LMG"
SWEP.Trivia_Class = "Light Machine Gun"
SWEP.Trivia_Desc = "The Combine Suppressor uses this weapon effectively when it comes to his job title. it can deal massive damage due to it's fast firerate. However it's barrel overheating will cause it to have poor accuracy. Thus, this weapon is most effective in CQC."
SWEP.Trivia_Manufacturer = "Overwatch"
SWEP.Trivia_Calibre = "Big Ass Bullet"
SWEP.Trivia_Mechanism = "Plasma Pulse Shit"
SWEP.Trivia_Country = "Bulgaria"
SWEP.Trivia_Year = 2015
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Suppressor LMG"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_suppressor.mdl"
SWEP.WorldModel = "models/weapons/w_suppressor.mdl"
SWEP.ViewModelFOV = 55
SWEP.DefaultBodygroups = "0000000"
SWEP.Damage = 10
SWEP.DamageMin = 10 -- damage done at maximum range
SWEP.Range = 120 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_AIRBOAT
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1800 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 6
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 150 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 200
SWEP.ReducedClipSize = 75
SWEP.Recoil = 0.8
SWEP.RecoilSide = 0.75
SWEP.RecoilRise = 1
SWEP.Delay = 60 / 700 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2
},
{
Mode = 0
}
}
SWEP.NotForNPCS = true
SWEP.NPCWeaponType = {"weapon_shotgun"}
SWEP.NPCWeight = 50
SWEP.AccuracyMOA = 50 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 300 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.ShootWhileSprint = false
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "Pulse LMG" -- the magazine pool this gun draws from
SWEP.ShootVol = 120 -- volume of shoot sound
SWEP.ShootPitch = 90 -- pitch of shoot sound
SWEP.ShootSound = "fire2.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_silencer_01.wav"
SWEP.DistantShootSound = "weapons/arccw/ak47/ak47-1-distant.wav"
SWEP.MuzzleEffect = "muzzleflash_minimi"
SWEP.ShellModel = ""
SWEP.ShellScale = 0
SWEP.ShellMaterial = ""
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.75
SWEP.SightedSpeedMult = 0.6
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-4, -4, 0),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 3, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 34
SWEP.AttachmentElements = {
["extendedmag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{ind = 1, bg = 1}},
},
["reducedmag"] = {
VMBodygroups = {{ind = 1, bg = 2}},
WMBodygroups = {{ind = 1, bg = 2}},
},
["nors"] = {
VMBodygroups = {
{ind = 2, bg = 1},
{ind = 3, bg = 1},
},
},
["nobrake"] = {
VMBodygroups = {
{ind = 6, bg = 1},
},
},
["pwraith"] = {
VMBodygroups = {},
WMBodygroups = {},
TrueNameChange = "Suppressor LMG",
NameChange = "Hell's Wraith"
},
["mount"] = {
VMElements = {
},
}
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "suppressor",
Offset = {
vpos = Vector(-1.5, -20, 0),
vang = Angle(0, 80, 90),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0)
},
},
{
PrintName = "Underbarrel",
Slot = {"ubgl", "bipod"},
Bone = "suppressor",
Offset = {
vpos = Vector(-4, -10, 1),
vang = Angle(0, 80, 90),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0)
},
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["holster"] = {
Source = "holster",
Time = 0.4,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "idle",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"fire"},
Time = 0.5,
},
["fire_iron"] = {
Source = "fire",
Time = 0.5,
},
["reload"] = {
Source = "reload",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reload",
Time = 4,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
}
local soundData = {
name = "Weapon_Swing" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "draw_minigun_heavy.wav"
}
sound.Add(soundData)
local soundData = {
name = "Weapon_Swing2" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "draw_default.wav"
}
sound.Add(soundData)
local soundData = {
name = "Magazine.Out" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "sniper_military_slideback_1.wav"
}
sound.Add(soundData)
local soundData = {
name = "Magazine.In" ,
channel = CHAN_WEAPON,
volume = 0.5,
soundlevel = 80,
pitchstart = 100,
pitchend = 100,
sound = "sniper_military_slideforward_1.wav"
}
sound.Add(soundData)

View File

@@ -0,0 +1,648 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Oldie Weaponry"
SWEP.UC_CategoryPack = "1Urban Decay"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/12g.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 1
SWEP.UC_ShellColor = Color(0.7*255, 0.2*255, 0.2*255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 3
-- Fake name --
SWEP.PrintName = "Express-12"
-- True name --
SWEP.TrueName = "Remington 870"
-- Trivia --
SWEP.Trivia_Class = "Shotgun"
SWEP.Trivia_Desc = "Classic pump-action shotgun, renowned for its high quality parts and assembly. A simple firearm with a simple purpose. Marketed primarily to civilians for use in hunting game and self-defense, but it has found popularity among police departments for a relatively innocuous appearance and ability to accept custom loaded less-lethal shells."
SWEP.Trivia_Manufacturer = "Mauer Armaments"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Pump Action"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1950
-- Weapon slot --
SWEP.Slot = 3
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Remington Arms"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_870.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_870.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.DefaultBodygroups = "000000000"
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-5.5, 5, -5.5),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1 - ( 0.35 * 0.5 )
}
-- Damage parameters --
SWEP.Damage = 8
SWEP.DamageMin = 8
SWEP.Penetration = 1
SWEP.Num = 8
SWEP.Range = 45
SWEP.RangeMin = 5
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 200
SWEP.HullSize = 0.5
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults_Shotgun
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 6
SWEP.ExtendedClipSize = 8
SWEP.ReducedClipSize = 6
-- Recoil --
SWEP.Recoil = 2.5
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.3
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.Sway = 0.5
-- Firerate / Firemodes --
SWEP.Delay = 60 / 120
SWEP.Firemodes = {
{
PrintName = "fcg.pump",
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NoLastCycle = true
SWEP.ManualAction = true
SWEP.ShotgunReload = true
SWEP.ShootVol = 160
SWEP.ShootPitch = 100
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 210
-- Accuracy --
SWEP.AccuracyMOA = 40
SWEP.HipDispersion = 250
SWEP.MoveDispersion = 250
SWEP.JumpDispersion = 300
SWEP.Primary.Ammo = "buckshot"
-- Speed multipliers --
SWEP.SpeedMult = 0.91
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.3
SWEP.ShootSpeedMult = 0.75
-- Length --
SWEP.BarrelLength = 32
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-3.66, -3, 2.2),
Ang = Angle(-0.75, 0, 2.8),
Magnification = 1.1,
SwitchToSound = "",
}
SWEP.HolsterPos = Vector(2, 0, -2)
SWEP.HolsterAng = Angle(-5.5, 20, -20)
SWEP.SprintPos = Vector(-0.5, -4, -2)
SWEP.SprintAng = Angle(3.5, 7, -20)
SWEP.ActivePos = Vector(-0.75, -2, 1)
SWEP.ActiveAng = Angle(0, 0, -3)
SWEP.CrouchPos = Vector(-3.8, -2, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(3, 0, -4)
SWEP.Malfunction = false
SWEP.MalfunctionTakeRound = false
SWEP.MalfunctionMean = 500
SWEP.MalfunctionVariance = 0.99
-- Firing sounds --
local path = ")weapons/arccw_ud/870/"
local common = ")/arccw_uc/common/"
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = {
path .. "fire-sup-01.ogg",
path .. "fire-sup-02.ogg",
path .. "fire-sup-03.ogg",
path .. "fire-sup-04.ogg",
path .. "fire-sup-05.ogg",
path .. "fire-sup-06.ogg"
}
--[[SWEP.DistantShootSound = path .. "fire_dist.ogg"
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"]]
SWEP.ShootDrySound = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}
local tail = ")/arccw_uc/common/12ga/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-12ga-pasg-ext-01.ogg",
tail .. "fire-dist-12ga-pasg-ext-02.ogg",
tail .. "fire-dist-12ga-pasg-ext-03.ogg",
tail .. "fire-dist-12ga-pasg-ext-04.ogg",
tail .. "fire-dist-12ga-pasg-ext-05.ogg",
tail .. "fire-dist-12ga-pasg-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
SWEP.Hook_Think = ArcCW.UC.ADSReload
local shellin = {path .. "shell-insert-01.ogg", path .. "shell-insert-02.ogg", path .. "shell-insert-03.ogg"}
SWEP.Animations = {
["ready"] = {
Source = "sgreload_finish_empty",
Time = 37 / 30,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 1.2,
LHIKOut = 1.4,
SoundTable = {
{s = common .. "raise.ogg", t = 0.2},
{s = common .. "rattle.ogg", t = 0.2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.5},
{s = path .. "rack_1.ogg", t = 0.4},
{s = path .. "rack_2.ogg", t = 0.6},
{s = common .. "shoulder.ogg", t = 0.9},
},
ProcDraw = true,
},
["idle"] = {
Source = "idle",
},
["idle_empty"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire",
--Time = 23 / 30,
MinProgress = 8 / 30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
--Time = 23 / 30,
MinProgress = 8 / 30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["cycle"] = {
Source = "cycle",
--Time = 20 / 30,
ShellEjectAt = 0.1,
MinProgress = 0.26,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "rack_1.ogg", t = 0},
{s = path .. "eject.ogg", t = 0.1},
{s = path .. "rack_2.ogg", t = 0.11},
},
},
["cycle_jammed"] = {
Source = "jamcycle",
--Time = 20 / 30,
ShellEjectAt = 0.1,
MinProgress = 0.26,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "rack_1.ogg", t = 0},
{s = path .. "eject.ogg", t = 0.1},
{s = path .. "rack_2.ogg", t = 0.11},
},
},
["fix"] = {
Source = "fix",
Time = 50 / 30,
ShellEjectAt = 0.7, -- should make the shell eject offscreen cuz the anim already has it
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.5},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1},
{s = path .. "rack_1.ogg", t = 0.6},
{s = path .. "eject.ogg", t = 0.7},
{s = path .. "rack_2.ogg", t = 0.9},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.7},
}
},
["sgreload_start"] = {
Source = "sgreload_start",
Time = 16 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = common .. "shoulder.ogg", t = 0.1},
},
},
["sgreload_insert"] = {
Source = "sgreload_insert",
Time = 18 / 30,
MinProgress = 0.24,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.3,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
SoundTable = {
{s = shellin, t = 0},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
},
},
["sgreload_finish"] = {
Source = "sgreload_finish",
Time = 20 / 30,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.4,
TPAnimStartTime = 0.8,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = common .. "shoulder.ogg", t = 0.27},
},
},
["sgreload_finish_empty"] = {
Source = "sgreload_finish_empty",
Time = 37 / 30,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.6,
LHIKOut = 0.8,
TPAnimStartTime = 0.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
ShellEjectAt = 0.5,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.5},
{s = path .. "rack_1.ogg", t = 0.4},
{s = path .. "eject.ogg", t = 0.5},
{s = path .. "rack_2.ogg", t = 0.525},
{s = common .. "shoulder.ogg", t = 0.9},
},
},
}
SWEP.Hook_ModifyBodygroups = function(wep, data)
local vm = data.vm
if !IsValid(vm) then return end
-- if wep.Attachments[1].Installed then
-- vm:SetBodygroup(8, 2)
-- elseif wep.Attachments[2].Installed == "ud_870_barrel_long" then
-- vm:SetBodygroup(8, 1)
-- else
-- vm:SetBodygroup(8, 0)
-- end
-- 8rnd tube and either barrel should remove the clamp
if vm:GetBodygroup(7) == 1 and vm:GetBodygroup(1) != 0 then
vm:SetBodygroup(7, 2)
end
end
SWEP.BulletBones = {
[0] = "870_shell1",
}
SWEP.DefaultSkin = 1
-- Bodygroups --
SWEP.AttachmentElements = {
["ud_870_optic_ringsight"] = {
VMBodygroups = {
{ind = 8, bg = 1},
},
Override_IronSightStruct = {
Pos = Vector(-3.665, -2.75, 2.1),
Ang = Angle(-0.6, 0, 1),
Magnification = 1.1,
SwitchToSound = "",
},
},
["optic_rail"] = {
VMBodygroups = {
{ind = 8, bg = 2},
}
},
["ud_shotgun_rail_fg"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["ud_870_slide_moe"] = {
VMBodygroups = {{ind = 6, bg = 1}},
},
["ud_870_slide_long"] = {
VMBodygroups = {{ind = 6, bg = 2}},
},
["ud_870_slide_poly"] = {
VMBodygroups = {{ind = 6, bg = 3}},
},
["ud_shotgun_rail_fg"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["ud_870_barrel_long"] = {
AttPosMods = {
[3] = {
vpos = Vector(-0.03, -0.65, 39.5),
}
},
VMBodygroups = {
{ind = 1, bg = 1},
},
},
["ud_870_barrel_sawnoff"] = {
VMBodygroups = {
{ind = 1, bg = 2},
{ind = 7, bg = 2}
},
AttPosMods = {
[3] = {
vpos = Vector(-0.03, -0.9, 19),
}
},
},
["ud_870_tube_reduced"] = {
VMBodygroups = {
{ind = 2, bg = 2},
{ind = 7, bg = 2}
},
},
["ud_870_tube_ext"] = {
VMBodygroups = {
{ind = 2, bg = 1},
{ind = 7, bg = 1}
},
},
["ud_870_stock_poly"] = {
VMBodygroups = {{ind = 4, bg = 1}},
},
["ud_870_stock_sawnoff"] = {
VMBodygroups = {{ind = 4, bg = 2}},
},
["ud_870_stock_raptor"] = {
VMBodygroups = {{ind = 4, bg = 3}},
},
["ud_870_skin_dirty"] = {
VMSkin = 0
},
["ud_870_skin_custom"] = {
VMSkin = 3
},
}
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp","optic","optic_sniper","ud_870_optic"},
Bone = "870_parent",
Offset = {
vpos = Vector(0, -1.75, -2),
vang = Angle(90, 0, -90),
},
VMScale = Vector(1, 1, 1),
CorrectiveAng = Angle(1.8, 0.1, 0),
InstalledEles = {"optic_rail"}
},
{
PrintName = "Barrel",
DefaultAttName = "16\" Standard Barrel",
DefaultAttIcon = Material("entities/att/acwatt_ud_870_barrel.png", "smooth mips"),
Slot = "ud_870_barrel",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"choke", "muzzle_shotgun"},
Bone = "870_parent",
Offset = {
vpos = Vector(-0.03, -0.75, 26.3),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Forend",
DefaultAttName = "Factory Forend",
DefaultAttIcon = Material("entities/att/acwatt_ud_870_slide.png", "smooth mips"),
Slot = {"ud_870_slide"},
Bone = "870_slide",
Offset = {
vpos = Vector(3, -4.4, -29),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "870_slide",
Offset = {
vpos = Vector(0, 1.1, 0),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_shotgun_rail_fg"}
},
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "870_slide",
Offset = {
vpos = Vector(0, 1, 4.25),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Stock",
DefaultAttName = "Wooden Stock",
DefaultAttIcon = Material("entities/att/acwatt_ud_870_stock.png", "smooth mips"),
Slot = {"ud_870_stock"},
},
{
PrintName = "Tube Type",
Slot = {"ud_870_tube"},
DefaultAttName = "6 Shell Tube",
DefaultAttIcon = Material("entities/att/acwatt_ud_870_tube.png", "smooth mips"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"BUCK\" #00 Buckshot",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_shotgun_generic.png", "mips smooth"),
Slot = "ud_ammo_shotgun",
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "870_parent",
Offset = {
vpos = Vector(0.7, 0, 5),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Skin",
Slot = "ud_870_skin",
DefaultAttName = "Polished Steel",
FreeSlot = true
}
}
local lookup_barrel = {
default = 1,
ud_870_barrel_long = 2,
ud_870_barrel_sawnoff = 0,
}
local lookup_tube = {
default = 1,
ud_870_tube_ext = 2,
ud_870_tube_reduced = 0,
}
SWEP.Hook_ExtraFlags = function(wep, data)
local barrel = wep.Attachments[2].Installed and lookup_barrel[wep.Attachments[2].Installed] or lookup_barrel["default"]
local tube = wep.Attachments[8].Installed and lookup_tube[wep.Attachments[8].Installed] or lookup_tube["default"]
if barrel < tube then
table.insert(data, "nomuzzleblocking")
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,783 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Modern Weaponry"
SWEP.UC_CategoryPack = "1Urban Decay"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/12g.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 1
SWEP.UC_ShellColor = Color(0.7*255, 0.2*255, 0.2*255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 3
-- Fake name --
SWEP.PrintName = "FC1040"
-- True name --
SWEP.TrueName = "Benelli M4"
-- Trivia --
SWEP.Trivia_Class = "Shotgun"
SWEP.Trivia_Desc = [[Semi-automatic shotgun designed for close-quarters urban warfare. Uses an innovative short-stroke gas system that eliminates complex mechanisms found on most gas-operated automatic weapons. Its main use is in destroying locked doors.
Devastating damage output, but control is required to avoid spending more time reloading than fighting.]]
SWEP.Trivia_Manufacturer = "Iscapelli Armaments"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Gas-Operated Rotating Bolt"
SWEP.Trivia_Country = "Italy"
SWEP.Trivia_Year = 1998
-- Weapon slot --
SWEP.Slot = 3
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Benelli Armi SpA"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_m1014.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_m1014.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-4, 4, -4.5),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.DefaultPoseParams = {["grip"] = 0}
-- Damage parameters --
SWEP.Damage = 9
SWEP.DamageMin = 9
SWEP.Penetration = 1
SWEP.Num = 8
SWEP.Range = 90
SWEP.RangeMin = 4
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 200
SWEP.HullSize = 0.25
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults_Shotgun
-- Jamming --
SWEP.Malfunction = false
SWEP.MalfunctionJam = false
SWEP.MalfunctionPostFire = false
SWEP.MalfunctionTakeRound = false
-- Mag size --
SWEP.ChamberSize = 2
SWEP.Primary.ClipSize = 4
SWEP.ExtendedClipSize = 7
SWEP.ReducedClipSize = 2
SWEP.ChamberLoadNonEmpty = 2
SWEP.ChamberLoadEmpty = 1
-- Recoil --
SWEP.Recoil = 2.5
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.24
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.Sway = 0.5
-- Firerate / Firemodes --
SWEP.Delay = 60 / 120
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.ShotgunReload = true
SWEP.ShootVol = 160
SWEP.ShootPitch = 100
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 210
-- Accuracy --
SWEP.AccuracyMOA = 45
SWEP.HipDispersion = 400
SWEP.MoveDispersion = 100
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "buckshot"
-- Speed multipliers --
SWEP.SpeedMult = 0.92
SWEP.SightedSpeedMult = 0.6
SWEP.SightTime = 0.4
SWEP.ShootSpeedMult = 0.75
-- Length --
SWEP.BarrelLength = 48
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-2.73, -2, 1.1),
Ang = Angle(.25, 0.01, 0),
Magnification = 1.1,
SwitchToSound = "",
}
SWEP.HolsterPos = Vector(2, 0, -3)
SWEP.HolsterAng = Angle(-5.5, 20, -20)
SWEP.SprintPos = Vector(-0.5, -4, -3)
SWEP.SprintAng = Angle(3.5, 7, -20)
SWEP.ActivePos = Vector(-0.1, -0.5, 0.75)
SWEP.ActiveAng = Angle(0, 0, -0)
SWEP.CrouchPos = Vector(-4, -2, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(3, 0, -4.5)
-- Firing sounds --
local path2 = ")weapons/arccw_ud/m16/"
local path1 = ")weapons/arccw_ud/870/"
local path = ")weapons/arccw_ud/m1014/"
local common = ")/arccw_uc/common/"
SWEP.ShootSound = {
path1 .. "fire-01.ogg",
path1 .. "fire-02.ogg",
path1 .. "fire-03.ogg",
path1 .. "fire-04.ogg",
path1 .. "fire-05.ogg",
path1 .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = {
path1 .. "fire-sup-01.ogg",
path1 .. "fire-sup-02.ogg",
path1 .. "fire-sup-03.ogg",
path1 .. "fire-sup-04.ogg",
path1 .. "fire-sup-05.ogg",
path1 .. "fire-sup-06.ogg"
}
--[[SWEP.DistantShootSound = path .. "fire_dist.ogg"
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"]]
SWEP.ShootDrySound = path .. "dryfire.ogg"
local tail = ")/arccw_uc/common/12ga/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-12ga-pasg-ext-01.ogg",
tail .. "fire-dist-12ga-pasg-ext-02.ogg",
tail .. "fire-dist-12ga-pasg-ext-03.ogg",
tail .. "fire-dist-12ga-pasg-ext-04.ogg",
tail .. "fire-dist-12ga-pasg-ext-05.ogg",
tail .. "fire-dist-12ga-pasg-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
local rottle = {common .. "cloth_1.ogg", common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local ratel = {common .. "rattle1.ogg", common .. "rattle2.ogg", common .. "rattle3.ogg"}
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
local shellin = {path .. "shell-insert-01.ogg", path .. "shell-insert-02.ogg", path .. "shell-insert-03.ogg"}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["idle_empty"] = {
Source = "idle_empty",
},
["idle_jammed"] = {
Source = "idle_jammed",
},
["ready"] = {
Source = "equip",
Time = 60 / 30,
SoundTable = {
{s = rottle, t = 0.35},
{s = path .. "chback.ogg", t = 0.35},
{s = path .. "chamber.ogg", t = 0.6},
{s = rottle, t = 0.75},
},
},
["draw"] = {
Source = "draw",
Time = 30 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_empty"] = {
Source = "draw_empty",
Time = 30 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_jammed"] = {
Source = "draw_jammed",
Time = 30 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_empty"] = {
Source = "holster_empty",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_jammed"] = {
Source = "holster_jammed",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire",
Time = 16 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg", t = 0, v = 0.45}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_iron"] = {
Source = "fire",
Time = 18 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg", t = 0}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_empty"] = {
Source = "fire_empty",
Time = 18 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_iron_empty"] = {
Source = "fire_empty",
Time = 20 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_jammed"] = {
Source = "fire_jam",
Time = 23 / 25,--30,
ShellEjectAt = false,
SoundTable = {
{s = path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg", t = 0}, -- Not temporary
--{s = path1 .. "eject.ogg", t = 0}, -- Not temporary
},
},
["unjam"] = {
Source = "jam_fix",
Time = 60 / 30,
ShellEjectAt = 0.8,
LHIK = false,
SoundTable = {
{s = rottle, t = 0},
{s = path2 .. "grab.ogg", t = 0.1},
{s = path .. "chback.ogg", t = 0.7},
{s = path1 .. "eject.ogg", t = 0.8, v = 0.4},
{s = path .. "chamber.ogg", t = 0.9},
{s = rottle, t = 1.2},
},
},
["unjam_empty"] = {
Source = "jam_fix_empty",
Time = 60 / 30,
ShellEjectAt = 1.1,
LHIK = false,
SoundTable = {
{s = rottle, t = 0},
{s = path2 .. "grab.ogg", t = .4},
{s = path .. "chback.ogg", t = 0.8},
{s = path1 .. "eject.ogg", t = 1.1},
{s = rottle, t = 1.2},
},
},
["sgreload_start"] = {
Source = "sgreload_start",
Time = 16 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = false,
//LHIKIn = 0.2,
//LHIKEaseIn = 0.2,
//LHIKOut = 0,
},
["sgreload_start_empty"] = {
Source = "sgreload_start_empty",
Time = 40 / 30,
MinProgress = 1,
LHIK = false,
//LHIKIn = 0.2,
//LHIKOut = 0,
TPAnimStartTime = 0.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "breechload.ogg", t = 0.25},
{s = path .. "breechclose.ogg", t = 0.9},
},
ForceEmpty = true,
},
["sgreload_insert"] = {
Source = "sgreload_insert",
Time = 18 / 30,
MinProgress = 0.24,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.3,
LHIK = false,
//LHIKIn = 0,
//LHIKOut = 0,
SoundTable = {
{s = shellin, t = 0},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.05},
},
},
["sgreload_finish"] = {
Source = "sgreload_finish",
Time = 30 / 30,
LHIK = false,
//LHIKIn = 0,
//LHIKEaseOut = 0.3,
//LHIKOut = 0.6,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.8,
SoundTable = {
{s = common .. "shoulder.ogg", t = 0.3},
},
},
-- stock animla below
["idle_stock"] = {
Source = "idle_stock",
},
["idle_empty_stock"] = {
Source = "idle_empty_stock",
},
["idle_jammed_stock"] = {
Source = "idle_jammed_stock",
},
["draw_stock"] = {
Source = "draw_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_empty_stock"] = {
Source = "draw_empty_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_jammed_stock"] = {
Source = "draw_jammed_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["holster_stock"] = {
Source = "holster_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_empty_stock"] = {
Source = "holster_empty_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_jammed_stock"] = {
Source = "holster_jammed_stock",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire_stock"] = {
Source = "fire_stock",
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg", t = 0}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_empty_stock"] = {
Source = "fire_empty_stock",
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Not temporary
{s = path1 .. "eject.ogg", t = 0.01}, -- Not temporary
},
},
["fire_jammed_stock"] = {
Source = "fire_jam_stock",
Time = 23 / 25,--30,
ShellEjectAt = false,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Not temporary
--{s = path1 .. "eject.ogg", t = 0}, -- Not temporary
},
},
["unjam_stock"] = {
Source = "jam_fix_stock",
Time = 60 / 30,
ShellEjectAt = 1.1,
LHIK = false,
SoundTable = {
{s = rottle, t = 0},
{s = path2 .. "grab.ogg", t = .4},
{s = path .. "chback.ogg", t = 0.8},
{s = path1 .. "eject.ogg", t = 1.1},
{s = path .. "breechclose.ogg", t = 0.9},
{s = rottle, t = 1.2},
},
},
["unjam_empty_stock"] = {
Source = "jam_fix_empty_stock",
Time = 60 / 30,
ShellEjectAt = 1.1,
LHIK = false,
SoundTable = {
{s = rottle, t = 0},
{s = path2 .. "grab.ogg", t = .4},
{s = path .. "chback.ogg", t = 0.8},
{s = path1 .. "eject.ogg", t = 1.1},
--{s = path .. "breechclose.ogg", t = 1.2},
{s = rottle, t = 1.2},
},
},
["sgreload_start_stock"] = {
Source = "sgreload_start_stock",
Time = 16 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = false,
//LHIKIn = 0.2,
//LHIKEaseIn = 0.2,
//LHIKOut = 0,
},
["sgreload_start_empty_stock"] = {
Source = "sgreload_start_empty_stock",
Time = 40 / 30,
MinProgress = 1,
LHIK = false,
//LHIKIn = 0.2,
//LHIKOut = 0,
TPAnimStartTime = 0.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "breechload.ogg", t = 0.05},
{s = path .. "breechclose.ogg", t = 0.75},
},
ForceEmpty = true,
},
["sgreload_finish_stock"] = {
Source = "sgreload_finish_stock",
Time = 22 / 30,
LHIK = false,
//LHIKIn = 0,
//LHIKEaseOut = 0.3,
//LHIKOut = 0.6,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.8,
SoundTable = {
{s = common .. "shoulder.ogg", t = 0.4},
},
},
}
SWEP.BulletBones = {
--[1] = "1014_shell1",
}
-- Bodygroups --
SWEP.AttachmentElements = {
["ud_autoshotgun_barrel_short"] = {
VMBodygroups = {{ind = 1, bg = 1}},
AttPosMods = {
[3] = {
vpos = Vector(0, -0.40, 19.6),
}
},
},
["ud_autoshotgun_barrel_sawnoff"] = {
VMBodygroups = {{ind = 1, bg = 2}},
AttPosMods = {
[3] = {
vpos = Vector(-0.03, -0.75, 22.2),
}
},
},
["ud_autoshotgun_barrel_sport"] = {
VMBodygroups = {{ind = 1, bg = 2}},
AttPosMods = {
[3] = {
vpos = Vector(0, -0.40, 26.3),
}
},
Override_IronSightStruct = {
Pos = Vector(-2.73, -2, 1.01),
Ang = Angle(0.95, 0.01, 0),
Magnification = 1.1
},
},
["ud_autoshotgun_tube_short"] = {
VMBodygroups = {
{ind = 2, bg = 1},
{ind = 4, bg = 1},
},
},
["ud_autoshotgun_tube_long"] = {
VMBodygroups = {{ind = 2, bg = 0}},
},
["ud_autoshotgun_stock_in"] = {
VMBodygroups = {{ind = 3, bg = 1}},
VMPoseParams = {["grip"] = 0}
},
["ud_autoshotgun_stock_buffer"] = {
VMBodygroups = {{ind = 3, bg = 2}},
VMPoseParams = {["grip"] = 0}
},
["ud_autoshotgun_stock_sport"] = {
VMBodygroups = {
{ind = 3, bg = 3},
{ind = 6, bg = 1},
},
VMPoseParams = {["grip"] = 1}
},
["ud_autoshotgun_stock_gripstock"] = {
VMBodygroups = {
{ind = 3, bg = 5},
},
VMPoseParams = {["grip"] = 0}
},
["ud_m1014_handguard_sport"] = {
VMBodygroups = {{ind = 5, bg = 2}},
},
["ud_autoshotgun_rail_fg"] = {
VMBodygroups = {{ind = 5, bg = 1}},
},
}
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic", "optic_sniper"},
Bone = "1014_parent",
Offset = {
vpos = Vector(-0.025, -1.35, 2.5),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Barrel",
DefaultAttName = "18.5\" Factory Barrel", --16\" M4 Super 90 SBS Barrel
DefaultAttIcon = Material("entities/att/acwatt_ud_m1014_barrel.png", "smooth mips"),
Slot = "ud_1014_barrel",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"choke", "muzzle_shotgun"},
Bone = "1014_parent",
Offset = {
vpos = Vector(0, -0.40, 24.5),
vang = Angle(90, 0, -90),
},
ExcludeFlags = {"nomuzzle"}
},
{
PrintName = "Underbarrel",
Slot = {"foregrip","ud_1014_handguard"},
Bone = "1014_parent",
Offset = {
vpos = Vector(0, 1.7, 9),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_autoshotgun_rail_fg"},
},
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "1014_parent",
Offset = {
vpos = Vector(0.8, 0.8, 13),
vang = Angle(90, 0, 0),
},
InstalledEles = {"ud_autoshotgun_rail_fg"},
},
{
PrintName = "Stock",
Slot = {"ud_1014_stock"},
Bone = "1014_parent",
Offset = {
vpos = Vector(-0.02, 1.9, -2.07),
vang = Angle(90, 0, -90),
},
DefaultAttName = "Extended Stock",
DefaultAttIcon = Material("entities/att/acwatt_ud_m1014_stock.png", "smooth mips"),
},
{
PrintName = "Tube Type",
Slot = {"ud_1014_tube"},
DefaultAttName = "4 Shell Tube",
DefaultAttIcon = Material("entities/att/acwatt_ud_m1014_tube.png", "smooth mips"),
DefaultEles = {"ud_autoshotgun_tube_short"},
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"BUCK\" #00 Buckshot",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_shotgun_generic.png", "mips smooth"),
Slot = "ud_ammo_shotgun",
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "1014_parent",
Offset = {
vpos = Vector(0.7, -0.5, 4),
vang = Angle(90, 0, -90),
},
},
}
local lookup_barrel = {
default = 1,
ud_m1014_barrel_short = 0,
}
local lookup_tube = {
default = 0,
ud_m1014_tube_ext = 1,
}
SWEP.Hook_ExtraFlags = function(wep, data)
local barrel = wep.Attachments[2].Installed and lookup_barrel[wep.Attachments[2].Installed] or lookup_barrel["default"]
local tube = wep.Attachments[7].Installed and lookup_tube[wep.Attachments[7].Installed] or lookup_tube["default"]
if barrel < tube then
table.insert(data, "nomuzzleblocking")
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,458 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Special Weaponry"
SWEP.UC_CategoryPack = "1Urban Decay"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_m79"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/ud_shells/12.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 0
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 3
SWEP.CamAttachment = 2
-- Fake name --
SWEP.PrintName = "AMSGL"
-- (American) Squad Grenade Launcher or something. similar to M16's fake name
-- True name --
SWEP.TrueName = "M79"
-- Trivia --
SWEP.Trivia_Class = "Grenade Launcher"
SWEP.Trivia_Desc = "Single-shot 40mm grenade launcher intended to provide infantry with portable long-range explosive firepower. Accurate, flexible and reliable, it is well-respected among American soldiers."
SWEP.Trivia_Manufacturer = "Stoner's Legacy Ltd."
SWEP.Trivia_Calibre = "40x46mm"
SWEP.Trivia_Mechanism = "Break-action"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1961
-- Weapon slot --
SWEP.Slot = 4
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Springfield Armory"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_m79.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_m79.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-8, 5.5, -4.5),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1 - ( 0.35 * 0.5 )
}
-- Damage parameters --
SWEP.Damage = 200
SWEP.DamageMin = 200
SWEP.Range = 40
SWEP.RangeMin = 0
SWEP.Num = 1
SWEP.Penetration = 0
SWEP.ShootEntity = "arccw_uc_40mm_he"
SWEP.MuzzleVelocity = 5000
-- Mag size --
SWEP.ChamberSize = 0
SWEP.Primary.ClipSize = 1
SWEP.ExtendedClipSize = 1
SWEP.ReducedClipSize = 1
-- Recoil --
SWEP.Recoil = 4
SWEP.RecoilSide = 2
SWEP.RecoilSide = 1
SWEP.RecoilRise = 0.24
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.Sway = 0.5
-- Firerate / Firemodes --
SWEP.Delay = 60 / 220
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.ShootVol = 160
SWEP.ShootPitch = 100
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
-- NPC --
SWEP.NPCWeaponType = "weapon_rpg"
SWEP.NPCWeight = 210
-- Accuracy --
SWEP.AccuracyMOA = 30
SWEP.HipDispersion = 500
SWEP.MoveDispersion = 200
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "smg1_grenade"
-- Speed multipliers --
SWEP.SpeedMult = 0.92
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.4
SWEP.ShootSpeedMult = 0.75
-- Length --
SWEP.BarrelLength = 48
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-3.51, -5, 2.2),
Ang = Angle(0, 0, 0),
Midpoint = {
Pos = Vector(0, 0, 0),
Ang = Angle(0, -1, 0),
},
Magnification = 1,
SwitchToSound = "",
CrosshairInSights = false,
}
SWEP.HolsterPos = Vector(-0.5, -4, -3)
SWEP.HolsterAng = Angle(3.5, 7, -20)
SWEP.ActivePos = Vector(0, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, -2, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.BarrelOffsetSighted = Vector(0, 0, -4)
SWEP.BarrelOffsetHip = Vector(6, 0, -8)
-- Firing sounds --
local common = ")/arccw_uc/common/"
local path = ")/arccw_uc/common/40mm/"
local rottle = {common .. "cloth_1.ogg", common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
--SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.DistantShootSound = {
path .. "fire-dist-01.ogg",
path .. "fire-dist-02.ogg",
path .. "fire-dist-03.ogg",
path .. "fire-dist-04.ogg",
path .. "fire-dist-05.ogg",
path .. "fire-dist-06.ogg"
}
--[[SWEP.DistantShootSoundOutdoors = {
path .. "fire-dist-01.ogg",
path .. "fire-dist-02.ogg",
path .. "fire-dist-03.ogg",
path .. "fire-dist-04.ogg",
path .. "fire-dist-05.ogg",
path .. "fire-dist-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}]]
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire",
Time = 20 / 30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
Time = 20 / 30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0}},
},
["reload"] = {
Source = "reload",
Time = 101 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.6,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.2,
LHIKOut = 0.5,
LastClip1OutTime = 1.5,
MinProgress = 2.2,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "breaker_open.ogg", t = 0.3},
{s = common .. "gl_remove.ogg", t = 0.9},
{s = rottle, t = 1.0},
{s = common .. "magpouch.ogg", t = 1.4},
{s = common .. "40mm_casing_1.ogg", t = 1.6},
{s = common .. "gl_insert.ogg", t = 2.0},
{s = rottle, t = 2.25},
{s = common .. "breaker_close.ogg", t = 2.5},
-- {
-- t = 0.6,
-- e = "RagdollImpact", -- Please add some kind of smoke particle after opening the chamber
-- att = 1,
-- mag = 100,
-- }
},
},["reload_shotgun"] = {
Source = "reload",
Time = 101 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.6,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.2,
LHIKOut = 0.5,
LastClip1OutTime = 1.5,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "breaker_open.ogg", t = 0.3},
{s = common .. "gl_remove.ogg", t = 0.9},
{s = rottle, t = 1.0},
{s = common .. "40mm_casing_1.ogg", t = 1.6},
{s = common .. "gl_insert.ogg", t = 2.0},
{s = rottle, t = 2.25},
{s = common .. "breaker_close.ogg", t = 2.5},
{
t = 1, ind = 1, bg = 2, -- Empty shell bodygroup
},
{
t = 1.5, ind = 1, bg = 1,
}
},
},
["reload_caseless"] = {
Source = "reload_caseless",
Time = 101 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.74,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.2,
LHIKOut = 0.6,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "breaker_open.ogg", t = 0.3},
{s = rottle, t = 0.75},
{s = common .. "gl_insert.ogg", t = 1.5},
{s = rottle, t = 2.0},
{s = common .. "breaker_close.ogg", t = 2.25},
-- {
-- t = 0.6,
-- e = "muzzleflash_m79", -- Please add some kind of smoke particle after opening the chamber
-- att = nil,
-- mag = 100,
-- }
},
},
}
SWEP.BulletBones = {
[1] = "m79_grenade",
}
-- Bodygroups --
SWEP.AttachmentElements = {
["m79_pirategun"] = {
VMBodygroups = {{ind = 0, bg = 1}},
},
["m79_nostock"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["m79_rail"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["40mm_buckshot"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["40mm_buckshot_empty"] = {
VMBodygroups = {{ind = 1, bg = 2}},
},
["40mm_caseless"] = {
VMBodygroups = {{ind = 1, bg = 3}},
},
["40mm_hornetnest"] = {
VMBodygroups = {{ind = 1, bg = 4}},
},
["40mm_incendiary"] = {
VMBodygroups = {{ind = 1, bg = 5}},
},
["40mm_napalm"] = {
VMBodygroups = {{ind = 1, bg = 5}},
},
}
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic", "optic_sniper"},
Bone = "m79_front",
Offset = {
vpos = Vector(0, -3.6, 1),
vang = Angle(90, 2, -90),
},
InstalledEles = {"m79_rail"},
ExcludeFlags = {"m79_pirategun"},
},
{
PrintName = "Tube",
DefaultAttName = "Standard Tube",
DefaultAttIcon = Material("entities/att/acwatt_ud_m79_barrel.png", "smooth mips"),
Slot = "ud_m79_barrel",
Bone = "m79_front",
Offset = {
vpos = Vector(3.45, -5.3, -22),
vang = Angle(90, 2, -90),
},
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "m79_front",
Offset = {
vpos = Vector(0, 0.4, 1.25),
vang = Angle(90, 0, -90),
},
InstalledEles = {"m79_rail"},
ExcludeFlags = {"m79_pirategun"},
MergeSlots = {10},
},
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "m79_front",
Offset = {
vpos = Vector(0.25, 0, 5),
vang = Angle(90, 0, -90),
},
ExcludeFlags = {"m79_pirategun"},
},
{
PrintName = "Stock",
Slot = {"ud_m79_stock"},
DefaultAttName = "Wooden Stock",
DefaultAttIcon = Material("entities/att/acwatt_ud_m79_stock.png", "smooth mips"),
},
{
PrintName = "Grenade Type",
DefaultAttName = "High Explosive",
DefaultAttIcon = Material("entities/att/arccw_uc_40mm_generic.png", "smooth mips"),
Slot = "uc_40mm",
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg_singleshot", -- Fire group
DefaultAttName = "Standard Internals",
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "m79_front",
Offset = {
vpos = Vector(0.8, -1, 0),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "M203 slot",
Slot = "uc_ubgl",
Bone = "m79_front",
Offset = {
vpos = Vector(0, -1.1, 0.9),
vang = Angle(90, 0, -90),
},
InstalledEles = {"m79_rail"},
ExcludeFlags = {"m79_pirategun"},
Hidden = true,
}
}

View File

@@ -0,0 +1,932 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Oldie Weaponry"
SWEP.UC_CategoryPack = "1Urban Decay"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Effects --
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/556x45.mdl"
SWEP.ShellScale = 0.666
--SWEP.ShellMaterial = "models/weapons/arcticcw/shell_556"
SWEP.ShellPitch = 100
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 3
SWEP.TracerNum = 1
SWEP.TracerCol = Color(25, 255, 25)
SWEP.TracerWidth = 2
-- Fake name --
SWEP.PrintName = "Patriot 809"
-- True name --
SWEP.TrueName = "Mini-14"
-- Trivia --
SWEP.Trivia_Class = "Semi-Automatic Rifle"
SWEP.Trivia_Desc = [[Autoloading rifle designed for better accuracy than competing models. Due to its appearance, it is sometimes exempted from gun control laws targeting "Assault Weapons" despite its identical ability to kill. This has helped it find success despite its higher cost and non-standard magazine well.
While it can perform well in close-quarters combat, its high accuracy excels in mid-range engagements.]]
SWEP.Trivia_Manufacturer = "Rifles International"
SWEP.Trivia_Calibre = "5.56x45mm NATO"
SWEP.Trivia_Mechanism = "Gas-Operated Rotating Bolt"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1973
-- Weapon slot --
SWEP.Slot = 2
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Sturm, Ruger & Company"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_mini14.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_mini14.mdl"
SWEP.ViewModelFOV = 70
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.DefaultSkin = 0
SWEP.DefaultPoseParams = {["grip"] = 0}
-- Damage --
SWEP.Damage = 22
SWEP.DamageMin = 22
SWEP.RangeMin = 50
SWEP.Range = 400 -- 4 shot until ~275m
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 990
SWEP.PhysBulletMuzzleVelocity = 960
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 20
SWEP.ExtendedClipSize = 30
SWEP.ReducedClipSize = 10
-- Recoil --
SWEP.Recoil = 0.45
SWEP.RecoilSide = 0.2
SWEP.RecoilRise = 0.5
SWEP.RecoilPunch = 1
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.RecoilPunchBack = 1
SWEP.Sway = 0.25
-- Firerate / Firemodes --
SWEP.Delay = 60 / 540
SWEP.Num = 1
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0,
},
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 60
-- Accuracy --
SWEP.AccuracyMOA = 4
SWEP.HipDispersion = 800
SWEP.MoveDispersion = 300
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "smg1"
SWEP.MagID = "mini14"
SWEP.HeatCapacity = 75
SWEP.HeatDissipation = 5
SWEP.HeatDelayTime = 3
SWEP.MalfunctionMean = 100
-- Speed multipliers --
SWEP.SpeedMult = 0.9
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.35
SWEP.ShootSpeedMult = 0.9
-- Length --
SWEP.BarrelLength = 36
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HolsterPos = Vector(2, 0, -2)
SWEP.HolsterAng = Angle(-5.5, 20, -20)
SWEP.SprintPos = Vector(-0.5, -4, -2)
SWEP.SprintAng = Angle(3.5, 7, -20)
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-4.305, -7, 2.55),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "",
CrosshairInSights = false,
}
SWEP.ActivePos = Vector(-1, -1, 1)
SWEP.ActiveAng = Angle(0, 0, -3)
SWEP.CustomizePos = Vector(5, -2, -2)
SWEP.CustomizeAng = Angle(15, 25, 0)
SWEP.CrouchPos = Vector(-5, -4, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.BarrelOffsetHip = Vector(3, 0, -3)
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-10, 6.5, -6),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1 - ( 0.35 * 0.75 )
}
-- Firing sounds --
local path = ")weapons/arccw_ud/mini14/"
local common = ")/arccw_uc/common/"
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = path .. "fire_supp.ogg"
SWEP.DistantShootSound = nil
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"
SWEP.ShootDrySound = path .. "dryfire.ogg"
local tail = ")/arccw_uc/common/556x45/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-556x45-rif-ext-01.ogg",
tail .. "fire-dist-556x45-rif-ext-02.ogg",
tail .. "fire-dist-556x45-rif-ext-03.ogg",
tail .. "fire-dist-556x45-rif-ext-04.ogg",
tail .. "fire-dist-556x45-rif-ext-05.ogg",
tail .. "fire-dist-556x45-rif-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-rifle-01.ogg",
common .. "fire-dist-int-rifle-02.ogg",
common .. "fire-dist-int-rifle-03.ogg",
common .. "fire-dist-int-rifle-04.ogg",
common .. "fire-dist-int-rifle-05.ogg",
common .. "fire-dist-int-rifle-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Bodygroups --
SWEP.BulletBones = {
[2] = "mini14_bullet1", [3] = "mini14_bullet2"
}
SWEP.AttachmentElements = {
["ud_mini14_mag_10"] = {
VMBodygroups = {{ind = 4, bg = 2}},
},
["ud_mini14_mag_30"] = {
VMBodygroups = {{ind = 4, bg = 1}},
},
["ud_mini14_mag_42"] = {
VMBodygroups = {{ind = 4, bg = 4}},
},
["ud_mini14_mag_60"] = {
VMBodygroups = {{ind = 4, bg = 5}},
},
["ud_mini14_mag_15_22lr"] = {
VMBodygroups = {{ind = 4, bg = 3}},
},
["ud_mini14_mag_30_762"] = {
VMBodygroups = {{ind = 4, bg = 6}},
},
["ud_mini14_rail_optic"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["ud_mini14_rail_fg"] = {
VMBodygroups = {{ind = 5, bg = 1}},
},
["ud_mini14_barrel_long"] = {
VMBodygroups = {{ind = 3, bg = 1}},
AttPosMods = {
[3] = {
vpos = Vector(0, -2.15, 34.5),
},
},
},
["ud_mini14_barrel_short"] = {
VMBodygroups = {{ind = 3, bg = 2}},
AttPosMods = {
[3] = {
vpos = Vector(0, -2.15, 27.5),
},
},
},
["ud_mini14_barrel_stub"] = {
VMBodygroups = {{ind = 3, bg = 3}},
AttPosMods = {
[3] = {
vpos = Vector(0, -2.1, 25),
},
},
},
["ud_mini14_receiver_762"] = {
TrueNameChange = "Mini-30",
NameChange = "Patriot 816"
},
["ud_mini14_receiver_auto"] = {
TrueNameChange = "AC-556",
NameChange = "Patriot ACC"
},
["ud_mini14_receiver_22lr"] = {
TrueNameChange = "Mini-14 .22 LR",
NameChange = "Patriot 822"
},
["ud_mini14_stock_polymer"] = {
VMBodygroups = {{ind = 1, bg = 1}},
VMPoseParams = {["grip"] = 0}
},
["ud_mini14_stock_sawnoff"] = {
VMBodygroups = {{ind = 1, bg = 2}},
VMPoseParams = {["grip"] = 0}
},
["ud_mini14_stock_tactical"] = {
VMBodygroups = {{ind = 1, bg = 4}},
VMPoseParams = {["grip"] = 1}
},
["ud_mini14_stock_tactical_polymer"] = {
VMBodygroups = {{ind = 1, bg = 3}},
VMSkin = 1,
VMPoseParams = {["grip"] = 1}
},
["ud_mini14_clamp"] = {
VMBodygroups = {{ind = 6, bg = 1}},
},
}
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
SWEP.Animations = {
["ready"] = {
Source = "unjam",
Time = 40 / 30,
SoundTable = {
{s = common .. "raise.ogg", t = 0},
{s = common .. "rattle.ogg", t = 0.2},
{s = path .. "chback.ogg", t = 0.25},
{s = path .. "chamber.ogg", t = 0.35},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.8},
{s = common .. "shoulder.ogg", t = 1},
},
LHIK = true,
LHIKIn = 0.5,
LHIKEaseIn = 0.5,
LHIKEaseOut = 0.15,
LHIKOut = 0.5,
ProcDraw = true,
},
["idle"] = {
Source = "idle",
},
["idle_empty"] = {
Source = "idle_empty",
},
["draw"] = {
Source = "draw",
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_empty"] = {
Source = "draw_empty",
Time = 12 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0,
LHIKOut = 0,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_empty"] = {
Source = "holster_empty",
Time = 12 / 30,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0,
LHIKOut = 0,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire",
Time = 20 / 30,
ShellEjectAt = 0.01,
LastClip1OutTime = 0,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
Time = 20 / 30,
ShellEjectAt = 0.01,
LastClip1OutTime = 0,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_empty"] = {
Source = "fire_empty",
Time = 20 / 30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Temporary
},
},
["fire_iron_empty"] = {
Source = "fire_empty",
Time = 20 / 30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path .. "mech_last.ogg", t = 0}, -- Temporary
},
},
["unjam"] = {
Source = "unjam",
Time = 40 / 30,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "chback.ogg", t = 0.25},
{s = path .. "chamber.ogg", t = 0.35},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.8},
{s = common .. "shoulder.ogg", t = 1},
},
LHIK = true,
LHIKIn = 0.5,
LHIKEaseIn = 0.5,
LHIKEaseOut = 0.15,
LHIKOut = 0.5,
ShellEjectAt = .35,
},
-- 20 Round Reloads --
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 66 / 30,
MinProgress = 1.4,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.25},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.4},
{s = common .. "magpouch.ogg", t = 0.6},
{s = path .. "magin.ogg", t = 1.05},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.3},
{s = common .. "shoulder.ogg", t = 1.75},
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.1,
LastClip1OutTime = 1,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.15},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.4},
{s = common .. "magpouch.ogg", t = 0.6},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.10},
{s = path .. "chback.ogg", t = 1.85},
{s = path .. "chamber.ogg", t = 1.95},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.2},
{s = common .. "shoulder.ogg", t = 2.4},
},
},
-- 10 Round Reloads --
["reload_10"] = {
Source = "reload_10",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.6,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.15},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.6, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.5},
},
},
["reload_empty_10"] = {
Source = "reload_empty_10",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.1,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.15},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.4},
{s = common .. "magpouch.ogg", t = 0.6, c = ci},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.10},
{s = path .. "chback.ogg", t = 1.90},
{s = path .. "chamber.ogg", t = 2.00},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.4},
{s = common .. "shoulder.ogg", t = 2.5},
},
},
-- 30 Round Reloads --
["reload_30"] = {
Source = "reload_30",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.4,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.3},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.4},
{s = common .. "shoulder.ogg", t = 1.85},
},
},
["reload_empty_30"] = {
Source = "reload_empty_30",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.3,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.65, c = ci},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.20},
{s = path .. "chback.ogg", t = 2},
{s = path .. "chamber.ogg", t = 2.1},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.3},
{s = common .. "shoulder.ogg", t = 2.65},
},
},
-- 30 polymer Reloads --
["reload_30_tac"] = {
Source = "reload_30_tac",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.4,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.3},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.4},
{s = common .. "shoulder.ogg", t = 1.85},
},
},
["reload_empty_30_tac"] = {
Source = "reload_empty_30_tac",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.3,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.65, c = ci},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.20},
{s = path .. "chback.ogg", t = 2},
{s = path .. "chamber.ogg", t = 2.1},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.3},
{s = common .. "shoulder.ogg", t = 2.65},
},
},
-- 7.62 reloads --
["reload_762"] = {
Source = "reload_762",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.4,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.3},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.4},
{s = common .. "shoulder.ogg", t = 1.85},
},
},
["reload_empty_762"] = {
Source = "reload_empty_762",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.3,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.65, c = ci},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.20},
{s = path .. "chback.ogg", t = 2},
{s = path .. "chamber.ogg", t = 2.1},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.3},
{s = common .. "shoulder.ogg", t = 2.65},
},
},
-- 60 round reloads (?) --
["reload_60"] = {
Source = "reload_60",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.4,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.35},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.4},
{s = common .. "shoulder.ogg", t = 1.85},
},
},
["reload_empty_60"] = {
Source = "reload_empty_60",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.3,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.35},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = common .. "rifle_magdrop.ogg", t = 0.9},
{s = path .. "magin.ogg", t = 1.20},
{s = path .. "chback.ogg", t = 1.9},
{s = path .. "chamber.ogg", t = 2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.3},
{s = common .. "shoulder.ogg", t = 2.65},
},
},
-- 15 22lr Round Reloads --
["reload_15_22lr"] = {
Source = "reload_15_22lr",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 67 / 30,
MinProgress = 1.6,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.45,
LHIKOut = 0.7,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.15},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.3},
{s = common .. "magpouch.ogg", t = 0.65, c = ci},
{s = path .. "magin.ogg", t = .9},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.4},
},
},
["reload_empty_15_22lr"] = {
Source = "reload_empty_15_22lr",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Time = 86 / 30,
MinProgress = 2.2,
LastClip1OutTime = 0.7,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.45,
LHIKOut = 0.6,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.0},
{s = path .. "magout.ogg", t = 0.15},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.5},
{s = common .. "pistol_magdrop.ogg", t = 0.9},
{s = common .. "magpouch.ogg", t = 0.7, c = ci},
{s = path .. "magin.ogg", t = 1.10},
{s = path .. "chback.ogg", t = 1.9},
{s = path .. "chamber.ogg", t = 2.0},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 2.3},
},
},
}
SWEP.Hook_ModifyBodygroups = function(wep,data)
local vm = data.vm
if !IsValid(vm) then return end
local atts = wep.Attachments
local barr = string.Replace(atts[2].Installed or "default","ud_mini14_barrel_","")
local muzz = atts[3].Installed
local tac = atts[6].Installed
if muzz or barr == "stub" or barr == "default" then
vm:SetBodygroup(7,2)
elseif barr == "short" then
vm:SetBodygroup(7,1)
elseif barr == "long" then
vm:SetBodygroup(7,0)
end
if !tac then
vm:SetBodygroup(6,0)
end
end
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp","optic","optic_sniper"},
Bone = "mini14_parent",
Offset = {
vpos = Vector(0, -3.6, 6),
vang = Angle(90, 2, -90),
},
VMScale = Vector(1.2,1.2,1.2),
WMScale = VMScale,
InstalledEles = {"ud_mini14_rail_optic"},
},
{
PrintName = "Barrel",
DefaultAttName = "20\" Standard Barrel",
DefaultAttIcon = Material("entities/att/acwatt_ud_mini14_barrel.png", "smooth mips"),
Slot = "ud_mini14_barrel",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"muzzle"},
Bone = "mini14_parent",
Offset = {
vpos = Vector(0, -2.15, 30),
vang = Angle(90, 0, -90),
wpos = vpos,
},
VMScale = Vector(1.5,1.5,1.5),
WMScale = VMScale,
ExcludeFlags = {"nomuzzle"},
},
{
PrintName = "Receiver",
DefaultAttName = "Mini-14 Receiver",
DefaultAttIcon = Material("entities/att/acwatt_ud_mini14_receiver.png", "smooth mips"),
Slot = "ud_mini14_receiver",
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "mini14_parent",
Offset = {
vpos = Vector(0, 0, 14),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_mini14_rail_fg"},
MergeSlots = {14}
},
{
PrintName = "Tactical",
Slot = {"tac"},
Bone = "mini14_parent",
Offset = {
vpos = Vector(0, -1.5, 22.3),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_mini14_clamp"},
},
{
PrintName = "Magazine",
Slot = {"ud_mini14_mag"},
DefaultAttName = "20-Round Mag",
DefaultAttIcon = Material("entities/att/acwatt_ud_mini14_mag_20.png", "smooth mips"),
},
{
PrintName = "Stock",
Slot = {"ud_mini14_stock"},
DefaultAttName = "Wooden Stock",
DefaultAttIcon = Material("entities/att/acwatt_ud_mini14_stock.png", "smooth mips"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "mini14_parent",
Offset = {
vpos = Vector(1.1, -0.5, 6),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "M203 slot",
Slot = "uc_ubgl",
Bone = "mini14_parent",
Offset = {
vpos = Vector(0, -1.2, 10),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_mini14_rail_fg"},
ExcludeFlags = {"ak_noubs","barrel_rpk"},
Hidden = true,
}
}

View File

@@ -0,0 +1,825 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Modern Weaponry"
SWEP.UC_CategoryPack = "1Urban Decay"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Effects --
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/9x19.mdl"
SWEP.ShellScale = 1
--SWEP.ShellMaterial = "models/weapons/arcticcw/shell_9mm"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.PistolShellSoundsTable
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 3
SWEP.TracerNum = 1
SWEP.TracerCol = Color(25, 255, 25)
SWEP.TracerWidth = 2
-- Fake name --
SWEP.PrintName = "IAL-9"
-- True name --
SWEP.TrueName = "Uzi"
-- Trivia --
SWEP.Trivia_Class = "Submachine Gun"
SWEP.Trivia_Desc = "Revolutionary submachine gun developed to arm a young State of Israel following the Second World War. Its ergonomic design, low cost, reliability, and great handling made it popular among militaries, police forces, and private security firms worldwide.\n\nBoasts excellent recoil control partially due to a below average cyclic rate. Good for hip firing in close quarters."
SWEP.Trivia_Manufacturer = "IAL Metal Industries"
SWEP.Trivia_Calibre = "9x19mm Parabellum"
SWEP.Trivia_Mechanism = "Open Bolt"
SWEP.Trivia_Country = "Israel"
SWEP.Trivia_Year = 1950
-- Weapon slot --
SWEP.Slot = 2
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Israeli Military Industries"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_uzi.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_uzi.mdl"
SWEP.ViewModelFOV = 70
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
-- Damage --
SWEP.Damage = 8
SWEP.DamageMin = 8
SWEP.Penetration = 1
SWEP.RangeMin = 15
SWEP.Range = 100 -- 4 shot until ~35m
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 400
SWEP.PhysBulletMuzzleVelocity = 400
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Mag size --
SWEP.ChamberSize = 0
SWEP.Primary.ClipSize = 32
SWEP.ExtendedClipSize = 40
SWEP.ReducedClipSize = 16
-- Recoil --
SWEP.Recoil = 0.3
SWEP.RecoilSide = 0.35
SWEP.RecoilRise = 0.2
SWEP.RecoilPunch = 1
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 0.6
SWEP.RecoilPunchBack = 1.5
SWEP.Sway = 0.3
-- Firerate / Firemodes --
SWEP.TriggerDelay = true
SWEP.Delay = 60 / 700
SWEP.Num = 1
SWEP.Firemodes = {
{
Mode = 2,
Mult_TriggerDelayTime = 2,
},
{
Mode = 1,
Mult_TriggerDelayTime = 1,
},
{
Mode = 0,
},
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 60
-- Accuracy --
SWEP.AccuracyMOA = 15
SWEP.HipDispersion = 400
SWEP.MoveDispersion = 100
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "pistol"
SWEP.MagID = "uzi"
SWEP.HeatCapacity = 75
SWEP.HeatDissipation = 15
SWEP.HeatDelayTime = 3
SWEP.MalfunctionMean = 200
SWEP.MalfunctionTakeRound = false
-- Speed multipliers --
SWEP.SpeedMult = 0.95
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.3
SWEP.ShootSpeedMult = 0.95
-- Length --
SWEP.BarrelLength = 24
SWEP.ExtraSightDist = 7
-- Ironsights / Customization / Poses --
SWEP.HolsterPos = Vector(0.5, -2, 1)
SWEP.HolsterAng = Angle(-8.5, 8, -10)
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-2.869, -6, 1.95),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "",
ViewModelFOV = 55,
}
SWEP.ActivePos = Vector(0.4, -1.9, 1.4)
SWEP.ActiveAng = Angle(0, 0, -3)
SWEP.CustomizePos = Vector(5, -2, -2)
SWEP.CustomizeAng = Angle(15, 25, 0)
SWEP.CrouchPos = Vector(-3, -3, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.BarrelOffsetHip = Vector(4, 0, -4)
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-16, 4, -3),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
-- Firing sounds --
local path = ")weapons/arccw_ud/uzi/"
local path1 = ")weapons/arccw_ud/glock/"
local common = ")/arccw_uc/common/"
--SWEP.FirstShootSound = path .. "fire.ogg"
--SWEP.ShootSound = path .. "fire_auto.ogg"
SWEP.ShootSoundSilenced = path1 .. "fire_supp.ogg"
SWEP.ShootDrySound = path .. "dryfire.ogg"
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
local tail = ")/arccw_uc/common/9x19/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-9x19-smg-ext-01.ogg",
tail .. "fire-dist-9x19-smg-ext-02.ogg",
tail .. "fire-dist-9x19-smg-ext-03.ogg",
tail .. "fire-dist-9x19-smg-ext-04.ogg",
tail .. "fire-dist-9x19-smg-ext-05.ogg",
tail .. "fire-dist-9x19-smg-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-pistol-01.ogg",
common .. "fire-dist-int-pistol-02.ogg",
common .. "fire-dist-int-pistol-03.ogg",
common .. "fire-dist-int-pistol-04.ogg",
common .. "fire-dist-int-pistol-05.ogg",
common .. "fire-dist-int-pistol-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 0.5
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Bodygroups --
SWEP.BulletBones = {
[1] = "uzi_b1", [2] = "uzi_b2", [3] = "uzi_b3", [4] = "uzi_b4"
}
SWEP.AttachmentElements = {
["ud_uzi_mag_20"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["ud_uzi_mag_40"] = {
VMBodygroups = {{ind = 2, bg = 2}},
},
["ud_uzi_mag_100"] = {
VMBodygroups = {{ind = 2, bg = 3}},
},
["ud_uzi_mag_45_10"] = {
VMBodygroups = {{ind = 2, bg = 1}},
},
["ud_uzi_mag_45_22"] = {
VMBodygroups = {{ind = 2, bg = 2}},
},
["ud_uzi_rail_optic"] = {
VMBodygroups = {{ind = 4, bg = 2}},
},
["ud_uzi_clamp"] = {
VMBodygroups = {{ind = 6, bg = 1}},
},
["ud_uzi_rail_fg"] = {
VMBodygroups = {{ind = 5, bg = 1}},
},
["ud_uzi_stock_wood"] = {
VMBodygroups = {{ind = 3, bg = 2}},
},
["ud_uzi_stock_polymer"] = {
VMBodygroups = {{ind = 3, bg = 3}},
},
["ud_uzi_stock_folded"] = {
VMBodygroups = {{ind = 3, bg = 1}},
},
["ud_uzi_stock_remove"] = {
VMBodygroups = {{ind = 3, bg = 4}},
},
["ud_uzi_body_carbine"] = {
VMBodygroups = {{ind = 1, bg = 1}},
NameChange = "IAL-C9",
TrueNameChange = "Uzi Carbine",
AttPosMods = {
[4] = {
vpos = Vector(-0.2, 0.5, 20.8),
},
},
},
["ud_uzi_body_mini"] = {
VMBodygroups = {{ind = 1, bg = 2}},
NameChange = "IAL-S9",
TrueNameChange = "Mini Uzi",
AttPosMods = {
[4] = {
vpos = Vector(-0.2, 0.5, 11.8),
},
},
},
["ud_uzi_body_micro"] = {
VMBodygroups = {{ind = 1, bg = 3},{ind = 4, bg = 1},{ind = 3, bg = 4}},
NameChange = "IAL-M9",
TrueNameChange = "Micro Uzi",
Override_IronSightStruct = {
Pos = Vector(-2.869, 3, 1.95),
Ang = Angle(-0, 0.035, 0),
Magnification = 1,
CrosshairInSights = false
},
AttPosMods = {
[1] = {
vpos = Vector(-0.2, -1.8, -1.5),
},
[4] = {
vpos = Vector(-0.2, 0.3, 7.8),
},
[6] = {
vpos = Vector(-0.25, 1.4, 6),
vang = Angle(90, 0, -90),
},
},
},
["ud_uzi_body_civvy"] = {
VMBodygroups = {{ind = 1, bg = 4}},
NameChange = "IAL-C9 Model GB",
TrueNameChange = "Uzi Action-B",
AttPosMods = {
[4] = {
vpos = Vector(-0.2, 0.5, 23.8),
},
},
},
}
SWEP.Hook_ModifyBodygroups = function(wep, data)
local vm = data.vm
if !IsValid(vm) then return end
local barrel = wep.Attachments[2].Installed
if barrel == "ud_uzi_body_micro" then
if wep.Attachments[1].Installed then
vm:SetBodygroup(4, 3)
end
if wep.Attachments[6].Installed then
vm:SetBodygroup(6, 0)
vm:SetBodygroup(5, 2)
end
end
end
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
SWEP.Animations = {
["ready"] = {
Source = "fix",
Time = 40 / 30,
ShellEjectAt = false,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = common .. "raise.ogg", t = 0},
{s = common .. "rattle.ogg", t = 0.2},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.15},
{s = path .. "chback.ogg", t = 0.3, c = ci},
{s = path .. "chforward.ogg", t = 0.65, c = ci},
},
ProcDraw = true,
},
["idle"] = {
Source = "idle",
},
["idle_empty"] = {
Source = "idle_empty",
},
["draw"] = {
Source = "draw",
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_empty"] = {
Source = "draw_empty",
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
Time = 0.25,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_empty"] = {
Source = "holster_empty",
Time = 0.25,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire",
Time = 13 / 30,
ShellEjectAt = 0.03,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
Time = 13 / 30,
ShellEjectAt = 0.03,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg"}, t = 0 }},
},
["fire_empty"] = {
Source = "fire_empty",
Time = 13 / 30,
ShellEjectAt = 0.03,
SoundTable = {{ s = path .. "chforward.ogg", t = 0 }},
},
["trigger"] = {
Source = "idle",
Time = 0.025,
SoundTable = {
{s = path .. "prefire.ogg", t = 0, c = ci},
},
},
["trigger_empty"] = {
Source = "idle",
Time = 0,
SoundTable = nil,
},
["fix"] = {
Source = "fix",
Time = 40 / 30,
ShellEjectAt = false,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.15},
{s = path .. "chback.ogg", t = 0.3, c = ci},
{s = path .. "chforward.ogg", t = 0.65, c = ci},
},
},
["fix_empty"] = {
Source = "fix_empty",
Time = 40 / 30,
ShellEjectAt = false,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.15},
{s = path .. "chback.ogg", t = 0.3, c = ci},
{s = path .. "chforward.ogg", t = 0.65, c = ci},
},
},
["fix_micro"] = {
Source = "fix_micro",
Time = 40 / 30,
ShellEjectAt = false,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.15},
{s = path .. "chback.ogg", t = 0.3, c = ci},
{s = path .. "chforward.ogg", t = 0.65, c = ci},
},
},
["fix_empty_micro"] = {
Source = "fix_empty_micro",
Time = 40 / 30,
ShellEjectAt = false,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.15},
{s = path .. "chback.ogg", t = 0.3, c = ci},
{s = path .. "chforward.ogg", t = 0.65, c = ci},
},
},
-- 32 Round Reloads --
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 67 / 30,
MinProgress = 1.2,
LastClip1OutTime = 67 / 30,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.6,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = common .. "magpouch.ogg", t = 0.025},
{s = path .. "magout.ogg", t = 0.25, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = path .. "magin.ogg", t = 0.55, c = ci},
{s = common .. "magpouchin.ogg", t = 1.35, v = .35},
{s = common .. "shoulder.ogg", t = 1.75},
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 90 / 30,
MinProgress = 2.2,
LastClip1OutTime = 1.8,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.3,
LHIKEaseOut = 0.2,
LHIKOut = 0.55,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "magout.ogg", t = 0.4, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = common .. "magpouch.ogg", t = 0.85},
{s = common .. "magdrop_smg.ogg", t = 1.0},
{s = path .. "magin.ogg", t = 1.1, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.25},
{s = path .. "chback.ogg", t = 1.935, c = ci},
{s = path .. "chforward.ogg", t = 2.15, c = ci},
{s = common .. "shoulder.ogg", t = 2.6},
},
},
-- 16 Round Reloads --
["reload_16"] = {
Source = "reload_16",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 67 / 30,
MinProgress = 1.2,
LastClip1OutTime = 67 / 30,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.6,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = common .. "magpouch.ogg", t = 0.025},
{s = path .. "magout.ogg", t = 0.25, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = path .. "magin.ogg", t = 0.55, c = ci},
{s = common .. "magpouchin.ogg", t = 1.35, v = .35},
{s = common .. "shoulder.ogg", t = 1.75},
},
},
["reload_empty_16"] = {
Source = "reload_empty_16",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 90 / 30,
MinProgress = 2.2,
LastClip1OutTime = 1.8,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.3,
LHIKEaseOut = 0.2,
LHIKOut = 0.55,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "magout.ogg", t = 0.4, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = common .. "magpouch.ogg", t = 0.85},
{s = common .. "magdrop_smg.ogg", t = 1.0},
{s = path .. "magin.ogg", t = 1.1, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.25},
{s = path .. "chback.ogg", t = 1.947, c = ci},
{s = path .. "chforward.ogg", t = 2.15, c = ci},
{s = common .. "shoulder.ogg", t = 2.45},
},
},
-- 41 Round Reloads --
["reload_41"] = {
Source = "reload_41",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 67 / 30,
MinProgress = 1.2,
LastClip1OutTime = 67 / 30,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.6,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = common .. "magpouch.ogg", t = 0.025},
{s = path .. "magout.ogg", t = 0.35, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = path .. "magin.ogg", t = 0.65, c = ci},
{s = common .. "magpouchin.ogg", t = 1.35, v = .35},
{s = common .. "shoulder.ogg", t = 1.75},
},
},
["reload_empty_41"] = {
Source = "reload_empty_41",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 90 / 30,
MinProgress = 2.2,
LastClip1OutTime = 1.8,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.3,
LHIKEaseOut = 0.2,
LHIKOut = 0.55,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "magout.ogg", t = 0.4, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = common .. "magpouch.ogg", t = 0.85},
{s = common .. "magdrop_smg.ogg", t = 1.0},
{s = path .. "magin.ogg", t = 1.1, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 1.25},
{s = path .. "chback.ogg", t = 1.947, c = ci},
{s = path .. "chforward.ogg", t = 2.15, c = ci},
{s = common .. "shoulder.ogg", t = 2.6},
},
},
-- 100 Round Reloads --
["reload_100"] = {
Source = "reload_100",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 67 / 30,
MinProgress = 1.6,
LastClip1OutTime = 1,
LHIK = true,
LHIKIn = 0.4,
LHIKEaseIn = 0.4,
LHIKEaseOut = 0.15,
LHIKOut = 0.4,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "magout.ogg", t = 0.25, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.75},
{s = path .. "magin.ogg", t = 1.15, c = ci},
{s = common .. "cloth_4.ogg", t = 1.65},
{s = common .. "shoulder.ogg", t = 1.95},
},
},
["reload_empty_100"] = {
Source = "reload_empty_100",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Time = 90 / 30,
MinProgress = 2.4,
LastClip1OutTime = 1.8,
LHIK = true,
LHIKIn = 0.3,
LHIKEaseIn = 0.3,
LHIKEaseOut = 0.2,
LHIKOut = 0.55,
SoundTable = {
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0},
{s = path .. "magout.ogg", t = 0.25, c = ci},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.25},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.75},
{s = common .. "magdrop.ogg", t = 1.0},
{s = path .. "magin.ogg", t = 1.15, c = ci},
{s = common .. "cloth_4.ogg", t = 1.65},
{s = path .. "chback.ogg", t = 2.0, c = ci},
{s = path .. "chforward.ogg", t = 2.25, c = ci},
{s = common .. "shoulder.ogg", t = 2.7},
},
},
}
SWEP.AutosolveSourceSeq = "idle"
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp","optic"}, -- ,"optic"
Bone = "uzi_parent",
Offset = {
vpos = Vector(-0.2, -1.55, -0.5),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_uzi_rail_optic"}
},
{
PrintName = "Barrel",
DefaultAttName = "10\" Standard Barrel",
DefaultAttIcon = Material("entities/att/acwatt_ud_uzi_body.png", "smooth mips"),
Slot = "ud_uzi_frame",
Bone = "uzi_parent",
Offset = {
vpos = Vector(2.6, -3.7, -17.3),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Caliber",
DefaultAttName = "9x19mm Parabellum",
DefaultAttIcon = Material("entities/att/uc_bullets/9x19.png", "smooth mips"),
Slot = "ud_uzi_caliber",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"muzzle"},
Bone = "uzi_parent",
Offset = {
vpos = Vector(-0.2, 0.5, 14.8),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "uzi_parent",
Offset = {
vpos = Vector(-0.2, 1.85, 6.9), -- nice
vang = Angle(90, 0, -90),
},
InstalledEles = {"ud_uzi_rail_fg"},
ExcludeFlags = {"micro"}
},
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "uzi_parent",
Offset = {
vpos = Vector(-1.35, 0.9,5.8),
vang = Angle(90, 0, 180),
},
InstalledEles = {"ud_uzi_clamp"}
},
{
PrintName = "Stock",
Slot = {"ud_uzi_stock"},
DefaultAttName = "Folding Stock",
DefaultAttIcon = Material("entities/att/acwatt_ud_uzi_stock.png", "smooth mips"),
ExcludeFlags = {"micro"},
},
{
PrintName = "Magazine",
Slot = {"ud_uzi_mag"},
DefaultAttName = "32-Round Mag",
DefaultAttIcon = Material("entities/att/acwatt_ud_uzi_mag_32.png", "smooth mips"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "uzi_parent",
Offset = {
vpos = Vector(0.4, 1.3, 2.3),
vang = Angle(90, 0, -90),
},
},
}

View File

@@ -0,0 +1,575 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Oldie Weaponry"
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_pistol_deagle"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/50ae.mdl"
SWEP.ShellScale = 1
SWEP.UC_ShellColor = Color(0.7*255, 0.2*255, 0.2*255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.TracerNum = 1
SWEP.TracerWidth = 1
SWEP.ShootPitch = 100
-- Fake name --
SWEP.PrintName = "Enforcement .44"
-- True name --
SWEP.TrueName = "Model 329PD"
-- Trivia --
SWEP.Trivia_Class = "Revolver"
SWEP.Trivia_Desc = [[Though commonly viewed as archaic, revolvers maintain a large following today for their reliability, accuracy, and evocative sentiment. This model was famously "the most powerful handgun in the world" at its time, though its usurpers have not changed the fact that it packs a mean punch.
Has a heavy trigger pull. Single-action mode removes trigger delay and increases accuracy, but requires manual cocking of the hammer.]]
SWEP.Trivia_Manufacturer = "Sneed & Walwakashi"
SWEP.Trivia_Calibre = ".44 Magnum"
SWEP.Trivia_Mechanism = "Double-Action"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1955
-- Weapon slot --
SWEP.Slot = 1
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Smith & Wesson"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ur_329pd.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ur_329pd.mdl"
SWEP.ViewModelFOV = 70
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_REVOLVER
-- Damage parameters --
SWEP.Damage = 45 -- 2 shot close range kill
SWEP.DamageMin = 45 -- 7 shot long range kill
SWEP.RangeMin = 10
SWEP.Range = 160
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 470
SWEP.PhysBulletMuzzleVelocity = 470
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Jamming --
SWEP.MalfunctionTakeRound = false
SWEP.MalfunctionMean = math.huge -- Theoretically it will never malfunction
-- Mag size --
SWEP.ChamberSize = 0
SWEP.Primary.ClipSize = 6
SWEP.RejectMagSizeChange = true -- Signals to attachments that mag size shouldn't be changeable; needs to be implemented attachment-side with att.Compatible
SWEP.UC_CanManualAction = true -- In case this ever applies to anything other than shotguns
-- Recoil --
SWEP.Recoil = 2.5
SWEP.RecoilSide = 1
SWEP.RecoilRise = 1
SWEP.VisualRecoilMult = 1.5
SWEP.MaxRecoilBlowback = 2
SWEP.MaxRecoilPunch = 6
SWEP.Sway = 1.1
-- Firerate / Firemodes --
SWEP.TriggerDelay = true
SWEP.Delay = 0.25
SWEP.Num = 1
SWEP.FiremodeSound = false
SWEP.Firemodes = {
{
Mode = 1,
PrintName = "ur.329.dact",
},
{
Mode = 0,
PrintName = "fcg.safe2",
}
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = false -- can't in mw and can't here
-- NPC --
SWEP.NPCWeaponType = "weapon_357"
SWEP.NPCWeight = 70
-- Accuracy --
SWEP.AccuracyMOA = 5
SWEP.HipDispersion = 500
SWEP.MoveDispersion = 250
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "357"
SWEP.MagID = "deagle"
-- Speed multipliers --
SWEP.SpeedMult = 0.95
SWEP.SightedSpeedMult = 0.9
SWEP.SightTime = 0.25
SWEP.ShootSpeedMult = 0.8
-- Length --
SWEP.BarrelLength = 12
SWEP.ExtraSightDist = 10
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "revolver"
SWEP.HoldtypeSights = "revolver"
SWEP.IronSightStruct = {
Pos = Vector(-2.7, 2, 0.733),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "",
ViewModelFOV = 55,
}
SWEP.ActivePos = Vector(0, 2, 0.9)
SWEP.ActiveAng = Angle(0, 0, -1)
SWEP.CustomizePos = Vector(2, 0, -1.5)
SWEP.CustomizeAng = Angle(15, 15, 05)
SWEP.CrouchPos = Vector(-2.2, 1, 0.6)
SWEP.CrouchAng = Angle(0, 0, -14)
SWEP.HolsterPos = Vector(-1, 2, 1)
SWEP.HolsterAng = Angle(-15.5, 2, -4)
SWEP.SprintPos = Vector(0.3, 1, 0)
SWEP.SprintAng = Angle(-3, 9, -12)
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-7.5, 4, -4.5),
ang = Angle(-6, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
}
-- Weapon sounds --
local path = ")weapons/arccw_ur/sw329/"
local path1 = ")weapons/arccw_ur/sw586/"
local path2 = ")weapons/arccw_ur/1911/"
local common = ")/arccw_uc/common/"
local rottle = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.DistantShootSound = nil
SWEP.DistantShootSoundSilenced = nil
SWEP.ShootDrySound = {common .. "revolver_hammer-01.ogg", common .. "revolver_hammer-02.ogg", common .. "revolver_hammer-03.ogg"}
local tail = ")/arccw_uc/common/44mag/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-44mag-pistol-ext-01.ogg",
tail .. "fire-dist-44mag-pistol-ext-02.ogg",
tail .. "fire-dist-44mag-pistol-ext-03.ogg",
tail .. "fire-dist-44mag-pistol-ext-04.ogg",
tail .. "fire-dist-44mag-pistol-ext-05.ogg",
tail .. "fire-dist-44mag-pistol-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
path .. "fire-dist-01.ogg",
path .. "fire-dist-02.ogg",
path .. "fire-dist-03.ogg",
path .. "fire-dist-04.ogg",
path .. "fire-dist-05.ogg",
path .. "fire-dist-06.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 0.75
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Bodygroups --
SWEP.BulletBones = {
[1] = "Bullet1", [2] = "Bullet2", [3] = "Bullet3", [4] = "Bullet4", [5] = "Bullet5", [6] = "Bullet6"
}
SWEP.DefaultBodygroups = "000000000"
SWEP.AttachmentElements = {
["ur_329_barrel_m29"] = {
VMBodygroups = { { ind = 1, bg = 1 } },
NameChange = "Thunderbolt .44",
TrueNameChange = "Model 29"
},
["ur_329_barrel_master"] = {
VMBodygroups = { { ind = 1, bg = 2 } },
NameChange = "Thunderbolt .44 Master",
TrueNameChange = "Model 29"
},
["ur_329_barrel_pocket"] = {
VMBodygroups = { { ind = 1, bg = 3 } },
NameChange = "Companion .44",
TrueNameChange = "Model 629"
}
}
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
SWEP.RevolverReload = true
SWEP.Hook_TranslateAnimation = function(wep,anim)
if wep:GetCurrentFiremode().Override_ManualAction and anim == "fire_dry" then
return "fire_dry_sact"
end
if wep:GetCurrentFiremode().Override_ManualAction and anim ~= "fire" and (anim ~= "reload" or !wep:GetNeedCycle()) then
return anim .. "_cocked"
end
end
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 3,
},
["idle_cocked"] = {
Source = "idle_cocked",
Time = 3,
},
["ready"] = {
Source = "ready",
Time = 86 / 60,
SoundTable = {
{s = path2 .. "draw.ogg", t = 0},
{ s = path1 .. "cylinder_in.ogg", t = 0.2 },
{s = common .. "raise.ogg", t = 0.55},
},
},
["draw"] = {
Source = "draw",
Time = 0.7,
MinProgress = .4,
SoundTable = {
{s = path2 .. "draw.ogg", t = 0}, -- Not Temporary
{s = common .. "raise.ogg", t = 0.05},
},
},
["draw_cocked"] = {
Source = "draw_cocked",
Time = 0.7,
MinProgress = .4,
SoundTable = {
{s = path2 .. "draw.ogg", t = 0}, -- Not Temporary
{s = common .. "raise.ogg", t = 0.05},
},
},
["holster"] = {
Source = "holster",
Time = 0.5,
SoundTable = {
{s = common .. "cloth_2.ogg", t = 0},
{s = path2 .. "holster.ogg", t = 0.12}, -- Not Temporary
},
},
["holster_cocked"] = {
Source = "holster_cocked",
Time = 0.5,
SoundTable = {
{s = common .. "cloth_2.ogg", t = 0},
{s = path2 .. "holster.ogg", t = 0.12}, -- Not Temporary
},
},
["fire"] = {
Source = "fire",
SoundTable = {
{ s = {common .. "revolver_hammer-01.ogg", common .. "revolver_hammer-02.ogg", common .. "revolver_hammer-03.ogg"}, t = 0 }
},
MinProgress = .2,
},
["fire_dry"] = {
Source = "dryfire",
SoundTable = {
{ s = {common .. "revolver_hammer-01.ogg", common .. "revolver_hammer-02.ogg", common .. "revolver_hammer-03.ogg"}, t = 0 }
},
},
["fire_dry_sact"] = {
Source = "dryfire_sact",
SoundTable = {
{ s = {common .. "revolver_hammer-01.ogg", common .. "revolver_hammer-02.ogg", common .. "revolver_hammer-03.ogg"}, t = 0 },
{ s = { common .. "revolver_trigger-01.ogg", common .. "revolver_trigger-03.ogg" }, t = 0.25 + 0.2 },
},
},
["trigger"] = {
Source = "trigger",
Time = 0.1,
SoundTable = {
{ s = { common .. "revolver_trigger-01.ogg", common .. "revolver_trigger-02.ogg", common .. "revolver_trigger-03.ogg" }, t = 0 }
},
},
["cycle"] = {
Source = "cocking",
MinProgress = 0.5,
SoundTable = {
{ s = { common .. "revolver_trigger-01.ogg", common .. "revolver_trigger-03.ogg" }, t = 0.2 }
}
},
["fix"] = {
Source = "cocking",
MinProgress = 0.5,
SoundTable = {
{ s = { common .. "revolver_trigger-01.ogg", common .. "revolver_trigger-03.ogg" }, t = 0.2 }
}
},
["1_to_2"] = {
Source = "cocking",
Time = 0.8,
SoundTable = {
{ s = { common .. "revolver_trigger-01.ogg", common .. "revolver_trigger-03.ogg" }, t = 0.1 }
}
},
["2_to_1"] = {
Source = "decocking",
Time = 0.8,
SoundTable = {
{ s = common .. "revolver_trigger-02.ogg", t = 0.1 }
}
},
["2_to_3"] = {
Source = "decocking",
Time = 0.8,
SoundTable = {
{ s = common .. "revolver_trigger-02.ogg", t = 0.1 }
}
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
Time = 3.0,
MinProgress = 1.8,
ShellEjectAt = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.6,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 },
{ s = path .. "cyl_latch.ogg", t = 0.1 },
{ s = path1 .. "cylinder_out.ogg", t = 0.2 },
{ s = path1 .. "extractor1.ogg", t = 0.65 },
{ s = path1 .. "extract1.ogg", t = 0.65, p = 110, v = 0.25 },
{ s = path1 .. "extractor2.ogg", t = 0.75, p = 110 },
{ s = path1 .. "cylinder_extract.ogg", t = 0.75 },
{ s = path1 .. "extractor2.ogg", t = 0.825 },
{ s = common .. "magpouch_pull_small.ogg", t = 1.2, v = 0.2 },
{ s = path1 .. "speedloader.ogg", t = 1.65 },
{ s = path1 .. "cylinder_in.ogg", t = 2.15 },
{ s = rottle, t = 2.4 },
},
},
["reload_cocked"] = {
Source = "reload_cocked",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
Time = 3.0,
MinProgress = 1.8,
ShellEjectAt = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.6,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 },
{ s = path .. "cyl_latch.ogg", t = 0.1 },
{ s = path1 .. "cylinder_out.ogg", t = 0.2 },
{ s = path1 .. "extractor1.ogg", t = 0.65 },
{ s = path1 .. "extract1.ogg", t = 0.65, p = 110, v = 0.25 },
{ s = path1 .. "extractor2.ogg", t = 0.75, p = 110 },
{ s = path1 .. "cylinder_extract.ogg", t = 0.75 },
{ s = path1 .. "extractor2.ogg", t = 0.825 },
{ s = common .. "magpouch_pull_small.ogg", t = 1.2, v = 0.2 },
{ s = path1 .. "speedloader.ogg", t = 1.65 },
{ s = path1 .. "cylinder_in.ogg", t = 2.15 },
{ s = rottle, t = 2.4 },
},
},
}
-- Attachments --
SWEP.CamAttachment = 3
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp"},
DefaultAttName = "Iron Sights",
Bone = "Body",
Offset = {
vpos = Vector(3, -3.6, 0),
vang = Angle(0, 0, -90),
},
},
{
PrintName = "Barrel",
Slot = {"ur_329_barrel"},
DefaultAttIcon = Material("entities/att/acwatt_ur_329_barrel.png","mips smooth"),
DefaultAttName = "4\" Snubnose Barrel",
Bone = "Body",
Offset = {
vpos = Vector(3.07, -3.8, -27),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Caliber",
Slot = {"ur_329_caliber"},
DefaultAttIcon = Material("entities/att/uc_bullets/44magnum.png","mips smooth"),
DefaultAttName = ".44 Magnum",
Bone = "Body",
Offset = {
vpos = Vector(3.07, -3.8, -27),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Tactical",
InstalledEles = {"tac_rail"},
Slot = {"tac_pistol"},
Bone = "Body",
Offset = {
vpos = Vector(6.75, -2.5, 0),
vang = Angle(0, 0, -90),
},
},
{
PrintName = "Grip",
Slot = {"ur_329_grip", "uc_stock", "go_stock_pistol_bt"},
Bone = "Body",
Offset = {
vpos = Vector(-2, 2, 0),
vang = Angle(0, 0, -90),
},
},
--[[]
{
PrintName = "Grip",
DefaultAttName = "Factory Grip",
DefaultAttIcon = Material("entities/att/acwatt_ur_329_grip.png","mips smooth"),
Slot = "ur_329_grip"
},
]]
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
ExcludeFlags = {"329_ss"}
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals",
},
{
PrintName = "Charm",
Slot = {"charm","fml_charm"},
FreeSlot = true,
Bone = "Body",
Offset = {
vpos = Vector(7.1, -2.4, -0.1),
vang = Angle(0, 0, -90),
},
VMScale = Vector(.75,.75,.75),
},
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,942 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.PrintName = "AWP"
SWEP.Trivia_Class = "Sniper Rifle"
SWEP.Trivia_Desc = "A heavy rifle purpose-built for extreme range combat under extreme climates, first developed for the British military but quickly adopted by many more. Iconic for its appearance among military and police marksmen, this rifle is a symbol of discipline and order.\n\nOffers outstanding precision and kill potential, but its long bolt pull and reload time can become a hinderance outside its ideal engagement range.\n\nOne shot. One kill. You know the routine."
SWEP.Trivia_Manufacturer = "Accuracy International"
SWEP.Trivia_Calibre = "7.62x51mm NATO"
SWEP.Trivia_Mechanism = "Bolt Action"
SWEP.Trivia_Country = "United Kingdom"
SWEP.Trivia_Year = 1982
if !GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = "Apex Precision"
SWEP.Trivia_Manufacturer = "Marksman Institute"
end
SWEP.Slot = 3
SWEP.CamAttachment = 3
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/arccw/c_ur_aw.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ur_aw.mdl"
SWEP.ViewModelFOV = 70
SWEP.DefaultBodygroups = "000000000000"
SWEP.BulletBones = {
--[1] = "top_round",
[2] = "mag_round",
}
-- Damage --
SWEP.Damage = 95 -- 2 shot close range
SWEP.DamageMin = 95 -- 2 shot long range
SWEP.RangeMin = 100
SWEP.Range = 400 -- 2 shot at ~300m
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 1050
SWEP.PhysBulletMuzzleVelocity = 1400
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 5
SWEP.ExtendedClipSize = 10
SWEP.ReducedClipSize = 5
-- Recoil --
SWEP.Recoil = 3.3
SWEP.RecoilSide = 0.550
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.VisualRecoilMult = 5
SWEP.MaxRecoilBlowback = 4
SWEP.MaxRecoilPunch = 4
SWEP.RecoilPunchBack = 3
SWEP.RecoilPunchBackMax = 3.5
SWEP.RecoilPunchBackMaxSights = 2.5
SWEP.Sway = 0.2
-- Firerate / Firemodes --
SWEP.Delay = 60 / 80
SWEP.Num = 1
SWEP.Firemodes = {
{
PrintName = "fcg.bolt",
Mode = 1,
},
{
Mode = 0,
},
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_crossbow"
SWEP.NPCWeight = 100
-- Accuracy --
SWEP.AccuracyMOA = .5
SWEP.HipDispersion = 1500
SWEP.MoveDispersion = 25
SWEP.JumpDispersion = 700 -- tactical unrealism set to 700 later
SWEP.Primary.Ammo = "ar2"
SWEP.MagID = "awp"
SWEP.HeatCapacity = 75
SWEP.HeatDissipation = 15
SWEP.HeatDelayTime = 3
-- SWEP.Malfunction = true
SWEP.MalfunctionMean = 200
--SWEP.MeleeTime = 1.5
-- Speed multipliers --
SWEP.SpeedMult = 0.8
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.4
SWEP.ShootSpeedMult = 0.5
local path = ")weapons/arccw_ur/ak/"
local testpath = ")weapons/arccw_ur/aw_placeholders/"
local path1 = ")weapons/arccw_ur/aw_placeholders/338/"
local path1 = ")weapons/arccw_ur/mp5/"
local common = ")/arccw_uc/common/"
local rottle = {common .. "cloth_1.ogg", common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local ratel = {common .. "rattle1.ogg", common .. "rattle2.ogg", common .. "rattle3.ogg"}
local rutle = {common .. "movement-sniper-03.ogg",common .. "movement-sniper-04.ogg"}
SWEP.ShootSound = {
testpath .. "fire-01.ogg",
testpath .. "fire-02.ogg",
testpath .. "fire-03.ogg",
testpath .. "fire-04.ogg",
testpath .. "fire-05.ogg",
testpath .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = {
testpath .. "fire-sup-01.ogg",
testpath .. "fire-sup-02.ogg",
testpath .. "fire-sup-03.ogg",
testpath .. "fire-sup-04.ogg",
testpath .. "fire-sup-05.ogg",
testpath .. "fire-sup-06.ogg"
}
SWEP.DistantShootSound = nil
SWEP.DistantShootSoundSilenced = nil
SWEP.ShootDrySound = testpath .. "dryfire.ogg"
local tail = ")/arccw_uc/common/308/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-308-rif-ext-01.ogg",
tail .. "fire-dist-308-rif-ext-02.ogg",
tail .. "fire-dist-308-rif-ext-03.ogg",
tail .. "fire-dist-308-rif-ext-04.ogg",
tail .. "fire-dist-308-rif-ext-05.ogg",
tail .. "fire-dist-308-rif-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
SWEP.MuzzleEffect = "muzzleflash_ak47"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/556x45.mdl"
SWEP.ShellPitch = 90
SWEP.ShellScale = 1.145
SWEP.ShellRotateAngle = Angle(0, 0, 0)
SWEP.ManualAction = true
-- SWEP.ManualAction = false
SWEP.NoLastCycle = true
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.IronSightStruct = {
Pos = Vector(-3.37, -5, 0.68),
Ang = Angle(0, 0, 2),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.LaserOffsetAngle = Angle(0, 0, 0)
SWEP.LaserIronsAngle = Angle(0, 1.5, 0)
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-0.1, 0.1, 0.2)
SWEP.ActiveAng = Angle(0, 0, -1)
SWEP.SprintPos = Vector(-1, -1, 1.2)
SWEP.SprintAng = Angle(-15, 8, -10)
SWEP.CrouchPos = Vector(-2, -2, -0.8)
SWEP.CrouchAng = Angle(0, 0, -14)
SWEP.HolsterPos = Vector(-1, -1, 1.2)
SWEP.HolsterAng = Angle(-15, 8, -10)
SWEP.BarrelOffsetSighted = Vector(0, 0, 0)
SWEP.BarrelOffsetHip = Vector(0, 0, 0)
SWEP.CustomizePos = Vector(0, 0, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
-- SWEP.CustomizePos = Vector(6.5, 0.8, -0.2)
-- SWEP.CustomizeAng = Angle(8, 18, 15)
SWEP.BarrelLength = 54
SWEP.AttachmentElements = {
["barrel_long"] = {
VMBodygroups = {{ind = 2, bg = 1}},
AttPosMods = {[3] = {
vpos = Vector(0, 40, 1.75),
vang = Angle(0, 270, 0),
}}
},
["barrel_short"] = {
VMBodygroups = {{ind = 2, bg = 2}},
AttPosMods = {[3] = {
vpos = Vector(0, 28, 1.75),
vang = Angle(0, 270, 0),
}}
},
["barrel_sd"] = {
VMBodygroups = {{ind = 2, bg = 3}}
},
["mag_338"] = {
--VMBodygroups = {{ind = 3, bg = 2}}
},
["mag_300"] = {
--VMBodygroups = {{ind = 3, bg = 2}}
},
["mag_ext"] = {
--VMBodygroups = {{ind = 3, bg = 1}}
},
["mag_ext_magnum"] = {
--VMBodygroups = {{ind = 3, bg = 3}}
},
["rail_bottom"] = {
VMBodygroups = {{ind = 6, bg = 1}}
},
["rail_top"] = {
VMBodygroups = {{ind = 7, bg = 1}}
},
["sights_compact"] = {
VMBodygroups = {{ind = 8, bg = 2}},
Override_IronSightStruct = {
Pos = Vector(-3.395, -5, 1.35),
Ang = Angle(0, 0, 2),
Magnification = 1,
}
},
["sights_flipped"] = {
VMBodygroups = {{ind = 8, bg = 1}}
},
["skin_black"] = {
VMSkin = 1
},
["skin_tan"] = {
VMSkin = 2
},
["skin_cust"] = {
VMSkin = 3
},
["stock_at"] = {
VMBodygroups = {{ind = 4, bg = 1}}
},
["stock_ru"] = {
VMBodygroups = {{ind = 4, bg = 2}}
},
["stock_ru_rubber"] = {
VMBodygroups = {{ind = 4, bg = 3}}
},
["stock_fixed"] = {
VMBodygroups = {
{ind = 4, bg = 4},
{ind = 5, bg = 1},
}
},
["stock_none"] = {
VMBodygroups = {
{ind = 4, bg = 5},
}
},
}
SWEP.ExtraSightDist = 2
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-7, 5, -4.8),
ang = Angle(-12, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material("entities/att/ur_aw/ironsights.png", "mips smooth"),
Slot = {"optic","optic_lp","optic_sniper"},
Bone = "tag_weapon",
Offset = {
vpos = Vector(0, 6, 2.65),
vang = Angle(0, -90, 0),
},
CorrectivePos = Vector(0, 0, 0),
CorrectiveAng = Angle(0, 180, 0),
VMScale = Vector(1.05, 1.05, 1.05),
SlideAmount = {
vmin = Vector(0, 5.5, 2.65),
vmax = Vector(0, 7, 2.65),
},
},
{
PrintName = "Barrel",
DefaultAttName = "24\" Police Barrel",
DefaultAttIcon = Material("entities/att/ur_aw/bar_def.png", "mips smooth"),
Slot = "ur_aw_barrel",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"muzzle","ur_aw_muzzle"},
Bone = "tag_weapon",
VMScale = Vector(1.5, 1.5, 1.5),
WMScale = VMScale,
Offset = {
vpos = Vector(0, 35.2, 1.675),
vang = Angle(0, 270, 0),
},
ExcludeFlags = {"barrel_sd"},
Installed = "ur_aw_muzzle_brake",
},
{
PrintName = "Caliber",
DefaultAttName = "7.62x51mm NATO",
DefaultAttIcon = Material("entities/att/uc_bullets/762x51.png", "mips smooth"),
Slot = {"ur_aw_cal"},
Bone = "tag_weapon",
Offset = {
vpos = Vector(2.8, -4.2, -11.5),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Magazine",
Slot = {"ur_aw_mag"},
DefaultAttName = "5-Round Mag",
DefaultAttIcon = Material("entities/att/ur_aw/mag308_5.png", "mips smooth"),
ExcludeFlags = {"mag_338"}
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "tag_weapon",
Offset = {
vpos = Vector(0,16, -.6),
vang = Angle(90, -90, -90),
},
VMScale = Vector(1, 1, 1),
InstalledEles = {"rail_bottom"},
},
{
PrintName = "Tactical",
Slot = {"tac"},
Bone = "tag_weapon",
Offset = {
vpos = Vector(-1.2, 16, 1.1),
vang = Angle(-90, 270, 0),
},
GivesFlags = {"tac"},
InstalledEles = {"rail_top"}
},
{
PrintName = "Stock",
Slot = {"ur_aw_stock"},
DefaultAttName = "Factory Stock",
DefaultAttIcon = Material("entities/att/ur_aw/stock_def.png", "mips smooth"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
HideIfBlocked = true
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "tag_weapon",
Offset = {
vpos = Vector(.85, 4.6, 0.5),
vang = Angle(90, -90, -90),
},
},
{
PrintName = "Finish",
Slot = {"ur_aw_skin"},
FreeSlot = true,
DefaultAttName = "Olive Drab",
DefaultAttIcon = Material("entities/att/ur_aw/skin_green.png", "mips smooth"),
}
}
function SWEP:Hook_TranslateAnimation(anim)
end
SWEP.Hook_NameChange = function(wep,name)
local atts = wep.Attachments
local barr = string.Replace(atts[2].Installed or "default", "ur_aw_barrel_", "")
local cal = string.Replace(atts[4].Installed or "default", "ur_aw_cal_", "")
local stock = string.Replace(atts[8].Installed or "default", "ur_aw_stock_", "")
if GetConVar("arccw_truenames"):GetBool() then
if cal ~= "default" then
return "AWM"
elseif barr == "sd" then
return "AWS"
elseif stock == "at" then
return "AT"
end
else
if cal == "338" then
return "Apex Magnum"
elseif barr == "sd" then
return "Apex Spectre"
elseif stock == "at" then
return "Apex Tactical"
end
end
end
SWEP.Hook_ModifyBodygroups = function(wep, data)
local vm = data.vm
if !IsValid(vm) then return end
local atts = wep.Attachments
local cal = string.Replace(atts[4].Installed or "default", "ur_aw_cal_", "")
local mag = string.Replace(atts[5].Installed or "default", "ur_aw_mag_", "")
local flags = wep:GetWeaponFlags()
local pistolGrip = table.HasValue(flags,"pistolgrip")
if cal ~= "default" then
if pistolGrip then
vm:SetBodygroup(1,3)
else
vm:SetBodygroup(1,1)
end
elseif pistolGrip then
vm:SetBodygroup(1,2)
else
vm:SetBodygroup(1,0)
end
if atts[1].Installed then
if table.HasValue(flags,"sights_compact") then
vm:SetBodygroup(8,3)
else
vm:SetBodygroup(8,1)
end
end
if mag == "10" then
vm:SetBodygroup(3,1)
elseif mag == "10m" then
vm:SetBodygroup(3,3)
elseif cal ~= "default" then
vm:SetBodygroup(3,2)
end
end
SWEP.Animations = {
["ready"] = {
Source = "cycle",
Time = 1.47,
MinProgress = 1.3,
SoundTable = {
{s = ratel, t = 0.07},
{s = testpath .. "boltup.ogg", t = 0.1},
{s = testpath .. "boltback.ogg", t = 0.2},
{s = testpath .. "boltforward.ogg", t = 0.32},
{s = testpath .. "boltdown.ogg", t = 0.6},
},
ProcDraw = true,
},
["idle"] = {
Source = "idle"
},
["idle_empty"] = {
Source = "idle_empty"
},
["draw"] = {
Source = "draw",
LHIK = false,
LHIKIn = 0,
LHIKOut = 0.5,
Time = 35 / 30,
MinProgess = .5,
SoundTable = {
{s = ratel, t = 0},
{s = common .. "raise.ogg", t = 0.2},
},
},
["holster"] = {
Source = "holster",
LHIK = false,
LHIKIn = 0,
LHIKOut = 0.5,
Time = .75,
SoundTable = {
{s = ratel, t = 0},
},
},
["draw_empty"] = {
Source = "draw_empty",
LHIK = false,
LHIKIn = 0,
LHIKOut = 35 / 30,
SoundTable = {
{s = ratel, t = 0},
{s = common .. "raise.ogg", t = 0.2},
},
},
["holster_empty"] = {
Source = "holster_empty",
LHIK = false,
LHIKIn = 0,
LHIKOut = 0.5,
SoundTable = {
{s = ratel, t = 0},
},
},
["fire"] = {
Source = {"fire"},
Time = 27 / 30,
MinProgress = 0.2,
SoundTable = {
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
},
["fire_iron"] = {
Source = {"fire_iron"},
Time = 27 / 30,
MinProgress = 0.2,
SoundTable = {
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 1,
Time = 85 / 30,
LHIKEaseOut = 0.25,
MinProgress = 1.5,
SoundTable = {
{s = rottle, t = 0.1},
{s = testpath .. "magrel.ogg", t = 0.2},
{s = testpath .. "magout.ogg", t = 0.3},
{s = rottle, t = 0.75},
{s = common .. "magpouch.ogg", t = 0.8, v = 0.4},
{s = testpath .. "struggle.ogg", t = 0.9},
{s = testpath .. "magin.ogg", t = 1.2},
{s = rottle, t = 1.4},
{s = ratel, t = 1.5},
},
},
["reload_10"] = {
Source = "reload_exte",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 1.15,
LHIKEaseOut = 0.25,
MinProgress = 2.5,
SoundTable = {
{s = rottle, t = 0.1},
{s = testpath .. "magrel.ogg", t = 0.2},
{s = testpath .. "magout.ogg", t = 0.3},
{s = rottle, t = 0.75},
{s = common .. "magpouch.ogg", t = 0.8, v = 0.4},
{s = testpath .. "struggle.ogg", t = 0.9},
{s = testpath .. "magin.ogg", t = 1.2},
{s = rottle, t = 1.4},
{s = ratel, t = 1.5},
},
},
["reload_338"] = {
Source = "reload_magnum",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 1.15,
LHIKEaseOut = 0.25,
MinProgress = 2.5,
Time = 3.4,
SoundTable = {
{s = rottle, t = 0.1},
{s = testpath .. "magrel.ogg", t = 0.2},
{s = testpath .. "magout.ogg", t = 0.4},
{s = rottle, t = 0.75},
{s = common .. "magpouch.ogg", t = 0.8, v = 0.4},
{s = testpath .. "struggle.ogg", t = 1.1, v = 1.1},
{s = testpath .. "magin.ogg", t = 1.3},
{s = testpath .. "magtap.ogg", t = 1.95},
{s = rottle, t = 2.3, v = 0.6},
{s = ratel, t = 2.35, v = 0.6},
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = false,
LHIKIn = 0.9,
LHIKOut = 1.25,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.5,
MinProgress = 3.0,
ShellEjectAt = .45,
LastClip1OutTime = 1.8,
Time = 4.5,
SoundTable = {
{s = ratel, t = 0.05},
{s = testpath .. "boltup.ogg", t = 0.15},
{s = testpath .. "boltback_reload.ogg", t = 0.18},
{s = testpath .. "eject.ogg", t = 0.45},
{s = rottle, t = 0.6},
{s = testpath .. "magrel.ogg", t = 1.0},
{s = testpath .. "magout_empty.ogg", t = 1.2},
{s = rottle, t = 1.25},
{s = testpath .. "magdrop_metal.ogg", t = 1.5, v = 0.4},
{s = common .. "magpouch.ogg", t = 1.6, v = 0.4},
{s = rottle, t = 1.65},
{s = testpath .. "struggle.ogg", t = 2},
{s = testpath .. "magin.ogg", t = 2.1},
{s = rottle, t = 2.4},
{s = ratel, t = 2.6},
{s = testpath .. "boltforward_reload.ogg", t = 2.7},
{s = testpath .. "boltdown.ogg", t = 3.1},
{s = common .. "shoulder.ogg", t = 3.15},
},
},
["reload_empty_10"] = {
Source = "reload_empty_exte",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = false,
LHIKIn = 0.9,
LHIKOut = 1.25,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.5,
ShellEjectAt = .5,
MinProgress = 3.5,
LastClip1OutTime = 1.8,
Time = 4.5,
SoundTable = {
{s = ratel, t = 0.05},
{s = testpath .. "boltup.ogg", t = 0.15},
{s = testpath .. "boltback_reload.ogg", t = 0.18},
{s = testpath .. "eject.ogg", t = 0.45},
{s = rottle, t = .6},
{s = testpath .. "magrel.ogg", t = 1.0},
{s = testpath .. "magout_empty.ogg", t = 1.2},
{s = rottle, t = 1.25},
{s = testpath .. "magdrop_metal.ogg", t = 1.6, v = 0.4},
{s = common .. "magpouch.ogg", t = 1.6, v = 0.4},
{s = rottle, t = 1.65},
{s = testpath .. "struggle.ogg", t = 2.1},
{s = testpath .. "magin.ogg", t = 2.2},
{s = rottle, t = 2.5},
{s = testpath .. "boltforward_reload.ogg", t = 2.8},
{s = ratel, t = 2.7},
{s = testpath .. "boltdown.ogg", t = 3.2},
{s = common .. "shoulder.ogg", t = 3.2},
},
},
["reload_empty_338"] = {
Source = "reload_empty_magnum",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = false,
LHIKIn = 0.9,
LHIKOut = 1.25,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.5,
ShellEjectAt = .5,
LastClip1OutTime = 1.5,
MinProgress = 4,
Time = 4.25,
SoundTable = {
{s = ratel, t = 0.05},
{s = testpath .. "boltup.ogg", t = 0.15},
{s = testpath .. "boltback_reload.ogg", t = 0.18},
{s = testpath .. "eject.ogg", t = 0.45},
{s = rottle, t = 0.6},
{s = testpath .. "magrel.ogg", t = 1.0},
{s = testpath .. "magout_empty.ogg", t = 1.1},
{s = rottle, t = 1.25},
{s = testpath .. "magdrop_metal.ogg", t = 1.5, v = 0.4},
{s = common .. "magpouch.ogg", t = 1.6, v = 0.4},
{s = rottle, t = 1.65},
{s = testpath .. "struggle.ogg", t = 1.8},
{s = testpath .. "magin.ogg", t = 1.9},
{s = rottle, t = 2.4},
{s = testpath .. "magtap.ogg", t = 2.5},
{s = ratel, t = 2.6},
{s = testpath .. "boltforward_reload.ogg", t = 2.7},
{s = testpath .. "boltdown.ogg", t = 3.1},
{s = common .. "shoulder.ogg", t = 3.15},
},
},
["reload_empty_10_338"] = {
Source = "reload_empty_exte_magnum",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = true,
LHIKIn = 0.9,
LHIKOut = 1.25,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.5,
MinProgress = 4,
LastClip1OutTime = 2.3,
Time = 4.5,
ShellEjectAt = .5,
SoundTable = {
{s = ratel, t = 0.05},
{s = testpath .. "boltup.ogg", t = 0.15},
{s = testpath .. "boltback_reload.ogg", t = 0.18},
{s = testpath .. "eject.ogg", t = 0.45},
{s = rottle, t = 0.6},
{s = testpath .. "magrel.ogg", t = 1.0},
{s = testpath .. "magout_empty.ogg", t = 1.1},
{s = rottle, t = 1.25},
{s = testpath .. "magdrop_metal.ogg", t = 1.5, v = 0.4},
{s = common .. "magpouch.ogg", t = 1.6, v = 0.4},
{s = rottle, t = 1.65},
{s = testpath .. "struggle.ogg", t = 1.85},
{s = testpath .. "magin.ogg", t = 2.0},
{s = rottle, t = 2.4},
{s = testpath .. "magtap.ogg", t = 2.6},
{s = ratel, t = 2.6},
{s = testpath .. "boltforward_reload.ogg", t = 2.9},
{s = testpath .. "boltdown.ogg", t = 3.3},
{s = common .. "shoulder.ogg", t = 3.35},
},
},
["reload_10_338"] = {
Source = "reload_exte_magnum",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.65,
LHIKEaseOut = 0.25,
MinProgress = 3,
Time = 3.5,
SoundTable = {
{s = rottle, t = 0.1},
{s = testpath .. "magrel.ogg", t = 0.2},
{s = testpath .. "magout.ogg", t = 0.4},
{s = rottle, t = 0.75},
{s = common .. "magpouch.ogg", t = 0.8, v = 0.4},
{s = testpath .. "struggle.ogg", t = 1.1, v = 1},
{s = testpath .. "magin.ogg", t = 1.4},
{s = testpath .. "magtap.ogg", t = 2.0},
{s = rottle, t = 2.3, v = 0.6},
{s = ratel, t = 2.35, v = 0.6},
},
},
["cycle"] = {
Source = "cycle",
Time = 1.47,
ShellEjectAt = 0.4,
MinProgress = 0.9,
SoundTable = {
{s = ratel, t = 0.07},
{s = testpath .. "boltup.ogg", t = 0.1},
{s = testpath .. "boltback.ogg", t = 0.2},
{s = testpath .. "boltforward.ogg", t = 0.32},
{s = testpath .. "eject.ogg", t = 0.4},
{s = testpath .. "boltdown.ogg", t = 0.6},
--{s = common .. "shoulder.ogg", t = 0.7},
},
},
["enter_inspect"] = {
Source = "inspect_enter",
-- time = 35 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 2.5,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-sniper-03.ogg", t = 0.05},
},
},
["idle_inspect"] = {
Source = "inspect_loop",
-- time = 72 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
},
["exit_inspect"] = {
Source = "inspect_exit",
-- time = 66 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
SoundTable = {
{s = common .. "movement-sniper-01.ogg", t = 0},
{s = rottle, t = 0.25},
{s = testpath .. "boltup_inspect.ogg", t = 1.2},
{s = common .. "movement-sniper-03.ogg", t = 1.25},
{s = testpath .. "boltback_inspect.ogg", t = 1.35},
{s = testpath .. "boltforward_inspect.ogg", t = 1.8},
{s = testpath .. "boltdown_inspect.ogg", t = 1.9},
{s = rottle, t = 2.0},
{s = common .. "movement-sniper-04.ogg", t = 2.2},
},
},
["enter_inspect_empty"] = { -- Animations needed!
Source = "inspect_enter",
-- time = 35 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 2.5,
SoundTable = {
{s = rottle, t = 0},
{s = rutle, t = 0.1},
},
},
["idle_inspect_empty"] = {
Source = "inspect_loop",
-- time = 72 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
},
["exit_inspect_empty"] = {
Source = "inspect_exit",
-- time = 66 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
SoundTable = {
{s = common .. "movement-sniper-01.ogg", t = 0.05},
{s = rottle, t = 0.25},
{s = testpath .. "boltup_inspect.ogg", t = 1.2},
{s = common .. "movement-sniper-03.ogg", t = 1.25},
{s = testpath .. "boltback_inspect.ogg", t = 1.35},
{s = testpath .. "boltforward_inspect.ogg", t = 1.8},
{s = testpath .. "boltdown_inspect.ogg", t = 1.9},
{s = rottle, t = 2.0},
{s = common .. "movement-sniper-04.ogg", t = 2.2},
},
},
}
SWEP.Hook_Think = ArcCW.UC.ADSReload

View File

@@ -0,0 +1,525 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Oldie Weaponry"
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/12g.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 1
SWEP.UC_ShellColor = Color(0.7*255, 0.2*255, 0.2*255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 6
SWEP.CamAttachment = 7
-- Fake name --
SWEP.PrintName = "Volga Super" -- it's marketed to Americans
-- True name --
SWEP.TrueName = "IZh-58"
-- Trivia --
SWEP.Trivia_Class = "Shotgun"
SWEP.Trivia_Desc = [[The design of the double-barrel shotgun is so ubiquitous that it is usually referred to by weapon class instead of model name. These traditional shotguns are very popular in both rural and urban communities around the world for their simplicity and reliability.
Both barrels can be fired back-to-back in quick, deadly succession, but they must be reloaded frequently. Switch to burst firemode to pull both triggers at once.]]
SWEP.Trivia_Manufacturer = "Sikov Machining Plant"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Break Action"
SWEP.Trivia_Country = "Soviet Union"
SWEP.Trivia_Year = 1958
-- Weapon slot --
SWEP.Slot = 3
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Izhevsk Mechanical Plant"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ur_dbs.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ur_dbs.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-3, 3, -5),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
-- Damage parameters --
SWEP.Damage = 18 -- 6 pellets to kill
SWEP.DamageMin = 10 -- 10 pellets to kill
SWEP.Range = 40
SWEP.RangeMin = 6
SWEP.Num = 8
SWEP.Penetration = 1
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 365
SWEP.PhysBulletMuzzleVelocity = 365
SWEP.HullSize = 0.25
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults_Shotgun
-- Mag size --
SWEP.ChamberSize = 0
SWEP.Primary.ClipSize = 2
SWEP.RejectMagSizeChange = true -- Signals to attachments that mag size shouldn't be changeable; needs to be implemented attachment-side with att.Compatible
-- Recoil --
SWEP.Recoil = 2.8
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.24
SWEP.VisualRecoilMult = 0
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.Sway = 0.5
-- Firerate / Firemodes --
SWEP.Delay = 60 / 350
SWEP.Firemodes = {
{
Mode = 1,
PrintName = "fcg.break",
},
{
Mode = 1,
PrintName = "ur.spas12.dbl",
Mult_AccuracyMOA = 1.15,
Mult_HipDispersion = 0.8,
Mult_Num = 2,
Override_AmmoPerShot = 2,
Mult_Damage = 2,
Mult_DamageMin = 2,
Mult_VisualRecoilMult = 2,
CustomBars = "--___",
},
{
PrintName = "fcg.safe2",
Mode = 0,
}
}
SWEP.UC_CanManualAction = true
SWEP.MalfunctionTakeRound = false
SWEP.MalfunctionMean = math.huge -- Theoretically it will never malfunction
SWEP.ShootVol = 160
SWEP.ShootPitch = 100
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = false
SWEP.RevolverReload = true
-- NPC --
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 210
-- Accuracy --
SWEP.AccuracyMOA = 25
SWEP.HipDispersion = 400
SWEP.MoveDispersion = 125
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "buckshot"
-- Speed multipliers --
SWEP.SpeedMult = 0.91
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.25
SWEP.ShootSpeedMult = 0.75
-- Length --
SWEP.BarrelLength = 49
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-1.5, 0, 2.5),
Ang = Angle(0, 0, 3),
Magnification = 1.05,
SwitchToSound = "",
}
SWEP.SprintPos = Vector(7, 0, 0)
SWEP.SprintAng = Angle(-10, 40, -10)
SWEP.HolsterPos = Vector(7, 0, 0)
SWEP.HolsterAng = Angle(-10, 40, -10)
SWEP.ActivePos = Vector(1, 1.5, 1.5)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-1, 2, 1)
SWEP.CrouchAng = Angle(0, 0, -20)
SWEP.CustomizePos = Vector(10, 1, 2)
SWEP.CustomizeAng = Angle(10, 40, 20)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(3, 0, -4.5)
-- Firing sounds --
local path = ")weapons/arccw_ur/dbs/"
local common = ")/arccw_uc/common/"
SWEP.ShootSoundSilenced = path .. "fire_supp.ogg"
--[[SWEP.DistantShootSound = {path .. "fire-dist-01.ogg", path .. "fire-dist-02.ogg", path .. "fire-dist-03.ogg", path .. "fire-dist-04.ogg", path .. "fire-dist-05.ogg"}
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"]]
SWEP.ShootDrySound = common .. "manual_trigger.ogg"
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
local tail = ")/arccw_uc/common/12ga/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-12ga-pasg-ext-01.ogg",
tail .. "fire-dist-12ga-pasg-ext-02.ogg",
tail .. "fire-dist-12ga-pasg-ext-03.ogg",
tail .. "fire-dist-12ga-pasg-ext-04.ogg",
tail .. "fire-dist-12ga-pasg-ext-05.ogg",
tail .. "fire-dist-12ga-pasg-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = function(wep,data)
ArcCW.UC.InnyOuty(wep)
if wep:GetCurrentFiremode().Override_AmmoPerShot == 2 then
timer.Simple(0.05, function()
if IsValid(wep) then
wep:EmitSound(wep.ShootSound[math.random(1,#wep.ShootSound)], data.volume * .4, data.pitch, 1, CHAN_WEAPON - 1)
end
end)
end
end
-- Animations --
local ratel = {common .. "rattle1.ogg", common .. "rattle2.ogg", common .. "rattle3.ogg"}
local rottle = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local shellin = {common .. "dbs-shell-insert-01.ogg", common .. "dbs-shell-insert-02.ogg", common .. "dbs-shell-insert-03.ogg", common .. "dbs-shell-insert-04.ogg", common .. "dbs-shell-insert-05.ogg", common .. "dbs-shell-insert-06.ogg", common .. "dbs-shell-insert-07.ogg", common .. "dbs-shell-insert-08.ogg", common .. "dbs-shell-insert-09.ogg", common .. "dbs-shell-insert-10.ogg", common .. "dbs-shell-insert-11.ogg", common .. "dbs-shell-insert-12.ogg"}
local shellfall = {path .. "shell-fall-01.ogg", path .. "shell-fall-02.ogg", path .. "shell-fall-03.ogg", path .. "shell-fall-04.ogg"}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
--Time = 20 / 30,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "grab.ogg", t = 0.2},
{s = path .. "shoulder.ogg", t = 0.5},
},
},
["ready"] = {
Source = "deploy",
Time = 26 / 30,
SoundTable = {
{s = path .. "close.ogg", t = 0.1},
{s = common .. "shoulder.ogg", t = 0.2},
{s = path .. "shoulder.ogg", t = 0.455},
},
},
["holster"] = {
Source = "holster",
Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = { -- first barrel
Source = "fire",
-- Time = 23 / 25,--30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
-- Time = 23 / 25,--30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_empty"] = { -- second barrel
Source = "fire_empty", -- fire_empty
-- Time = 23 / 25,--30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron_empty"] = {
Source = "fire_empty", -- fire_empty
-- Time = 23 / 25,--30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0}},
},
["fire_2bst"] = { -- both
Source = "fireboth",
-- Time = 35 / 25,--30,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
MinProgress = 0.3
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
ShellEjectAt = 0.91,
SoundTable = {
{s = common .. "cloth_4.ogg", t = 0},
{s = path .. "open.ogg", t = 0.2},
{s = path .. "eject.ogg", t = 0.8},
{s = common .. "magpouch_pull_small.ogg", t = 1.0},
{s = shellfall, t = 1.0},
{s = common .. "cloth_2.ogg", t = 1.1},
{s = path .. "struggle.ogg", t = 1.5, v = 0.5},
{s = shellin, t = 1.8},
{s = path .. "grab.ogg", t = 2.15, v = 0.5},
{s = path .. "close.ogg", t = 2.3},
{s = common .. "shoulder.ogg", t = 2.4},
{s = path .. "shoulder.ogg", t = 2.675},
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
MinProgress = 2.05,
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
ShellEjectAt = 1.0,
SoundTable = {
{s = common .. "cloth_4.ogg", t = 0},
{s = path .. "open.ogg", t = 0.3},
{s = path .. "eject.ogg", t = 0.8},
{s = shellfall, t = 0.9},
{s = shellfall, t = 0.95},
{s = common .. "cloth_2.ogg", t = 1.1},
{s = common .. "magpouch_pull_small.ogg", t = 1.2},
{s = path .. "struggle.ogg", t = 1.7, v = 0.5},
{s = shellin, t = 1.85},
{s = shellin, t = 1.9},
{s = path .. "grab.ogg", t = 2.17, v = 0.5},
{s = path .. "close.ogg", t = 2.3},
{s = common .. "shoulder.ogg", t = 2.44},
{s = path .. "shoulder.ogg", t = 2.6},
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
MinProgress = 2.05,
},
["reload_extractor"] = {
Source = "reload2",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
ShellEjectAt = 0.4,
SoundTable = {
{s = common .. "cloth_4.ogg", t = 0},
{s = path .. "open.ogg", t = 0.2},
{s = common .. "magpouch_pull_small.ogg", t = 0.5},
{s = shellfall, t = 0.4},
{s = common .. "cloth_2.ogg", t = 0.6},
{s = path .. "struggle.ogg", t = 1.0, v = 0.5},
{s = shellin, t = 1.2},
{s = path .. "grab.ogg", t = 1.5, v = 0.5},
{s = path .. "close.ogg", t = 1.7},
{s = common .. "shoulder.ogg", t = 1.8},
{s = path .. "shoulder.ogg", t = 2.2},
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
MinProgress = 1.3,
},
["reload_empty_extractor"] = {
Source = "reload2_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
ShellEjectAt = 0.4,
SoundTable = {
{s = common .. "cloth_4.ogg", t = 0},
{s = path .. "open.ogg", t = 0.2},
{s = common .. "magpouch_pull_small.ogg", t = 0.5},
{s = shellfall, t = 0.4},
{s = shellfall, t = 0.45},
{s = common .. "cloth_2.ogg", t = 0.6},
{s = path .. "struggle.ogg", t = 1.0, v = 0.5},
{s = shellin, t = 1.2},
{s = shellin, t = 1.25},
{s = path .. "grab.ogg", t = 1.5, v = 0.5},
{s = path .. "close.ogg", t = 1.7},
{s = common .. "shoulder.ogg", t = 1.8},
{s = path .. "shoulder.ogg", t = 2.2},
},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
MinProgress = 1.3,
},
}
SWEP.BulletBones = {
--[1] = "1014_shell1",
}
-- Bodygroups --
SWEP.AttachmentElements = {
["barrel_mid"] = { VMBodygroups = { {ind = 1, bg = 1} } },
["barrel_compact"] = { VMBodygroups = { {ind = 1, bg = 4} } },
["barrel_sw"] = { VMBodygroups = { {ind = 1, bg = 2} } },
["barrel_swplus"] = { VMBodygroups = { {ind = 1, bg = 3}, {ind = 3, bg = 1} } },
["stock_sw"] = { VMBodygroups = { {ind = 2, bg = 1} } },
}
SWEP.DefaultBodygroups = "00000000"
SWEP.Attachments = {
-- {
-- PrintName = "Optic",
-- DefaultAttName = "Iron Sights",
-- Slot = {"optic_lp","optic"},
-- Bone = "barrels",
-- Offset = {
-- vpos = Vector(0.5, -1.75, 1.5),
-- vang = Angle(0, 90, 0),
-- },
-- VMScale = Vector(1,1,1),
-- CorrectivePos = Vector(0, 0, -0.0),
-- CorrectiveAng = Angle(0, 180, 0),
-- },
{
PrintName = "Barrel",
DefaultAttName = "26\" Factory Barrel",
DefaultAttIcon = Material("entities/att/ur_dbs/blong.png", "smooth mips"),
Slot = "ur_db_barrel",
Bone = "body",
Offset = {
vpos = Vector(-0.4, -5, -6),
vang = Angle(0, 90, 0),
},
},
{
PrintName = "Muzzle",
Slot = "choke",
},
{
PrintName = "Stock",
Slot = {"ur_db_stock"},
DefaultAttName = "Wooden Stock",
DefaultAttIcon = Material("entities/att/ur_dbs/s.png", "smooth mips"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"BUCK\" #00 Buckshot",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_shotgun_generic.png", "mips smooth"),
Slot = {"ud_ammo_shotgun"},
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = {"uc_fg_singleshot", "uc_db_fg"}, -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm", "uc_db_tp"},
FreeSlot = true,
Bone = "body",
Offset = {
vpos = Vector(-0.55, 1, -0.5),
vang = Angle(0, 90, 0),
},
},
}

View File

@@ -0,0 +1,857 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Modern Weaponry"
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_pistol_deagle"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/50ae.mdl"
SWEP.ShellScale = 1
--SWEP.ShellMaterial = "models/weapons/arcticcw/shell_9mm"
SWEP.ShellPitch = 90
SWEP.UC_ShellColor = Color(0.7*255, 0.2*255, 0.2*255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.TracerNum = 1
SWEP.TracerWidth = 1
SWEP.ShootPitch = 100
-- Fake name --
SWEP.PrintName = "Predator .50"
-- True name --
SWEP.TrueName = "Desert Eagle"
-- Trivia --
SWEP.Trivia_Class = "Pistol"
SWEP.Trivia_Desc = "Unorthodox pistol in both weight and design, marketed as an alternative to high-caliber revolvers. Its huge rounds, unrivaled in power for a handgun cartridge, can easily blast a human skull apart.\nDespite being one of the most famous weapons in action culture, it rarely sees practical use because of its massive, bulky frame and pointlessly large caliber.\n\nWe both know that won't stop you."
SWEP.Trivia_Manufacturer = "ISM"
SWEP.Trivia_Calibre = ".50 Action Express"
SWEP.Trivia_Mechanism = "Gas-Operated Rotating Bolt"
SWEP.Trivia_Country = "Israel"
SWEP.Trivia_Year = 1983
-- Weapon slot --
SWEP.Slot = 1
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Magnum Research"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ud_deagle.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ud_deagle.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_REVOLVER
-- Damage parameters --
SWEP.Damage = 44 -- 2 shot close range kill
SWEP.DamageMin = 44 -- 9 shot long range kill (big bullet falls off quickly)
SWEP.RangeMin = 10
SWEP.Range = 120 -- 2 shot until ~50m
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 470
SWEP.PhysBulletMuzzleVelocity = 470
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Jamming --
--SWEP.Malfunction = true
SWEP.MalfunctionJam = false
--SWEP.MalfunctionMean = 21
SWEP.MalfunctionPostFire = false
SWEP.MalfunctionTakeRound = false
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 7
SWEP.ExtendedClipSize = 14
SWEP.ReducedClipSize = 5
-- Recoil --
SWEP.Recoil = 3
SWEP.RecoilSide = 1
SWEP.RecoilRise = 0.75
SWEP.VisualRecoilMult = 1.5
SWEP.MaxRecoilBlowback = 2
SWEP.MaxRecoilPunch = 6
SWEP.Sway = 1.1
-- Firerate / Firemodes --
SWEP.Delay = 60 / 200
SWEP.Num = 1
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_357"
SWEP.NPCWeight = 70
-- Accuracy --
SWEP.AccuracyMOA = 4
SWEP.HipDispersion = 600
SWEP.MoveDispersion = 200
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "357"
SWEP.MagID = "deagle"
-- Speed multipliers --
SWEP.SpeedMult = 0.925
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.25
SWEP.ShootSpeedMult = 0.8
-- Length --
SWEP.BarrelLength = 12
SWEP.ExtraSightDist = 10
-- Ironsights / Customization / Poses --
SWEP.HolsterPos = Vector(0.3, 3, 1)
SWEP.HolsterAng = Angle(-5, 15, -20)
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "revolver"
SWEP.HoldtypeSights = "revolver"
SWEP.IronSightStruct = {
Pos = Vector(-2.549, 1, 1.505),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "",
ViewModelFOV = 55,
}
SWEP.ActivePos = Vector(-0.5, 1.5, 1.15)
SWEP.ActiveAng = Angle(0.5, 0.5, -2)
SWEP.CustomizePos = Vector(-1, -2, 2)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-2.2, 1, 0.6)
SWEP.CrouchAng = Angle(0, 0, -14)
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-10.5, 4, -4),
ang = Angle(-6, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
}
-- Weapon sounds --
local path = ")weapons/arccw_ur/deagle/"
local common = ")/arccw_uc/common/"
local rottle = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local rutle = {common .. "movement-smg-03.ogg",common .. "movement-smg-04.ogg"}
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = path .. "fire_sup.ogg"
SWEP.DistantShootSound = nil
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"
SWEP.ShootDrySound = path .. "dryfire.ogg"
local tail = ")/arccw_uc/common/50ae/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-50ae-pistol-ext-01.ogg",
tail .. "fire-dist-50ae-pistol-ext-02.ogg",
tail .. "fire-dist-50ae-pistol-ext-03.ogg",
tail .. "fire-dist-50ae-pistol-ext-04.ogg",
tail .. "fire-dist-50ae-pistol-ext-05.ogg",
tail .. "fire-dist-50ae-pistol-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-shotgun-01.ogg",
common .. "fire-dist-int-shotgun-02.ogg",
common .. "fire-dist-int-shotgun-03.ogg",
common .. "fire-dist-int-shotgun-04.ogg",
common .. "fire-dist-int-shotgun-05.ogg",
common .. "fire-dist-int-shotgun-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 0.75
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Bodygroups --
SWEP.BulletBones = {
[1] = "Bullet1", [2] = "Bullet2", [3] = "Bullet3", [4] = "Bullet4", [5] = "Bullet5", [6] = "Bullet6", [7] = "Bullet7"
}
SWEP.DefaultBodygroups = "000000000"
SWEP.AttachmentElements = {
["ur_deagle_barrel_modern"] = {
VMBodygroups = {{ind = 1, bg = 1}},
},
["ur_deagle_barrel_compact"] = {
VMBodygroups = {{ind = 1, bg = 5}},
AttPosMods = {
[4] = {
vpos = Vector(0, 0, .15),
vang = Angle(90, 0, -90),
},
}
},
["ur_deagle_barrel_compen"] = {
VMBodygroups = {{ind = 1, bg = 4}},
},
["ur_deagle_barrel_ext"] = {
VMBodygroups = {{ind = 1, bg = 2}},
AttPosMods = {
[4] = {
vpos = Vector(0, 0, 1.95),
vang = Angle(90, 0, -90),
},
},
},
["ur_deagle_barrel_marksman"] = {
VMBodygroups = {{ind = 1, bg = 3}},
AttPosMods = {
[4] = {
vpos = Vector(0, -0.05, 5.1),
vang = Angle(90, 0, -90),
},
},
},
["ur_deagle_barrel_annihilator"] = {
VMBodygroups = {{ind = 1, bg = 6}},
AttPosMods = {
[4] = {
vpos = Vector(0, -0.05, 1.25),
vang = Angle(90, 0, -90),
},
},
},
["ur_deagle_mag_ext"] = {
VMBodygroups = {{ind = 2, bg = 1}}
},
["ur_deagle_grip_wooden"] = {
VMBodygroups = {{ind = 4, bg = 1}}
},
["ur_deagle_grip_rubber"] = {
VMBodygroups = {{ind = 4, bg = 2}}
},
["tac_rail"] = {
VMBodygroups = {{ind = 5, bg = 1}}
},
["ur_deagle_caliber_44"] = {
VMBodygroups = {{ind = 6, bg = 1}}
},
["ur_deagle_caliber_357"] = {
VMBodygroups = {{ind = 6, bg = 2}}
},
["ur_deagle_caliber_410"] = {
VMBodygroups = {{ind = 6, bg = 3}}
},
["ur_deagle_skin_black"] = {
VMSkin = 1,
},
["ur_deagle_skin_gold"] = {
VMSkin = 2,
},
["ur_deagle_skin_chrome"] = {
VMSkin = 3,
},
["ur_deagle_skin_modern"] = {
VMBodygroups = {{ind = 0, bg = 1}},
VMSkin = 3,
},
["ur_deagle_skin_sex"] = {
VMBodygroups = {{ind = 0, bg = 1}},
VMSkin = 4,
},
}
SWEP.Hook_ModifyBodygroups = function(wep,data)
local vm = data.vm
if !IsValid(vm) then return end
local optic = wep.Attachments[1].Installed
local tritium = (optic == "ur_deagle_tritium")
local barrel = wep.Attachments[2].Installed or 0
if tritium then
-- Setup for when we introduce new barrel options
if barrel == "ur_deagle_barrel_marksman" then
vm:SetBodygroup(3,3)
elseif barrel == "ur_deagle_barrel_ext" then
vm:SetBodygroup(3,2)
elseif barrel == "ur_deagle_barrel_compact" then
vm:SetBodygroup(3,4)
elseif barrel == "ur_deagle_barrel_annihilator" then
vm:SetBodygroup(3,5)
else
vm:SetBodygroup(3,1)
end
-- elseif optic and barrel == 0 then
-- vm:SetBodygroup(1,1)
end
if barrel == "ur_deagle_barrel_annihilator" then
if vm:GetBodygroup(5) == 1 then
vm:SetBodygroup(5,2)
end
end
end
SWEP.Hook_NameChange = function(wep, name)
if wep.Attachments[2].Installed == "ur_deagle_barrel_annihilator" then
return "Annihilator"
elseif !GetConVar("arccw_truenames"):GetBool() then
local add = ".50"
local cal = wep.Attachments[3].Installed
if cal == "ur_deagle_caliber_357" then
add = ".357"
elseif cal == "ur_deagle_caliber_44" then
add = ".44"
elseif cal == "ur_deagle_caliber_410" then
add = ".410"
end
return "Predator " .. add
else
return "Desert Eagle"
end
end
-- Animations --
SWEP.Animations = {
["idle_empty"] = {
Source = "idle_empty",
Time = 120 / 60,
},
["idle_jammed"] = { -- pistol-like malfucntions not implemented yet in arccw
Source = "idle_jammed",
Time = 120 / 60,
},
["idle"] = {
Source = "idle",
Time = 120 / 60,
},
["ready"] = {
Source = "ready",
Time = 73 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.6,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = path .. "slidepull.ogg", t = 12 / 60, c = ca },
{ s = path .. "chamber.ogg", t = 20 / 60, c = ca },
},
},
["draw"] = {
Source = "draw",
ProcDraw = true,
SoundTable = {
--{s = path .. "draw.ogg", t = 0}, -- Not Temporary
{s = common .. "raise.ogg", t = 0.05},
},
},
["holster"] = {
Source = "holster",
ProcHolster = true,
SoundTable = {
{s = rottle, t = 0},
--{s = path .. "holster.ogg", t = 0.2}, -- Not Temporary
},
},
["fire"] = {
Source = {"fire_01", "fire_02", "fire_03"},
Time = 0.9,
ShellEjectAt = 0.05,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = {"fire_01", "fire_02", "fire_03"},
Time = 0.9,
ShellEjectAt = 0.05,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_jammed"] = {
Source = "fire_jammed",
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_empty"] = {
Source = "fire_empty",
Time = 0.9,
ShellEjectAt = 0.05,
SoundTable = {{ s = path .. "mech_last.ogg", t = 0 }},
},
["fire_iron_empty"] = {
Source = "fire_empty",
Time = 0.9,
ShellEjectAt = 0.05,
SoundTable = {{ s = path .. "mech_last.ogg", t = 0 }},
},
-- 7-R Reloads --
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.3525,
Time = 2.2,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.6,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout.ogg", t = 6 / 60, c = ca },
{ s = rottle, t = 10 / 60, c = ca },
{ s = common .. "magpouch_pull_small.ogg", t = 30 / 60, c = ca },
{ s = rottle, t = 55 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 61 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 66 / 60, c = ca },
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.75,
Time = 2.55,
LastClip1OutTime = 0.76,
LHIK = true,
LHIKIn = 0.1,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.55,
LHIKOut = 0.7,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout_old.ogg", t = 8 / 60, c = ca },
{ s = rottle, t = 10 / 60, c = ca },
{ s = common .. "magpouch_pull_small.ogg", t = 26 / 60, c = ca },
{ s = common .. "pistol_magdrop.ogg", t = 40 / 60, c = ca },
{ s = rottle, t = 55 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 58 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 62 / 60, c = ca },
{ s = path .. "chamber.ogg", t = 90 / 60, c = ca },
{ s = rottle, t = 75 / 60, c = ca },
},
},
-- 10-R Reloads --
["reload_10"] = {
Source = "reload_exte",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.3525,
Time = 139 / 60,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.6,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout.ogg", t = 6 / 60, c = ca },
{ s = rottle, t = 10 / 60, c = ca },
{ s = common .. "magpouch.ogg", t = 30 / 60, c = ca },
{ s = rottle, t = 55 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 64 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 71 / 60, c = ca },
},
},
["reload_empty_10"] = {
Source = "reload_empty_exte",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.75,
Time = 160 / 60,
LastClip1OutTime = 0.76,
LHIK = true,
LHIKIn = 0.1,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.55,
LHIKOut = 0.7,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout_old.ogg", t = 8 / 60, c = ca },
{ s = rottle, t = 10 / 60, c = ca },
{ s = common .. "magpouch.ogg", t = 26 / 60, c = ca },
{ s = common .. "pistol_magdrop.ogg", t = 40 / 60, c = ca },
{ s = rottle, t = 55 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 60 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 66 / 60, c = ca },
{ s = path .. "chamber.ogg", t = 94 / 60, c = ca },
{ s = rottle, t = 75 / 60, c = ca },
},
},
["unjam"] = {
Source = "unjam",
Time = 0.9,
-- ShellEjectAt = 0.65,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "unjam.ogg", t = .4}
},
LHIK = true,
LHIKIn = .2,
LHIKOut = .2,
LHIKEaseOut = .75,
},
-- Inspecc --
-- disabled due to suck balls
["enter_inspect"] = {
Source = "enter_inspect",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
SoundTable = {
{s = rottle, t = 0},
{s = rutle, t = 0.1},
},
},
["idle_inspect"] = {
Source = "idle_inspect",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "exit_inspect",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout.ogg", t = 8 / 60, c = ca },
{ s = rottle, t = 100 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 106 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 114 / 60, c = ca },
{ s = path .. "rack1.ogg", t = 155 / 60, c = ca },
{ s = rottle, t = 160 / 60, c = ca },
{ s = path .. "rack2.ogg", t = 178 / 60, c = ca },
{ s = rottle, t = 180 / 60, c = ca },
},
},
["enter_inspect_empty"] = {
Source = "enter_inspect_empty",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.1,
LHIKOut = 0,
SoundTable = {
},
},
["idle_inspect_empty"] = {
Source = "idle_inspect_empty",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect_empty"] = {
Source = "exit_inspect_empty",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout.ogg", t = 8 / 60, c = ca },
{ s = rottle, t = 100 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 106 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 114 / 60, c = ca },
{ s = rottle, t = 160 / 60, c = ca },
},
},
["enter_inspect_jammed"] = {
Source = "enter_inspect_jammed",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.1,
LHIKOut = 0,
SoundTable = {
},
},
["idle_inspect_jammed"] = {
Source = "idle_inspect_jammed",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect_jammed"] = {
Source = "exit_inspect_jammed",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{ s = rottle, t = 0 / 60, c = ca },
{ s = common .. "magrelease.ogg", t = 7 / 60, c = ca },
{ s = path .. "magout.ogg", t = 8 / 60, c = ca },
{ s = rottle, t = 100 / 60, c = ca },
{ s = path .. "magin_miss.ogg", t = 106 / 60, c = ca },
{ s = path .. "magin_old.ogg", t = 114 / 60, c = ca },
{ s = rottle, t = 160 / 60, c = ca },
},
},
}
-- ADS animation blending, thanks fesiug --
SWEP.Hook_Think = function(wep)
if IsValid(wep) and wep.ArcCW then
local vm = wep:GetOwner():GetViewModel()
local delta = 1-wep:GetSightDelta()
local bipoded = wep:GetInBipod()
wep.ADSBipodAnims = math.Approach(wep.ADSBipodAnims or 0, bipoded and 1 or 0, FrameTime() / 0.5)
vm:SetPoseParameter("sights", Lerp( math.ease.InOutCubic(math.max(delta, wep.ADSBipodAnims)), 0, 1)) -- thanks fesiug
local slot = wep.Attachments[3].Installed
if wep.Attachments[7].Installed or slot == "ur_deagle_caliber_357" then
vm:SetPoseParameter("light", 1)
elseif slot == "ur_deagle_caliber_44" then
vm:SetPoseParameter("light", .5)
else
vm:SetPoseParameter("light", 0)
end
end
end
-- Attachments --
SWEP.CamAttachment = 3
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp","ur_deagle_tritium","optic"},
DefaultAttName = "Iron Sights",
Bone = "Body",
Offset = {
vpos = Vector(0, -5.15, 6.4),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Barrel",
Slot = {"ur_deagle_barrel"},
DefaultAttIcon = Material("entities/att/acwatt_ur_deagle_barrel.png","mips smooth"),
DefaultAttName = "6\" Standard Barrel",
Bone = "Body",
Offset = {
vpos = Vector(3.07, -3.8, -27),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Caliber",
Slot = {"ur_deagle_caliber"},
DefaultAttIcon = Material("entities/att/uc_bullets/50ae.png","mips smooth"),
DefaultAttName = ".50 Action Express",
Bone = "Body",
Offset = {
vpos = Vector(3.07, -3.8, -27),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"muzzle"},
Bone = "Barrel",
Offset = {
vpos = Vector(0, 0, 0.75),
vang = Angle(90, 0, -90),
},
InstalledEles = {"nofh"},
ExcludeFlags = {"barrel_annihilator"},
Hidden = true,
Integral = true,
},
{
PrintName = "Tactical",
InstalledEles = {"tac_rail"},
Slot = {"tac_pistol"},
Bone = "Body",
Offset = {
vpos = Vector(0, -3.5, 7),
vang = Angle(90, 0, -90),
},
MergeSlots = {15},
},
{
PrintName = "Magazine",
Slot = {"ur_deagle_mag"},
DefaultAttIcon = Material("entities/att/acwatt_ur_deagle_mag_7.png","mips smooth"),
DefaultAttName = "7-Round Mag",
},
{
PrintName = "Stock",
Slot = {"uc_stock", "go_stock_pistol_bt"},
VMScale = Vector(1.1, 1.1, 1.1),
Bone = "Body",
Offset = {
vpos = Vector(0, -0.25, -1),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Grip",
DefaultAttName = "Factory Grip",
DefaultAttIcon = Material("entities/att/acwatt_ur_deagle_grip_plastic.png","mips smooth"),
Slot = "ur_deagle_grip"
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm","fml_charm"},
FreeSlot = true,
Bone = "Body",
Offset = {
vpos = Vector(0.55, -3.4, 4.2),
vang = Angle(90, 0, -90),
},
VMScale = Vector(.65,.65,.65),
},
{
PrintName = "Finish",
Slot = {"ur_deagle_skin"},
DefaultAttName = "Stainless Steel",
DefaultAttIcon = Material("entities/att/acwatt_ur_deagle_finish_default.png","mips smooth"),
FreeSlot = true,
},
{
PrintName = "M203 slot",
Slot = "uc_ubgl",
Bone = "Body",
Offset = {
vpos = Vector(0, -4.8, 6.0),
vang = Angle(90, 0, -90),
},
Hidden = true,
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,901 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Oldie Weaponry"
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_pistol"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/9x19.mdl"
SWEP.ShellScale = 1
--SWEP.ShellMaterial = "models/weapons/arcticcw/shell_9mm"
SWEP.ShellPitch = 90
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 5
SWEP.TracerNum = 0 -- subsonic by default
SWEP.TracerWidth = 1
SWEP.ShootPitch = 100
-- Fake name --
SWEP.PrintName = "AMAS" -- American Automatic Sidearm
-- True name --
SWEP.TrueName = "M1911"
-- Trivia --
SWEP.Trivia_Class = "Pistol"
SWEP.Trivia_Desc = [[Venerable semi-automatic pistol issued by the US Army throughout both World Wars and then some. Even after more than a century of service, it is rarely considered an obsolete design, and its short recoil mechanism has been inherited by most modern pistols.
Easy to handle and packing respectable stopping power, the antiquated single-stack magazine is its only notable downside.]]
SWEP.Trivia_Manufacturer = "Stoner's Legacy Ltd."
SWEP.Trivia_Calibre = ".45 ACP"
SWEP.Trivia_Mechanism = "Short Recoil"
SWEP.Trivia_Country = "USA"
SWEP.Trivia_Year = 1911
-- Weapon slot --
SWEP.Slot = 1
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Colt's Manufacturing Company"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ur_m1911.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ur_m1911.mdl"
SWEP.ViewModelFOV = 66
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_REVOLVER
-- Damage parameters --
SWEP.Damage = 14 -- 3 shot short range kill (2 shot chest point-blank)
SWEP.DamageMin = 14 -- 7 shot long range kill
SWEP.RangeMin = 10
SWEP.Range = 100 -- 3 shot until ~40m
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil
SWEP.PhysBulletMuzzleVelocity = 253
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults
-- Jamming --
--SWEP.Malfunction = true
SWEP.MalfunctionJam = false
--SWEP.MalfunctionMean = 21
SWEP.MalfunctionPostFire = false
SWEP.MalfunctionTakeRound = false
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 12
-- Recoil --
SWEP.Recoil = 1.00
SWEP.RecoilSide = 0.75
SWEP.RecoilRise = 0.30
SWEP.VisualRecoilMult = 1.0
SWEP.MaxRecoilBlowback = .5
SWEP.MaxRecoilPunch = .8
SWEP.Sway = 1
-- Firerate / Firemodes --
SWEP.Delay = 60 / 400
SWEP.Num = 1
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.ShootPitch = 100
SWEP.ShootVol = 120
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_pistol"
SWEP.NPCWeight = 70
-- Accuracy --
SWEP.AccuracyMOA = 12
SWEP.HipDispersion = 400
SWEP.MoveDispersion = 150
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "pistol"
SWEP.MagID = "m1911"
-- Speed multipliers --
SWEP.SpeedMult = 0.97
SWEP.SightedSpeedMult = 0.875
SWEP.SightTime = 0.25
SWEP.ShootSpeedMult = 1
-- Length --
SWEP.BarrelLength = 8
SWEP.ExtraSightDist = 10
-- Ironsights / Customization / Poses --
SWEP.HolsterPos = Vector(0.3, 3, 1.6)
SWEP.HolsterAng = Angle(-14, 0, -0.5)
SWEP.SprintPos = Vector(0.3, 3, 1)
SWEP.SprintAng = Angle(-5, 15, -20)
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "pistol"
SWEP.HoldtypeSights = "revolver"
SWEP.IronSightStruct = {
Pos = Vector(-2.33, 10, 1.5),
Ang = Angle(0.2, 0.02, 5.5),
Magnification = 1,
SwitchToSound = "",
}
SWEP.ActivePos = Vector(0.3, 3, 1.3)
SWEP.ActiveAng = Angle(0, 0, -0.5)
SWEP.CustomizePos = Vector(0, 0, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-2, 0, 0)
SWEP.CrouchAng = Angle(0, 0, -8)
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-9, 4, -4.25),
ang = Angle(-6, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
}
-- Weapon sounds --
local path = ")weapons/arccw_ur/1911/"
local common = ")/arccw_uc/common/"
local rottle = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local rutle = {common .. "movement-pistol-01.ogg",common .. "movement-pistol-02.ogg",common .. "movement-pistol-03.ogg",common .. "movement-pistol-04.ogg"}
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.ShootSoundSilenced = {
path .. "fire-sup-01.ogg",
path .. "fire-sup-02.ogg",
path .. "fire-sup-03.ogg",
path .. "fire-sup-04.ogg",
path .. "fire-sup-05.ogg",
path .. "fire-sup-06.ogg"
}
SWEP.DistantShootSound = nil
SWEP.DistantShootSoundSilenced = nil
SWEP.ShootDrySound = path .. "dryfire.ogg"
local tail = ")/arccw_uc/common/45acp/"
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-45acp-pistol-ext-01.ogg",
tail .. "fire-dist-45acp-pistol-ext-02.ogg",
tail .. "fire-dist-45acp-pistol-ext-03.ogg",
tail .. "fire-dist-45acp-pistol-ext-04.ogg",
tail .. "fire-dist-45acp-pistol-ext-05.ogg",
tail .. "fire-dist-45acp-pistol-ext-06.ogg"
}
SWEP.DistantShootSoundIndoors = {
common .. "fire-dist-int-pistol-01.ogg",
common .. "fire-dist-int-pistol-02.ogg",
common .. "fire-dist-int-pistol-03.ogg",
common .. "fire-dist-int-pistol-04.ogg",
common .. "fire-dist-int-pistol-05.ogg",
common .. "fire-dist-int-pistol-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Bodygroups --
SWEP.BulletBones = {
[1] = "mag_round1",
[2] = "mag_round2",
[3] = "mag_round3",
[4] = "mag_round4",
[5] = "mag_round5",
[6] = "mag_round6",
[7] = "mag_round7"
}
SWEP.DefaultBodygroups = "000000000"
SWEP.AttachmentElements = {
["ur_1911_slide_compact"] = {
VMBodygroups = {
{ind = 0, bg = 1},
{ind = 1, bg = 1}
},
AttPosMods = {
[4] = {
vpos = Vector(0, -3.58, .22),
vang = Angle(0, 90, 0),
}
},
NameChange = "AMAD",
TrueNameChange = "Colt Officer's ACP",
},
["ur_1911_slide_compact_custom"] = {
VMBodygroups = {
{ind = 0, bg = 1},
{ind = 1, bg = 5}
},
AttPosMods = {
[4] = {
vpos = Vector(0, -3.58, .22),
vang = Angle(0, 90, 0),
}
},
NameChange = "AMAD",
TrueNameChange = "Colt Officer's ACP",
},
["ur_1911_slide_custom"] = {
VMBodygroups = {
{ind = 1, bg = 4}
},
},
["ur_1911_slide_m45"] = {
VMBodygroups = {
{ind = 1, bg = 2},
{ind = 4, bg = 1},
{ind = 5, bg = 1},
},
--VMSkin = 1,
NameChange = "AMASIN",
TrueNameChange = "M45",
Override_IronSightStruct = {
Pos = Vector(-2.3, 10, 1.4),
Ang = Angle(0.275, 0.07, 5.5),
},
},
["ur_1911_slide_m45_custom"] = {
VMBodygroups = {
{ind = 1, bg = 3},
{ind = 4, bg = 1},
{ind = 5, bg = 1},
},
--VMSkin = 1,
NameChange = "AMASIN",
TrueNameChange = "M45",
Override_IronSightStruct = {
Pos = Vector(-2.3, 10, 1.4),
Ang = Angle(0.275, 0.07, 5.5),
},
},
["ur_1911_mag_ext"] = {
VMBodygroups = {
{ind = 3, bg = 1}
}
},
["ur_1911_grip_snake"] = {
VMBodygroups = {
{ind = 6, bg = 1}
}
},
["ur_1911_grip_pachmayr"] = {
VMBodygroups = {
{ind = 6, bg = 2}
}
},
["ur_1911_skin_silver"] = {
VMSkin = 1
},
["ur_1911_skin_tan"] = {
VMSkin = 2
},
["ur_1911_skin_custom"] = {
VMSkin = 3
},
["ur_1911_cal_9mm"] = {
NameChange = "AMAS-9",
TrueNameChange = "SR1911",
},
["ur_1911_cal_10auto"] = {
NameChange = "AMAS Elite",
TrueNameChange = "Delta Elite",
},
["optic_rail"] = {
VMBodygroups = {
{ind = 7, bg = 1}
}
},
["tac_rail"] = {
VMBodygroups = {
{ind = 8, bg = 1}
}
},
}
SWEP.Hook_ModifyBodygroups = function(wep, data)
-- local vm = data.vm
-- if !IsValid(vm) then return end
-- local att_skin = wep.Attachments[14].Installed
-- local att_slide = wep.Attachments[2].Installed
-- if att_slide == "ur_1911_slide_m45" and att_skin == "ur_1911_skin_custom" then
-- vm:SetBodygroup(1, 3)
-- end
end
-- SWEP.Hook_NameChange = function(wep,name)
-- if GetConVar("arccw_truenames"):GetBool() then
-- local atts = wep.Attachments
-- local cal = string.Replace(atts[3].Installed or "45acp", "ur_1911_cal_", "")
-- if cal == "10auto" then return GetConVar("arccw_truenames"):GetBool() and "Delta Elite" or ""
-- elseif cal == "9mm" then return GetConVar("arccw_truenames"):GetBool() and "SR1911" or ""
-- end
-- return "M1911"
-- else
-- return "AMAS"
-- end
-- end
-- Animations --
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 10 / 30,
},
["idle_empty"] = {
Source = "idle_empty",
Time = 10 / 30,
},
["ready"] = {
Source = "fix",
Time = 1.6,
MinProgress = 1.2,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
ShellEjectAt = false,
ProcDraw = true,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{s = path .. "draw.ogg", t = 0.05},
{ s = path .. "mech.ogg",t = 28 / 60}, -- Temporary
{ s = path .. "slidedrop.ogg",t = 35 / 60},
},
},
["draw"] = {
Source = "draw",
Time = .75,
MinProgress = .4,
--ProcDraw = true,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "draw.ogg", t = 0.05}, -- Not Temporary
{s = rutle, t = 0.1},
--{s = common .. "raise.ogg", t = 0.05},
},
},
["draw_empty"] = {
Source = "draw_empty",
Time = .75,
MinProgress = .4,
--ProcDraw = true,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "draw.ogg", t = 0.05}, -- Not Temporary
{s = rutle, t = 0.1},
--{s = common .. "raise.ogg", t = 0.05},
},
},
["draw_jam"] = {
Source = "draw_jam",
Time = .75,
MinProgress = .4,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "draw.ogg", t = 0.05}, -- Not Temporary
{s = rutle, t = 0.1},
--{s = common .. "raise.ogg", t = 0.05},
},
},
["holster"] = {
Source = "holster",
Time = .75,
SoundTable = {
{s = rutle, t = 0.05},
{s = path .. "holster.ogg", t = 0.2}, -- Not Temporary
},
},
["holster_empty"] = {
Source = "holster_empty",
Time = .75,
SoundTable = {
{s = rutle, t = 0.05},
{s = path .. "holster.ogg", t = 0.2}, -- Not Temporary
},
},
["holster_jam"] = {
Source = "holster_jam",
Time = 18 / 30,
SoundTable = {
{s = rutle, t = 0.05},
{s = path .. "holster.ogg", t = 0.2}, -- Not Temporary
},
},
["fire"] = {
Source = "fire",
Time = 30 / 30,
ShellEjectAt = 0,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire",
Time = 30 / 30,
ShellEjectAt = 0,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_empty"] = {
Source = "fire_empty",
Time = 24 / 30,
ShellEjectAt = 0,
SoundTable = {
{ s = path .. "mech_last.ogg", t = 0 },
},
},
["fire_iron_empty"] = {
Source = "fire_empty",
Time = 24 / 30,
ShellEjectAt = 0,
SoundTable = {
{ s = path .. "mech_last.ogg", t = 0 },
},
},
["fire_jammed"] = {
Source = "fire_jam",
Time = 30 / 30,
MinProgress = 0.5,
ShellEjectAt = false,
SoundTable = {
--{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }
},
},
-- 7-R Reloads --
["reload_10"] = {
Source = "reload_ext",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.3525,
Time = 65 / 30,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.2,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = common .. "magpouch_pull_small.ogg", t = 0 / 60 },
{ s = common .. "magrelease.ogg", t = 17 / 60 },
{ s = path .. "magout.ogg", t = 26 / 60 },
{ s = rottle, t = 10 / 60 },
{ s = rottle, t = 55 / 60 },
{ s = common .. "magpouch_replace_small.ogg", t = 80 / 60 },
{ s = path .. "magin.ogg", t = 50 / 60 },
},
},
["reload_empty_10"] = {
Source = "reload_empty_ext",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.75,
Time = 75 / 30,
LastClip1OutTime = 0.76,
LHIK = true,
LHIKIn = 0.1,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.55,
LHIKOut = 0.7,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = common .. "magrelease.ogg", t = 7 / 60 },
{ s = path .. "magout.ogg", t = 16 / 60 },
{ s = rottle, t = 10 / 60 },
{ s = common .. "magpouch_pull_small.ogg", t = 29 / 60 },
{ s = common .. "pistol_magdrop.ogg", t = 40 / 60 },
{ s = rottle, t = 55 / 60 },
{ s = path .. "magin.ogg", t = 64 / 60 },
{ s = rottle, t = 90 / 60 },
{ s = path .. "slidedrop.ogg", t = 94 / 60 },
},
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.3525,
Time = 65 / 30,
LastClip1OutTime = 0.9,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKEaseOut = 0.2,
LHIKOut = 0.62,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = common .. "magpouch_pull_small.ogg", t = 5 / 60 },
{ s = rottle, t = 10 / 60 },
{ s = common .. "magrelease.ogg", t = 17 / 60 },
{ s = path .. "magout.ogg", t = 26 / 60 },
{ s = path .. "magin.ogg", t = 45 / 60 },
{ s = rottle, t = 55 / 60 },
{ s = common .. "magpouch_replace_small.ogg", t = 80 / 60 },
{ s = path .. "grab.ogg", t = 110 / 60 },
},
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_PISTOL,
MinProgress = 1.75,
Time = 75 / 30,
LastClip1OutTime = 0.76,
LHIK = true,
LHIKIn = 0.1,
LHIKEaseIn = 0.1,
LHIKEaseOut = 0.55,
LHIKOut = 0.7,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = common .. "magrelease.ogg", t = 7 / 60 },
{ s = path .. "magout.ogg", t = 16 / 60 },
{ s = rottle, t = 10 / 60 },
{ s = common .. "magpouch_pull_small.ogg", t = 29 / 60 },
{ s = common .. "pistol_magdrop.ogg", t = 40 / 60 },
{ s = rottle, t = 55 / 60 },
{ s = path .. "magin.ogg", t = 64 / 60 },
{ s = rottle, t = 90 / 60 },
{ s = path .. "slidedrop.ogg", t = 94 / 60 },
{ s = path .. "grab.ogg", t = 125 / 60 },
},
},
-- Jam Animations --
["fix"] = {
Source = "fix",
--Time = 40 / 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
ShellEjectAt = 30 / 60,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = path .. "mech.ogg",t = 28 / 60}, -- Temporary
{ s = path .. "slidedrop.ogg",t = 35 / 60},
},
},
["fix_empty"] = {
Source = "fix_empty",
--Time = 40 / 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
ShellEjectAt = 30 / 60,
SoundTable = {
{ s = rottle, t = 0 / 60 },
{ s = path .. "mech.ogg",t = 28 / 60},
},
},
["idle_jammed"] = {
Source = "idle_jam",
-- time = 35 / 60,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
-- SoundTable = {
-- },
},
-- -- Inspecc --
["enter_inspect"] = {
Source = "enter_inspect",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-pistol-04.ogg", t = 0},
},
},
["idle_inspect"] = {
Source = "idle_inspect",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect"] = {
Source = "exit_inspect",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{s = rottle, t = 0.05},
{s = common .. "movement-pistol-03.ogg", t = 0.1},
{s = common .. "movement-pistol-01.ogg", t = 1},
{s = rottle, t = 1},
},
},
["enter_inspect_empty"] = {
Source = "enter_inspect_empty",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.1,
LHIKOut = 0,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-pistol-04.ogg", t = 0},
},
},
["idle_inspect_empty"] = {
Source = "idle_inspect_empty",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect_empty"] = {
Source = "exit_inspect_empty",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{s = rottle, t = 0.05},
{s = common .. "movement-pistol-03.ogg", t = 0.1},
{s = common .. "movement-pistol-01.ogg", t = 1},
{s = rottle, t = 1},
},
},
["enter_inspect_jammed"] = {
Source = "enter_inspect_jam",
time = 35 / 60,
LHIK = true,
LHIKIn = 0.1,
LHIKOut = 0,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-pistol-04.ogg", t = 0},
},
},
["idle_inspect_jammed"] = {
Source = "idle_inspect_jam",
time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
},
["exit_inspect_jammed"] = {
Source = "exit_inspect_jam",
time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.84,
SoundTable = {
{s = rottle, t = 0.05},
{s = common .. "movement-pistol-03.ogg", t = 0.1},
{s = common .. "movement-pistol-01.ogg", t = 1},
{s = rottle, t = 1},
},
},
}
-- ADS animation blending, thanks fesiug --
SWEP.Hook_Think = ArcCW.UC.ADSReload
-- Attachments --
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp"},
DefaultAttName = "Iron Sights",
Bone = "vm_pivot",
Offset = {
vpos = Vector(-0.01, -2.3, 1.6),
vang = Angle(90, 0, -90),
},
InstalledEles = {"optic_rail"},
},
{
PrintName = "Slide",
Slot = {"ur_m1911_slide"},
DefaultAttIcon = Material("entities/att/ur_1911/slide_std.png","mips smooth"),
DefaultAttName = "5\" Government Slide",
},
{
PrintName = "Caliber",
Slot = {"ur_m1911_caliber"},
DefaultAttIcon = Material("entities/att/uc_bullets/45acp.png","mips smooth"),
DefaultAttName = ".45 ACP",
Bone = "vm_pivot",
Offset = {
vpos = Vector(3.07, -3.8, -27),
vang = Angle(90, 0, -90),
},
DefaultFlags = {"cal_subsonic"},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"muzzle"},
Bone = "vm_barrel",
Offset = {
vpos = Vector(0.02, -4.4, 0.12),
vang = Angle(0, 90, 0),
},
InstalledEles = {"nofh"},
ExcludeFlags = {"barrel_annihilator"},
},
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "vm_pivot",
Offset = {
vpos = Vector(0, 0, 4),
vang = Angle(90, 0, -90),
},
InstalledEles = {"tac_rail"},
},
{
PrintName = "Magazine",
Slot = {"ur_m1911_mag"},
DefaultAttIcon = Material("entities/att/ur_1911/mag7.png","mips smooth"),
DefaultAttName = "7-Round Mag",
},
{
PrintName = "Stock",
Slot = {"uc_stock", "go_stock_pistol_bt"},
VMScale = Vector(1, 1, 1),
Bone = "vm_pivot",
Offset = {
vpos = Vector(0, 3, -3),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Grip",
DefaultAttName = "Factory Grip",
DefaultAttIcon = Material("entities/att/ur_1911/grip.png","mips smooth"),
Slot = "ur_m1911_grip"
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"FMJ\" Full Metal Jacket",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_generic.png", "mips smooth"),
Slot = "uc_ammo",
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm"},
FreeSlot = true,
Bone = "vm_pivot",
Offset = {
vpos = Vector(0.35, -0.5, 3),
vang = Angle(90, 0, -90),
},
VMScale = Vector(.75,.75,.75),
},
{
PrintName = "Finish",
Slot = {"ur_m1911_skin"},
DefaultAttName = "Grey",
DefaultAttIcon = Material("entities/att/ur_1911/skin.png","mips smooth"),
FreeSlot = true,
},
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,830 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true
SWEP.Category = "Willard - Modern Weaponry"
SWEP.UC_CategoryPack = "2Urban Renewal"
SWEP.AdminOnly = false
SWEP.UseHands = true
-- Muzzle and shell effects --
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellEffect = "arccw_uc_shelleffect"
SWEP.ShellModel = "models/weapons/arccw/uc_shells/12g.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 1
SWEP.UC_ShellColor = Color(0.7 * 255, 0.2 * 255, 0.2 * 255)
SWEP.MuzzleEffectAttachment = 1
SWEP.CaseEffectAttachment = 2
SWEP.CamAttachment = 3
-- Fake name --
SWEP.PrintName = "Martello 12/70" -- Italian for "hammer"
-- True name --
SWEP.TrueName = "SPAS-12"
-- Trivia --
SWEP.Trivia_Class = "Shotgun"
SWEP.Trivia_Desc = [[Flexible combat shotgun with the ability to toggle between manual and semi-automatic action. This "dual-mode operation" allows the weapon to cycle low pressure, less-lethal rounds that lack the energy to extract themselves.
The weapon's attempts to reach the American civilian market may have been slowed by legal challenges, but it remains prominent in popular culture for its intimidating and tactical appearance.
Highly versatile, but encumbering to carry and difficult to reload. Switch to pump-action mode to tighten spread and conserve ammo.]]
SWEP.Trivia_Manufacturer = "Iscapelli Armaments"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Hybrid"
SWEP.Trivia_Country = "Italy"
SWEP.Trivia_Year = 1979
-- Weapon slot --
SWEP.Slot = 3
-- Weapon's manufacturer real name --
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Luigi Franchi SpA"
end
-- Viewmodel / Worldmodel / FOV --
SWEP.ViewModel = "models/weapons/arccw/c_ur_spas12.mdl"
SWEP.WorldModel = "models/weapons/arccw/c_ur_spas12.mdl"
SWEP.ViewModelFOV = 60
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-5.8, 5, -4.5),
ang = Angle(-12, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
-- Damage parameters --
SWEP.Damage = 10 -- 6 pellets to kill
SWEP.DamageMin = 10 -- 10 pellets to kill
SWEP.Range = 90
SWEP.RangeMin = 6
SWEP.Num = 8
SWEP.Penetration = 1
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil
SWEP.MuzzleVelocity = 365
SWEP.PhysBulletMuzzleVelocity = 365
SWEP.HullSize = 0.25
SWEP.BodyDamageMults = ArcCW.UC.BodyDamageMults_Shotgun
-- Mag size --
SWEP.ChamberSize = 1
SWEP.Primary.ClipSize = 8
SWEP.ChamberLoadEmpty = 1
-- Recoil --
SWEP.Recoil = 2.5
SWEP.RecoilSide = 2
SWEP.RecoilRise = 0.24
SWEP.VisualRecoilMult = 1
SWEP.MaxRecoilBlowback = 1
SWEP.MaxRecoilPunch = 1
SWEP.Sway = 0.5
-- Firerate / Firemodes --
SWEP.Delay = 60 / 120
SWEP.Firemodes = {
{
Mode = 1,
PrintName = "fcg.pump",
Override_ManualAction = true,
},
{
Mode = 0
}
}
SWEP.UC_CanManualAction = true
SWEP.ShotgunReload = true
SWEP.NoLastCycle = true
SWEP.ShootVol = 160
SWEP.ShootPitch = 100
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.ReloadInSights = true
-- NPC --
SWEP.NPCWeaponType = "weapon_shotgun"
SWEP.NPCWeight = 210
-- Accuracy --
SWEP.AccuracyMOA = 45
SWEP.HipDispersion = 325
SWEP.MoveDispersion = 400
SWEP.JumpDispersion = 1000
SWEP.Primary.Ammo = "buckshot"
-- Speed multipliers --
SWEP.SpeedMult = 0.88
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.4
SWEP.ShootSpeedMult = 0.75
-- Length --
SWEP.BarrelLength = 46
SWEP.ExtraSightDist = 2
-- Ironsights / Customization / Poses --
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.IronSightStruct = {
Pos = Vector(-3.765, -4, 1.3),
Ang = Angle(.2, 0, 1),
Magnification = 1.05,
SwitchToSound = "",
}
SWEP.SprintPos = Vector(-0.5, -4, -3)
SWEP.SprintAng = Angle(3.5, 7, -20)
SWEP.HolsterPos = Vector(2.5, -1, -3)
SWEP.HolsterAng = Angle(-3.5, 20, -20)
SWEP.ActivePos = Vector(-0.3, -3, 0.1)
SWEP.ActiveAng = Angle(1, 1, -1)
SWEP.CrouchPos = Vector(-4, -2, 0)
SWEP.CrouchAng = Angle(0, 0, -30)
SWEP.CustomizePos = Vector(0, 0, 0)
SWEP.CustomizeAng = Angle(0, 0, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(3, 0, -4.5)
-- Firing sounds --
local path1 = ")weapons/arccw_ud/870/"
local path = ")weapons/arccw_ur/spas12/"
local common = ")/arccw_uc/common/"
SWEP.ShootSoundSilenced = path .. "fire_supp.ogg"
--[[SWEP.DistantShootSound = {path .. "fire-dist-01.ogg", path .. "fire-dist-02.ogg", path .. "fire-dist-03.ogg", path .. "fire-dist-04.ogg", path .. "fire-dist-05.ogg"}
SWEP.DistantShootSoundSilenced = common .. "sup_tail.ogg"]]
SWEP.ShootDrySound = common .. "manual_trigger.ogg"
SWEP.ShootSound = {
path .. "fire-01.ogg",
path .. "fire-02.ogg",
path .. "fire-03.ogg",
path .. "fire-04.ogg",
path .. "fire-05.ogg",
path .. "fire-06.ogg"
}
SWEP.DistantShootSoundOutdoors = {
path .. "fire-dist-01.ogg",
path .. "fire-dist-02.ogg",
path .. "fire-dist-03.ogg",
path .. "fire-dist-04.ogg",
path .. "fire-dist-05.ogg",
}
local tail = ")/arccw_uc/common/12ga/"
SWEP.ShootSoundSilenced = {
tail .. "fire-sup-01.ogg",
tail .. "fire-sup-02.ogg",
tail .. "fire-sup-03.ogg",
tail .. "fire-sup-04.ogg",
tail .. "fire-sup-05.ogg",
tail .. "fire-sup-06.ogg"
}
SWEP.DistantShootSoundOutdoors = {
tail .. "fire-dist-12ga-pasg-ext-01.ogg",
tail .. "fire-dist-12ga-pasg-ext-02.ogg",
tail .. "fire-dist-12ga-pasg-ext-03.ogg",
tail .. "fire-dist-12ga-pasg-ext-04.ogg",
tail .. "fire-dist-12ga-pasg-ext-05.ogg",
tail .. "fire-dist-12ga-pasg-ext-06.ogg"
}
SWEP.DistantShootSoundOutdoorsSilenced = {
common .. "sup-tail-01.ogg",
common .. "sup-tail-02.ogg",
common .. "sup-tail-03.ogg",
common .. "sup-tail-04.ogg",
common .. "sup-tail-05.ogg",
common .. "sup-tail-06.ogg",
common .. "sup-tail-07.ogg",
common .. "sup-tail-08.ogg",
common .. "sup-tail-09.ogg",
common .. "sup-tail-10.ogg"
}
SWEP.DistantShootSoundIndoorsSilenced = {
common .. "fire-dist-int-pistol-light-01.ogg",
common .. "fire-dist-int-pistol-light-02.ogg",
common .. "fire-dist-int-pistol-light-03.ogg",
common .. "fire-dist-int-pistol-light-04.ogg",
common .. "fire-dist-int-pistol-light-05.ogg",
common .. "fire-dist-int-pistol-light-06.ogg"
}
SWEP.DistantShootSoundOutdoorsVolume = 1
SWEP.DistantShootSoundIndoorsVolume = 1
SWEP.Hook_AddShootSound = ArcCW.UC.InnyOuty
-- Animations --
SWEP.Hook_Think = ArcCW.UC.ADSReload
SWEP.Hook_TranslateAnimation = function(wep,anim)
if wep:GetCurrentFiremode().Override_ManualAction and anim == "idle_empty" then
return "idle_empty_manual"
end
end
SWEP.Hook_SelectFireAnimation = function(wep,data)
if wep:GetCurrentFiremode().Override_AmmoPerShot == 2 then
return "fire_2bst"
elseif wep:GetCurrentFiremode().Override_ManualAction then
return "fire_manual"
end
end
SWEP.Hook_SelectReloadAnimation = function(wep,curanim)
if wep:GetCurrentFiremode().Override_ManualAction and curanim == "sgreload_start_empty" then
return "sgreload_start_empty_manual"
end
end
local ratel = {common .. "rattle1.ogg", common .. "rattle2.ogg", common .. "rattle3.ogg"}
local rottle = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}
local rutle = {common .. "movement-shotgun-01.ogg",common .. "movement-shotgun-02.ogg",common .. "movement-shotgun-03.ogg",common .. "movement-shotgun-04.ogg"}
local shellin = {path .. "shell-insert-01.ogg", path .. "shell-insert-02.ogg", path .. "shell-insert-03.ogg", path .. "shell-insert-04.ogg", path .. "shell-insert-05.ogg", path .. "shell-insert-06.ogg", path .. "shell-insert-07.ogg", path .. "shell-insert-08.ogg", path .. "shell-insert-09.ogg", path .. "shell-insert-10.ogg", path .. "shell-insert-11.ogg", path .. "shell-insert-12.ogg"}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["idle_empty"] = {
Source = "idle_empty_semi",
},
["idle_empty_manual"] = {
Source = "idle_empty",
},
["draw"] = {
Source = "draw",
--Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["draw_empty"] = {
Source = "draw", -- draw_empty
--Time = 20 / 30,
SoundTable = ArcCW.UC.DrawSounds,
},
["holster"] = {
Source = "holster",
--Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["holster_empty"] = {
Source = "holster", -- holster_empty
--Time = 20 / 30,
SoundTable = ArcCW.UC.HolsterSounds,
},
["fire"] = {
Source = "fire_semi",
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0, v = 0.25 }},
},
["fire_iron"] = {
Source = "fire_semi",
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
},
["fire_2bst"] = {
Source = "fire_semi",
Time = 35 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {{ s = {path .. "mech-01.ogg", path .. "mech-02.ogg", path .. "mech-03.ogg", path .. "mech-04.ogg", path .. "mech-05.ogg", path .. "mech-06.ogg"}, t = 0 }},
MinProgress = 0.4
},
["fire_manual"] = { -- No bolt cycling
Source = "fire_pump",
Time = 23 / 25,--30,
MinProgress = 0.3,
ShellEjectAt = false,
SoundTable = {{ s = common .. "manual_trigger.ogg", t = 0}},
},
["cycle"] = {
Source = "cycle",
Time = 30 / 30,
ShellEjectAt = 0.1,
MinProgress = 0.35,
SoundTable = {
{s = path .. "forearm_back.ogg", t = 0},
{s = path1 .. "eject.ogg", t = 0.1},
{s = path .. "forearm_forward.ogg", t = 0.2}, -- Not temporary
},
},
["unjam"] = {
Source = "cycle",
Time = 30 / 30,
ShellEjectAt = 0.01,
MinProgress = .25,
SoundTable = {
{s = path .. "forearm_back.ogg", t = 0},
{s = path1 .. "eject.ogg", t = 0.1},
{s = path .. "forearm_forward.ogg", t = 0.2}, -- Not temporary
},
},
["fire_empty"] = {
Source = "fire_empty_semi", -- fire_empty
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path1 .. "eject.ogg", t = 0}, -- Not temporary
},
},
["fire_iron_empty"] = {
Source = "fire_empty_semi", -- fire_empty
Time = 23 / 25,--30,
ShellEjectAt = 0.01,
SoundTable = {
{s = path1 .. "eject.ogg", t = 0}, -- Not temporary
},
},
["sgreload_start"] = {
Source = "sgreload_start",
Time = 25 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKOut = 0,
SoundTable = {
{s = path .. "turn.ogg", t = 0}, -- Temporary
{s = rottle, t = 0.1},
{s = path .. "grab.ogg", t = 0.15},
}
},
["sgreload_start_fold"] = {
Source = "sgreload_start_fold",
Time = 25 / 30,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKOut = 0,
SoundTable = {
{s = path .. "turn.ogg", t = 0}, -- Temporary
{s = rottle, t = 0.1},
{s = path .. "grab.ogg", t = 0.15},
}
},
["sgreload_start_empty"] = {
Source = "sgreload_start_empty_semi",
Time = 80 / 30,
-- MinProgress = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0,
TPAnimStartTime = 0.5,
ShellEjectAt = false,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "breechload.ogg", t = .4},
{s = path .. "breechclose.ogg", t = 1}, -- Temporary
{s = path .. "turn.ogg", t = 1.4}, -- Temporary
{s = rottle, t = 1.5},
{s = path .. "grab.ogg", t = 1.9},
},
ForceEmpty = true,
},
["sgreload_start_empty_fold"] = {
Source = "sgreload_start_empty_semi_fold",
Time = 80 / 30,
-- MinProgress = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0,
TPAnimStartTime = 0.5,
ShellEjectAt = false,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = rottle, t = 0},
{s = path .. "breechload.ogg", t = .4},
{s = path .. "breechclose.ogg", t = 1}, -- Temporary
{s = path .. "turn.ogg", t = 1.4}, -- Temporary
{s = rottle, t = 1.5},
{s = path .. "grab.ogg", t = 1.9},
},
ForceEmpty = true,
},
["sgreload_start_empty_manual"] = {
Source = "sgreload_start_empty",
Time = 85 / 30,
MinProgress = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0,
TPAnimStartTime = 0.5,
ShellEjectAt = .1,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = path .. "forearm_back.ogg", t = 0},
{s = path1 .. "eject.ogg", t = 0.1},
{s = rottle, t = .2},
{s = path .. "breechload.ogg", t = .7},
{s = path .. "forearm_forward.ogg", t = 1.6},
{s = path .. "turn.ogg", t = 1.4}, -- Temporary
{s = rottle, t = 1.5},
{s = path .. "grab.ogg", t = 2.0},
},
ForceEmpty = true,
},
["sgreload_start_empty_manual_fold"] = {
Source = "sgreload_start_empty_fold",
Time = 85 / 30,
MinProgress = 1,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0,
TPAnimStartTime = 0.5,
ShellEjectAt = .1,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
SoundTable = {
{s = path .. "forearm_back.ogg", t = 0},
{s = path1 .. "eject.ogg", t = 0.1},
{s = rottle, t = .2},
{s = path .. "breechload.ogg", t = .7},
{s = path .. "forearm_forward.ogg", t = 1.6},
{s = path .. "turn.ogg", t = 1.4}, -- Temporary
{s = rottle, t = 1.5},
{s = path .. "grab.ogg", t = 2.0},
},
ForceEmpty = true,
},
["sgreload_insert"] = {
Source = "sgreload_insert",
Time = 18 / 30,
MinProgress = 0.24,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.3,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
SoundTable = {
{s = shellin, t = 0},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.05},
},
},
["sgreload_insert_fold"] = {
Source = "sgreload_insert_fold",
Time = 18 / 30,
MinProgress = 0.24,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.3,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0,
SoundTable = {
{s = shellin, t = 0},
{s = {common .. "cloth_2.ogg", common .. "cloth_3.ogg", common .. "cloth_4.ogg", common .. "cloth_6.ogg", common .. "rattle.ogg"}, t = 0.05},
},
},
["sgreload_finish"] = {
Source = "sgreload_finish",
Time = 45 / 30,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.6,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.8,
SoundTable = {
{s = rottle, t = 0.2},
{s = path .. "return.ogg", t = 0.475}, -- Temporary
{s = common .. "shoulder.ogg", t = 0.55},
},
},
["sgreload_finish_fold"] = {
Source = "sgreload_finish_fold",
Time = 45 / 30,
LHIK = true,
LHIKIn = 0,
LHIKEaseOut = 0.3,
LHIKOut = 0.6,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
TPAnimStartTime = 0.8,
SoundTable = {
{s = rottle, t = 0.2},
{s = path .. "return.ogg", t = 0.475}, -- Temporary
{s = common .. "shoulder.ogg", t = 0.55},
},
},
["enter_inspect"] = {
Source = "inspect_enter",
-- time = 35 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 2.5,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-shotgun-01.ogg", t = 0.1},
},
},
["idle_inspect"] = {
Source = "inspect_loop",
-- time = 72 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
},
["exit_inspect"] = {
Source = "inspect_exit",
-- time = 66 / 60,
LHIK = true,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
SoundTable = {
{s = common .. "movement-shotgun-02.ogg", t = 0.3},
{s = rottle, t = 0.25},
{s = rottle, t = 1.2},
{s = common .. "movement-shotgun-04.ogg", t = 1.3},
},
},
["enter_inspect_empty"] = { -- Animations needed!
Source = "inspect_enter",
-- time = 35 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 2.5,
SoundTable = {
{s = rottle, t = 0},
{s = common .. "movement-shotgun-01.ogg", t = 0.1},
},
},
["idle_inspect_empty"] = {
Source = "inspect_loop",
-- time = 72 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
},
["exit_inspect_empty"] = {
Source = "inspect_exit",
-- time = 66 / 60,
LHIK = false,
LHIKIn = 0,
LHIKOut = 999, -- maybe im dumb
SoundTable = {
{s = common .. "movement-shotgun-02.ogg", t = 0.3},
{s = rottle, t = 0.25},
{s = rottle, t = 1.2},
{s = common .. "movement-shotgun-04.ogg", t = 1.3},
},
},
}
SWEP.BulletBones = {
--[1] = "1014_shell1",
}
-- Bodygroups --
SWEP.AttachmentElements = {
["uc_manualonly"] = {
Override_Firemodes = {
{
Mode = 1,
PrintName = "fcg.pump",
Override_ManualAction = true,
Mult_AccuracyMOA = 0.8,
Mult_HipDispersion = 0.8,
},
{
Mode = 0,
},
},
Override_Firemodes_Priority = 10,
},
["uc_spas_slam"] = {
RequireFlags = {"freeman", "needsmanual"},
Override_Firemodes = {
{
Mode = 2,
PrintName = "fcg.slam",
Override_ManualAction = true,
Mult_AccuracyMOA = 0.8,
Mult_HipDispersion = 0.8,
},
{
Mode = 0,
},
},
Override_Firemodes_Priority = 15,
},
["ur_spas12_barrel_short"] = {
VMBodygroups = {{ind = 1, bg = 1}},
AttPosMods = {[3] = {
vpos = Vector(-0.02, 22.25, -0.7),
}}
},
["ur_spas12_stock_full"] = {
VMBodygroups = {
{ind = 3, bg = 1},
}
},
["ur_spas12_stock_in"] = {
VMBodygroups = {{ind = 3, bg = 2}}
},
["ur_spas12_stock_none"] = {
VMBodygroups = {{ind = 3, bg = 3}}
},
["ur_spas12_tube_reduced"] = {
VMBodygroups = {{ind = 2, bg = 1}}
},
["rail_classic"] = {
VMBodygroups = {{ind = 4, bg = 2}}
},
["rail_modern"] = {
VMBodygroups = {{ind = 4, bg = 1}},
AttPosMods = {[1] = {
SlideAmount = {
vmin = Vector(0, 0.5, 0.65),
vmax = Vector(0, 2.5, 0.65)
},
}}
},
["rail_none_fix"] = {
VMBodygroups = {{ind = 8, bg = 0}}
},
}
SWEP.DefaultBodygroups = "00000000"
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic"},
Bone = "spas_parent",
Offset = {
vpos = Vector(0, -1, 0.4),
vang = Angle(90, -90, -90),
},
CorrectiveAng = Angle(180,0,0),
SlideAmount = {
vmin = Vector(0, -2, 0.4),
vmax = Vector(0, 1, 0.4)
},
InstalledEles = {"rail_classic"},
DefaultEles = {"rail_none_fix"},
ExcludeFlags = {"spas12_foldstock"}
},
{
PrintName = "Barrel",
DefaultAttName = "21.5\" Special Purpose Barrel", --16\" M4 Super 90 SBS Barrel
DefaultAttIcon = Material("entities/att/ur_spas/barrel_std.png", "smooth mips"),
Slot = "ur_spas12_barrel",
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = {"choke", "muzzle_shotgun"},
Bone = "spas_parent",
Offset = {
vpos = Vector(-0.02, 26.9, -0.6),
vang = Angle(90, -90, -90),
},
ExcludeFlags = {"nomuzzle"}
},
-- {
-- PrintName = "Underbarrel",
-- Slot = {"foregrip"},
-- Bone = "pump",
-- MergeSlots = {13},
-- Offset = {
-- vpos = Vector(0, -5, .1),
-- vang = Angle(90, -90, -90),
-- },
-- },
{
PrintName = "Tactical",
Slot = {"tac_pistol"},
Bone = "spas_parent",
Offset = {
vpos = Vector(0, 20, -2.3),
vang = Angle(90, -90, -90),
},
},
{
PrintName = "Stock",
Slot = {"ur_spas12_stock"},
DefaultAttName = "Extended Stock",
DefaultAttIcon = Material("entities/att/ur_spas/stock_std.png", "smooth mips"),
},
{
PrintName = "Tube Type",
Slot = {"ur_spas12_tube"},
DefaultAttName = "8 Shell Tube",
DefaultAttIcon = Material("entities/att/ur_spas/magbig.png", "smooth mips"),
},
{
PrintName = "Ammo Type",
DefaultAttName = "\"BUCK\" #00 Buckshot",
DefaultAttIcon = Material("entities/att/arccw_uc_ammo_shotgun_generic.png", "mips smooth"),
Slot = {"ud_ammo_shotgun"},
},
{
PrintName = "Powder Load",
Slot = "uc_powder",
DefaultAttName = "Standard Load"
},
{
PrintName = "Training Package",
Slot = "uc_tp",
DefaultAttName = "Basic Training"
},
{
PrintName = "Internals",
Slot = "uc_fg", -- Fire group
DefaultAttName = "Standard Internals"
},
{
PrintName = "Charm",
Slot = {"charm", "fml_charm", "ur_spas12_charm"},
FreeSlot = true,
Bone = "spas_parent",
Offset = {
vpos = Vector(0.6, .5, -1.5),
vang = Angle(90, -90, -90),
},
},
-- {
-- PrintName = "M203 slot",
-- Slot = "uc_ubgl",
-- Bone = "pump",
-- Offset = {
-- vpos = Vector(0, -5, 1.25),
-- vang = Angle(90, -90, -90),
-- },
-- Hidden = true,
-- },
}
local lookup_barrel = {
default = 1,
ur_spas12_comp = 1,
ur_spas12_barrel_short = 0,
}
local lookup_tube = {
default = 1,
ur_spas12_tube_reduced = 0,
}
SWEP.Hook_ExtraFlags = function(wep, data)
local barrel = wep.Attachments[2].Installed and lookup_barrel[wep.Attachments[2].Installed] or lookup_barrel["default"]
local tube = wep.Attachments[7].Installed and lookup_tube[wep.Attachments[7].Installed] or lookup_tube["default"]
if barrel < tube then
table.insert(data, "nomuzzleblocking")
end
end

View File

@@ -0,0 +1,292 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "AR2"
SWEP.TrueName = "OSIPR"
SWEP.Trivia_Class = "Assault Rifle"
SWEP.Trivia_Desc = "Dark Energy powered assault rifle manufactured by the Combine. The OSIPR is essentially a Combine variant of current assault rifles, commonly issued to Overwatch Soldiers and Overwatch Elites."
SWEP.Trivia_Manufacturer = "The Combine"
SWEP.Trivia_Calibre = "Dark Energy"
SWEP.Trivia_Mechanism = "Thumper and Capsules"
SWEP.Trivia_Country = "Bulgaria"
SWEP.Trivia_Year = 2020
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Overwatch"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/ArcCW/c_irifle.mdl"
SWEP.WorldModel = "models/weapons/ArcCW/w_irifle.mdl"
SWEP.ViewModelFOV = 60
SWEP.Damage = 20
SWEP.DamageMin = 20 -- damage done at maximum range
SWEP.Range = 250 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1100 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.Tracer = AR2Tracer -- override tracer effect
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 45
SWEP.ReducedClipSize = 15
SWEP.Recoil = 0.45
SWEP.RecoilSide = 0.55
SWEP.RecoilRise = 1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 550 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 200
SWEP.AccuracyMOA = 5 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 95 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 225
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "type2" -- the magazine pool this gun draws from
SWEP.ShootVol = 115 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "weapons/ArcCW/fire1.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_silencer_01.wav"
SWEP.DistantShootSound = "weapons/arccw/ak47/ak47-1-distant.wav"
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellModel = "models/weapons/arccw/irifleshell.mdl"
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.33
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-5.131, -9.03, 2.267),
Ang = Angle(-0.066, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 3, 0)
SWEP.ActiveAng = Angle(2, 0, 0)
SWEP.HolsterPos = Vector(0.532, -6, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
["extendedmag"] = {
VMBodygroups = {{ind = 1, bg = 1}},
WMBodygroups = {{ind = 1, bg = 1}},
},
["reducedmag"] = {
VMBodygroups = {{ind = 1, bg = 2}},
WMBodygroups = {{ind = 1, bg = 2}},
},
["mount"] = {
VMElements = {
{
Model = "models/weapons/arccw/atts/mount_ak.mdl",
Bone = "ar2_weapon",
Scale = Vector(-1, -1, 1),
Offset = {
pos = Vector(4, 3.75, 0),
ang = Angle(180, 180, -90)
}
}
},
WMElements = {
{
Model = "models/weapons/arccw/atts/mount_ak.mdl",
Scale = Vector(-1, -1, 1),
Offset = {
pos = Vector(5.714, 0.73, -6),
ang = Angle(171, 0, -1)
}
}
},
},
["fcg_semi"] = {
TrueNameChange = "Vepr-KM",
NameChange = "Wasp-2",
}
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"optic", "optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "ar2_weapon", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 3.75, 1), -- offset that the attachment will be relative to the bone
vang = Angle(180, 180, -90),
wpos = Vector(7, 0, -7), -- offset that the attachment will be relative to the bone
wang = Angle(170, 180, 0),
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Stock",
Slot = "stock",
DefaultAttName = "Standard Stock"
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "ar2_weapon",
Offset = {
vpos = Vector(15, 0, 0.5), -- offset that the attachment will be relative to the bone
vang = Angle(0, 0, 0),
wpos = Vector(15.625, -0.1, -6.298),
wang = Angle(-8.829, -0.556, 90)
},
},
{
PrintName = "Underbarrel",
Slot = {"ubgl", "foregrip"},
Bone = "ar2_weapon",
Offset = {
vpos = Vector(-5, 1, 1),
vang = Angle(180, 180, -40),
wpos = Vector(5, 1.1, -6.298),
wang = Angle(-8.829, -0.556, -90)
},
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 0.4,
SoundTable = {{s = "weapons/arccw/ak47/ak47_draw.wav", t = 0}},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "draw",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"fire1", "fire2", "fire3", "fire4"},
Time = 0.5,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = {"fire1", "fire2", "fire3", "fire4"},
Time = 0.5,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
SoundTable = {{s = "weapons/ArcCW/npc_ar2_reload.wav", t = 0}},
Time = 2,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reloadempty",
SoundTable = {{s = "weapons/ArcCW/npc_ar2_reload.wav", t = 0}},
Time = 2,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
}

View File

@@ -0,0 +1,254 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Overwatch Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Pulse SMG"
SWEP.TrueName = "Pulse SMG"
SWEP.Trivia_Class = "Submachine Gun"
SWEP.Trivia_Desc = "A predecessor to the Pulse Rifle, commonly used by Combine Grunts."
SWEP.Trivia_Manufacturer = "The Combine"
SWEP.Trivia_Calibre = "Dark Energy"
SWEP.Trivia_Mechanism = "Thumper and Capsules"
SWEP.Trivia_Country = "Bulgaria"
SWEP.Trivia_Year = 2015
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then
SWEP.PrintName = SWEP.TrueName
SWEP.Trivia_Manufacturer = "Overwatch"
end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_ipistol.mdl"
SWEP.WorldModel = "models/weapons/w_ipistol.mdl"
SWEP.ViewModelFOV = 60
SWEP.MirrorVMWM = nil -- Copy the viewmodel, along with all its attachments, to the worldmodel. Super convenient!
SWEP.MirrorWorldModel = nil -- Use this to set the mirrored viewmodel to a different model, without any floating speedloaders or cartridges you may have. Needs MirrorVMWM
SWEP.HideViewmodel = nil
SWEP.WorldModelOffset = {
pos = Vector(3, 0, 0),
ang = Angle(0, 0, 180),
bone = "ValveBiped.Bip01_R_Hand",
scale = 1
}
SWEP.Damage = 15
SWEP.DamageMin = 15 -- damage done at maximum range
SWEP.Range = 160 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1100 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.Tracer = AR2Tracer -- override tracer effect
SWEP.TracerNum = 1 -- tracer every X
SWEP.TracerCol = Color(255, 25, 25)
SWEP.TracerWidth = 3
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 20 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 45
SWEP.ReducedClipSize = 15
SWEP.Recoil = 0.1
SWEP.RecoilSide = 0.45
SWEP.RecoilRise = 1
SWEP.Delay = 60 / 600
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 200
SWEP.AccuracyMOA = 14 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 300 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 350
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.MagID = "type2" -- the magazine pool this gun draws from
SWEP.ShootVol = 103 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "psmg_fire.wav"
SWEP.ShootSoundSilenced = "weapons/arccw/m4a1/m4a1_silencer_01.wav"
SWEP.DistantShootSound = "weapons/arccw/ak47/ak47-1-distant.wav"
SWEP.MuzzleEffect = "muzzleflash_1"
SWEP.ShellModel = "models/weapons/arccw/irifleshell.mdl"
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.25
SWEP.VisualRecoilMult = 1
SWEP.RecoilRise = 1
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
-- [0] = "bulletchamber",
-- [1] = "bullet1"
}
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.IronSightStruct = {
Pos = Vector(-4.651, -5.829, -0.551),
Ang = Angle(-0.066, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(3.216, 0.402, -3.82)
SWEP.HolsterAng = Vector(-9.146, 20.402, -26.734)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.AttachmentElements = {
}
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Stock",
Slot = "stock",
DefaultAttName = "Standard Stock"
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "ipistol",
Offset = {
vpos = Vector(0.5, 3, -6), -- offset that the attachment will be relative to the bone
vang = Angle(-90, 0, 0),
wpos = Vector(21, 1.1, -2),
wang = Angle(-8.829, -0.556, 90)
},
},
{
PrintName = "Underbarrel",
Slot = {"ubgl", "foregrip"},
Bone = "ipistol",
Offset = {
vpos = Vector(-0, 2, -6),
vang = Angle(270, 0, -90),
wpos = Vector(17, 1.1, -3),
wang = Angle(90, 90, -90)
},
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 1.3,
SoundTable = {{s = "weapons/arccw/ak47/ak47_draw.wav", t = 0}},
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "draw",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = {"attack1"},
Time = 0.5,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = {"fire1", "fire2", "fire3", "fire4"},
Time = 0.5,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
SoundTable = {{s = "psmg_reload.wav", t = 0}},
Time = 1.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reload",
SoundTable = {{s = "psmg_reload.wav", t = 0}},
Time = 1.5,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Framerate = 37,
Checkpoints = {28, 38, 69},
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
},
}

View File

@@ -0,0 +1,383 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Bastard Gun"
SWEP.Trivia_Class = "Submachine Gun"
SWEP.Trivia_Desc = "Submachinegun, 5.45 caliber. It's got poor accuracy and overheats like hell. That's why they call it a Bastard gun, hahah."
SWEP.Trivia_Manufacturer = "Unknown"
SWEP.Trivia_Calibre = "5.45x39mm"
SWEP.Trivia_Mechanism = "Russian Magic"
SWEP.Trivia_Country = "Russia"
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_BastardGun.mdl"
SWEP.WorldModel = "models/weapons/c_BastardGun.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 9
SWEP.DamageMin = 9 -- damage done at maximum range
SWEP.Range = 75 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 250 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 300
SWEP.Recoil = 0.200
SWEP.RecoilSide = 0.100
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 650 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_smg1"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 14 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 325 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "ump" -- the magazine pool this gun draws from
SWEP.ShootVol = 110 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.FirstShootSound = "BastardGun/Shoot.wav"
SWEP.ShootSound = "BastardGun/Shoot.wav"
SWEP.ShootSoundSilenced = "BastardGun/Shoots.wav"
SWEP.DistantShootSound = "BastardGun/Shoot.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_smg"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 100
SWEP.ShellScale = 1.25
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.95
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.300
SWEP.IronSightStruct = {
Pos = Vector(-7.7, -9.849, 1.6),
Ang = Angle(-0.201, -0.851, -1.4),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-1, 2, -1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, 0, -1)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.BarrelLength = 18
SWEP.AttachmentElements = {
["lastlightpete"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.ExtraSightDist = 10
SWEP.WorldModelOffset = {
pos = Vector(-15, 8, -4),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp", "optic"},
Bone = "BastardGun",
DefaultAttName = "Iron Sights",
Offset = {
vpos = Vector(0, -3.4, 14),
vang = Angle(90, 0, -90),
},
InstalledEles = {"rail"},
VMScale = Vector(1.25, 1.25, 1.25),
CorrectiveAng = Angle(-0.5, 0, 0),
CorrectivePos = Vector(0, 0, 0)
},
{
PrintName = "Underbarrel",
Slot = "foregrip",
Bone = "BastardGun",
DefaultAttName = "Standard Foregrip",
Offset = {
vpos = Vector(0, 0, 14),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ubrms"},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "BastardGun",
Offset = {
vpos = Vector(-1.201, -2.3, 18),
vang = Angle(90.5, 0, 0),
},
InstalledEles = {"tacms"},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "BastardGun",
Offset = {
vpos = Vector(0, -2.25, 24),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Ammo Type",
Slot = "go_ammo",
DefaultAttName = "Standard Ammo"
},
{
PrintName = "Perk",
Slot = "go_perk"
},
{
PrintName = "Skin",
Slot = {"metro_skinpete"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "BastardGun", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.8, -1.3, 0), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
},
},
}
SWEP.Jamming = true
SWEP.HeatCapacity = 65
SWEP.HeatDissipation = 12
SWEP.HeatLockout = true
SWEP.HeatDelayTime = 3.5
SWEP.HeatFix = true
SWEP.BulletBones = {
[1] = "Bullet1",
[2] = "Bullet2",
[3] = "Bullet3",
[4] = "Bullet4",
[5] = "Bullet5",
[6] = "Bullet6",
[7] = "Bullet7",
[8] = "Bullet8",
[9] = "Bullet9",
[10] = "Bullet10",
[11] = "Bullet11",
[12] = "Bullet12",
[13] = "Bullet13",
[14] = "Bullet14",
[15] = "Bullet15",
[16] = "Bullet16",
[17] = "Bullet17",
[18] = "Bullet18",
[19] = "Bullet19",
[20] = "Bullet20",
[21] = "Bullet21",
[22] = "Bullet22",
[23] = "Bullet23",
[24] = "Bullet24",
[25] = "Bullet25",
[26] = "Bullet26",
[27] = "Bullet27",
[28] = "Bullet28",
[29] = "Bullet29",
[30] = "Bullet30",
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["ready"] = {
Source = "ready",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fix"] = {
Source = "fix",
},
["fire"] = {
Source = "shoot",
Time = 0.25,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shoot",
Time = 0.5,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reloadpartial",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 2.1,
LHIKEaseOut = 0.3,
LastClip1OutTime = 1,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {16, 30, 55},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.4,
LHIKOut = 2.5,
LHIKEaseOut = 0.3,
LastClip1OutTime = 1,
},
}
sound.Add({
name = "BG.BoltPull",
channel = 16,
volume = 1.0,
sound = "BastardGun/BoltPull.wav"
})
sound.Add({
name = "BG.Clip",
channel = 16,
volume = 1.0,
sound = "BastardGun/Clip.wav"
})
sound.Add({
name = "BG.Hit",
channel = 16,
volume = 1.0,
sound = "BastardGun/Hit.wav"
})
sound.Add({
name = "BG.ClipIn",
channel = 16,
volume = 1.0,
sound = "BastardGun/ClipIn.wav"
})
sound.Add({
name = "BG.ClipIn2",
channel = 16,
volume = 1.0,
sound = "BastardGun/ClipIn2.wav"
})
sound.Add({
name = "BG.ClipOut",
channel = 16,
volume = 1.0,
sound = "BastardGun/ClipOut.wav"
})
sound.Add({
name = "BG.ClipOut1",
channel = 16,
volume = 1.0,
sound = "BastardGun/ClipOut1.wav"
})
sound.Add({
name = "BG.ClipOut2",
channel = 16,
volume = 1.0,
sound = "BastardGun/ClipOut2.wav"
})
sound.Add({
name = "BG.Fix",
channel = 16,
volume = 1.0,
sound = "BastardGun/Fix.wav"
})
sound.Add({
name = "BG.Fix1",
channel = 16,
volume = 1.0,
sound = "BastardGun/Fix1.wav"
})

View File

@@ -0,0 +1,318 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Duplet"
SWEP.Trivia_Class = "Shotgun"
SWEP.Trivia_Desc = "The 12-gauge shotgun is one of the best close combat weapons ever. A blast from both of its barrels can kill almost any mutant on the spot."
SWEP.Trivia_Manufacturer = "Unknown"
SWEP.Trivia_Calibre = "12 Gauge"
SWEP.Trivia_Mechanism = "Break-Action"
SWEP.Slot = 3
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_duplet.mdl"
SWEP.WorldModel = "models/weapons/c_duplet.mdl"
SWEP.ViewModelFOV = 60
SWEP.Damage = 7
SWEP.DamageMin = 7 -- damage done at maximum range
SWEP.Range = 50 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BUCKSHOT
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1100 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 2 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 2
SWEP.ReducedClipSize = 1
SWEP.Recoil = 2.5
SWEP.RecoilSide = 1
SWEP.MaxRecoilBlowback = 2
SWEP.AccuracyMOA = 45 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 600 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 150
SWEP.Delay = 60 / 600 -- 60 / RPM.
SWEP.Num = 8 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
PrintName = "SNGL",
Mode = 1,
},
{
PrintName = "BOTH",
Mode = -2,
RunawayBurst = true,
Override_ShotRecoilTable = {
[1] = 0.25
}
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = {"weapon_annabelle", "weapon_shotgun"}
SWEP.NPCWeight = 100
SWEP.Primary.Ammo = "buckshot" -- what ammo type the gun uses
SWEP.ShootVol = 120 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.FirstShootSound = "Duplet/Shoot.wav"
SWEP.ShootSound = "Duplet/Shoot1.wav"
SWEP.DistantShootSound = "Duplet/Shoot.wav"
SWEP.MuzzleEffect = "muzzleflash_shotgun"
SWEP.ShellModel = "models/shells/shell_12gauge.mdl"
SWEP.ShellPitch = 100
SWEP.ShellSounds = ArcCW.ShotgunShellSoundsTable
SWEP.ShellScale = 1.5
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.94
SWEP.SightedSpeedMult = 0.5
SWEP.SightTime = 0.30
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {}
SWEP.RevolverReload = true
SWEP.BulletBones = {
[1] = "Buckshot1",
[2] = "Buckshot2"
}
SWEP.CaseBones = {
[1] = "Buckshot1",
[2] = "Buckshot2"
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "ar2"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_SHOTGUN
SWEP.ActivePos = Vector(1, 12, -2)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-3, 3, 0)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3.5, 2, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.WorldModelOffset = {
pos = Vector(-5, 7.5, -4),
ang = Angle(-15, 0, -180)
}
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.AttachmentElements = {
["lastlightd"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.ShootVol = 130 -- volume of shoot sound
SWEP.SpeedMult = 0.97
SWEP.SightedSpeedMult = 0.80
SWEP.SightTime = 0.225
SWEP.BarrelLength = 24
SWEP.IronSightStruct = {
Pos = Vector(-7.591, -4.824, 2),
Ang = Angle(-0.704, -3, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "shotgun"
SWEP.HoldtypeSights = "ar2"
SWEP.ExtraSightDist = 5
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic"}, -- what kind of attachments can fit here, can be string or table
Bone = "Optic", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, 0.2, 2), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(13.762, 0.5, -6.102),
wang = Angle(-15, 0, 180)
},
},
{
PrintName = "Choke",
DefaultAttName = "Standard Choke",
Slot = "choke",
},
{
PrintName = "Underbarrel",
Slot = {"foregrip", "style_pistol"},
Bone = "Optic",
Offset = {
vpos = Vector(0, 3.635, 3.635),
vang = Angle(90, 0, -90),
wpos = Vector(14.329, 0.8, -4.453),
wang = Angle(-15, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Optic",
Offset = {
vpos = Vector(-1.5, 0.8, 3.6), -- offset that the attachment will be relative to the bone
vang = Angle(92, 0, 180),
wpos = Vector(20, -0.6, -7.5),
wang = Angle(-15, -3, 90)
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Ammo Type",
Slot = "ammo_shotgun"
},
{
PrintName = "Perk",
Slot = "perk",
DefaultAttName = "None"
},
{
PrintName = "Skin",
Slot = {"metro_skind"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "Optic", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.42, 2.3, 7.8), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(18, 1.3, -5.7),
wang = Angle(-15, 0, 180)
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
Time = 1
},
["draw"] = {
Source = "draw",
Time = 0.5,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
SoundTable = {{s = "weapons/arccw/nova/nova_draw.wav", t = 0}},
},
["ready"] = {
Source = "ready",
Time = 3,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
SoundTable = {{s = "weapons/arccw/nova/nova_draw.wav", t = 0}},
},
["fire"] = {
Source = "shoot",
Time = 0.4,
},
["fire_iron"] = {
Source = "shoot_iron",
Time = 0.4,
},
["reload"] = {
Source = "reload_part",
Time = 2.15,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
Checkpoints = {28, 64, 102},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LastClip1OutTime = 0.4,
},
["reload_empty"] = {
Source = "reload",
Time = 2.6,
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
Checkpoints = {28, 64, 102},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LastClip1OutTime = 0.4,
},
}
sound.Add({
name = "Weapon_Duplet.Lever",
channel = 16,
volume = 1.0,
sound = "Duplet/Lever.wav"
})
sound.Add({
name = "Weapon_Duplet.Load",
channel = 16,
volume = 1.0,
sound = "Duplet/Load.wav"
})
sound.Add({
name = "Weapon_Duplet.In",
channel = 16,
volume = 1.0,
sound = "Duplet/In.wav"
})
sound.Add({
name = "Weapon_Duplet.Out",
channel = 16,
volume = 1.0,
sound = "Duplet/Out.wav"
})

View File

@@ -0,0 +1,275 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Helsing"
SWEP.Trivia_Class = "Helsing"
SWEP.Trivia_Desc = "A silent, revolving air gun that shoots metal bolts. Overpressurizing its tank increases power, but the extra pressure vents before long."
SWEP.Trivia_Manufacturer = "Unknown"
SWEP.Trivia_Calibre = "Helsing Bolt"
SWEP.Trivia_Mechanism = "Pneumatic"
SWEP.Trivia_Country = "Russia"
SWEP.Slot = 3
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_Helsing.mdl"
SWEP.WorldModel = "models/weapons/c_Helsing.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultSkin = 0
SWEP.Damage = 29
SWEP.DamageMin = 29
SWEP.Range = 40 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 200 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.AlwaysPhysBullet = true
SWEP.PhysTracerProfile = 0
SWEP.TracerNum = 1
SWEP.Tracer = "arccw_tracer"
SWEP.TracerCol = Color(38, 38, 38)
SWEP.CanFireUnderwater = true
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 8 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 8
SWEP.ReducedClipSize = 6
SWEP.Recoil = 1
SWEP.RecoilSide = 1
SWEP.RecoilRise = 1
SWEP.VisualRecoilMult = 0.5
SWEP.Delay = 60 / 180 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0,
}
}
SWEP.NPCWeaponType = {"weapon_ar2"}
SWEP.NPCWeight = 75
SWEP.AccuracyMOA = 3 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 150 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "357" -- what ammo type the gun uses
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 95 -- pitch of shoot sound
SWEP.ShootSound = "Helsing/Shoot.mp3"
SWEP.ShootSoundSilenced = "Helsing/Shoot.mp3"
SWEP.DistantShootSound = "Helsing/Shoot.mp3"
SWEP.MuzzleEffect = nil
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 0 -- which attachment to put the case effect on
SWEP.RevolverReload = true
SWEP.SightTime = 0.28
SWEP.SpeedMult = 0.975
SWEP.SightedSpeedMult = 0.75
SWEP.BarrelLength = 18
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {
[1] = "Bullet1",
[2] = "Bullet2",
[3] = "Bullet3",
[4] = "Bullet4",
[5] = "Bullet5",
[6] = "Bullet6",
}
SWEP.IronSightStruct = {
Pos = Vector(-5.881, 0, 2.184),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 0, 1)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.HolsterPos = Vector(5, 0, 0)
SWEP.HolsterAng = Angle(-4, 30.016, 0)
SWEP.CrouchPos = Vector(-3, 0, 0)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.ExtraSightDist = 10
SWEP.WorldModelOffset = {
pos = Vector(-16.105, 7, -5.715),
ang = Angle(-10.52, 0, 180)
}
SWEP.GuaranteeLaser = false
SWEP.MirrorVMWM = true
SWEP.BulletBones = {
[1] = "Arrow1",
[2] = "Arrow2",
[3] = "Arrow3",
[4] = "Arrow4",
[5] = "Arrow5",
[6] = "Arrow6",
[7] = "Arrow7",
[8] = "Arrow8",
}
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic"},
Bone = "Helsing",
Offset = {
vpos = Vector(0, -3.8, 3.5),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Helsing",
Offset = {
vpos = Vector(-0.5, -0.601, 17.7),
vang = Angle(89.7, 0.4, 180),
},
VMScale = Vector(0.7, 0.7, 0.7),
WMScale = Vector(0.7, 0.7, 0.7),
},
{
PrintName = "Underbarrel",
Slot = {"foregrip"},
Bone = "Helsing",
Offset = {
vpos = Vector(0, 2.599, 19),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet",
},
{
PrintName = "Perk",
Slot = {"perk"}
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "Helsing",
Offset = {
vpos = Vector(0.37, -0.7, 2.7), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(10, 1.25, -4),
wang = Angle(0, -4.211, 180)
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw"
},
["ready"] = {
Source = "ready",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = "shoot",
},
["fire_iron"] = {
Source = "shoot",
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
Time = 2.4,
LastClip1OutTime = 1.3,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.5,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
LastClip1OutTime = 1.3,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.5,
},
}
sound.Add({
name = "HS.Reload",
channel = 16,
volume = 1.0,
sound = "Helsing/helsingrl1.wav"
})
sound.Add({
name = "HS.Reload2",
channel = 16,
volume = 1.0,
sound = "Helsing/helsingrl2.wav"
})

View File

@@ -0,0 +1,330 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Kalash"
SWEP.TrueName = "AK-74M"
SWEP.Trivia_Class = "Assault Rifle"
SWEP.Trivia_Desc = "The classic pre-war assault rifle. Despite being very common, it is held in very high regard in the Metro due to its reliability and performance."
SWEP.Trivia_Manufacturer = "Izhmash"
SWEP.Trivia_Calibre = "5.45x39mm"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 1991
SWEP.Slot = 2
SWEP.UseHands = true
if GetConVar("arccw_truenames"):GetBool() then SWEP.PrintName = SWEP.TrueName end
SWEP.ViewModel = "models/weapons/c_kalash.mdl"
SWEP.WorldModel = "models/weapons/c_kalash.mdl"
SWEP.ViewModelFOV = 90
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 13
SWEP.DamageMin = 13 -- damage done at maximum range
SWEP.Range = 500 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 880 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 30 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 880
SWEP.Recoil = 0.93
SWEP.RecoilSide = 0.65
SWEP.RecoilRise = 0.3
SWEP.RecoilPunch = 2
SWEP.Delay = 60 / 550 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 200
SWEP.AccuracyMOA = 10 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 750 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "ak47" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "Kalash/Shoot.wav"
SWEP.ShootSoundSilenced = "2012/shoots.wav"
SWEP.DistantShootSound = "Kalash/Shoot.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_ak47"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 90
SWEP.ShellScale = 1.5
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.91
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.30
SWEP.IronSightStruct = {
Pos = Vector(-7.9, -7.437, 1.759),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-1, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, 0, -1)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.BarrelLength = 24
SWEP.AttachmentElements = {
["lastlightk"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-10, 8.6, -5),
ang = Angle(-190, 180, 0)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp", "optic"},
Bone = "AK",
DefaultAttName = "Iron Sights",
Offset = {
vpos = Vector(0, -5.2, 11),
vang = Angle(-90, -180, 90),
},
InstalledEles = {"sidemount"},
},
{
PrintName = "Underbarrel",
Slot = {"foregrip", "ubgl"},
Bone = "AK",
Offset = {
vpos = Vector(-0, -1.601, 17),
vang = Angle(90, 0, -90),
},
InstalledEles = {"ubrms"},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "AK",
Offset = {
vpos = Vector(-0.601, -2.701, 12),
vang = Angle(-90, 180, 0),
},
InstalledEles = {"sidemount"},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "AK",
Offset = {
vpos = Vector(0.1, -2.651, 28.6),
vang = Angle(-90, 180, 0),
},
InstalledEles = {"no_fh"}
},
{
PrintName = "Ammo Type",
Slot = "go_ammo",
DefaultAttName = "Standard Ammo"
},
{
PrintName = "Perk",
Slot = "go_perk"
},
{
PrintName = "Skin",
Slot = {"metro_skink"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "AK", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.759, -2.401, 9), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
},
},
}
SWEP.BulletBones = {
[1] = "Bullet30",
[2] = "Bullet29",
[3] = "Bullet28",
[4] = "Bullet27",
[5] = "Bullet26",
[6] = "Bullet25",
[7] = "Bullet24",
[8] = "Bullet23",
[9] = "Bullet22",
[10] = "Bullet21",
[11] = "Bullet20",
[12] = "Bullet19",
[13] = "Bullet18",
[14] = "Bullet17",
[15] = "Bullet16",
[16] = "Bullet15",
[17] = "Bullet14",
[18] = "Bullet13",
[19] = "Bullet12",
[20] = "Bullet11",
[21] = "Bullet10",
[22] = "Bullet9",
[23] = "Bullet8",
[24] = "Bullet7",
[25] = "Bullet6",
[26] = "Bullet5",
[27] = "Bullet4",
[28] = "Bullet3",
[29] = "Bullet2",
[30] = "Bullet1",
}
SWEP.Animations = {
["idle"] = {
Source = "ak47_idle"
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["ready"] = {
Source = "drawfirst",
Time = 1.5,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = {"shoot"},
Time = 0.3,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shootis",
Time = 0.1,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Checkpoints = {16, 30},
Time = 2,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LHIKEaseOut = 0.25,
LastClip1OutTime = 1,
},
["reload_empty"] = {
Source = "reload_empty",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Checkpoints = {16, 30, 55},
Time = 3,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LHIKEaseOut = 0.25,
LastClip1OutTime = 1,
},
["enter_inspect"] = false,
["idle_inspect"] = false,
["exit_inspect"] = false,
}
sound.Add({
name = "Kalash.Bolt",
channel = 16,
volume = 1.0,
sound = "Kalash/Bolt.wav"
})
sound.Add({
name = "Kalash.Clipout",
channel = 16,
volume = 1.0,
sound = "Kalash/Clipout.wav"
})
sound.Add({
name = "Kalash.Clipin",
channel = 16,
volume = 1.0,
sound = "Kalash/Clipin.wav"
})

View File

@@ -0,0 +1,328 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Kalash2012"
SWEP.Trivia_Class = "Assault Rifle"
SWEP.Trivia_Desc = "At the start of World War 3, this was the best assault rifle used by the army. It is extremely sought after in the Metro due to its great performance."
SWEP.Trivia_Manufacturer = "Unknown"
SWEP.Trivia_Calibre = "5.45x39mm"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Russia"
SWEP.Slot = 2
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_kalash2012.mdl"
SWEP.WorldModel = "models/weapons/c_kalash2012.mdl"
SWEP.ViewModelFOV = 80
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 8
SWEP.DamageMin = 8 -- damage done at maximum range
SWEP.Range = 500 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1050 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 50 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 1050
SWEP.Recoil = 0.42
SWEP.RecoilSide = 0.65
SWEP.RecoilRise = 0.1
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 700 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 200
SWEP.AccuracyMOA = 9 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 500 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 200
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "ak47" -- the magazine pool this gun draws from
SWEP.ShootVol = 120 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "2012/shoot.wav"
SWEP.ShootSoundSilenced = "2012/shoots.wav"
SWEP.DistantShootSound = "2012/shoot3.wav"
SWEP.DistantShootSoundSilenced = "2012/shoots.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_ak47"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 90
SWEP.ShellScale = 1.5
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.91
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.30
SWEP.IronSightStruct = {
Pos = Vector(-7.191, -7.5, 1.1),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-1, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, 0, -1)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.BarrelLength = 18
SWEP.AttachmentElements = {
["lastlight2012"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-18, 8.2, -1),
ang = Angle(-200, 180, 0)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic_lp", "optic"},
Bone = "2012",
DefaultAttName = "Iron Sights",
Offset = {
vpos = Vector(0.1, -5.4, 9),
vang = Angle(90, 0, -90),
},
InstalledEles = {"sidemount"},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "2012",
Offset = {
vpos = Vector(1.3, -1.201, 11),
vang = Angle(90, 0, 0),
},
InstalledEles = {"sidemount"},
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "2012",
Offset = {
vpos = Vector(0.05, -0.9, 26.9),
vang = Angle(90, 0, -90),
},
InstalledEles = {"no_fh"}
},
{
PrintName = "Ammo Type",
Slot = "go_ammo",
DefaultAttName = "Standard Ammo"
},
{
PrintName = "Perk",
Slot = "go_perk"
},
{
PrintName = "Skin",
Slot = {"metro_skin2012"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "2012", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(1.399, -1.3, 3.65), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
},
},
}
SWEP.BulletBones = {
[5] = "Bullet1",
[6] = "Bullet2",
[7] = "Bullet3",
[8] = "Bullet4",
[9] = "Bullet5",
[10] = "Bullet6",
[11] = "Bullet7",
[12] = "Bullet8",
[13] = "Bullet9",
[14] = "Bullet10",
[15] = "Bullet11",
[16] = "Bullet12",
[17] = "Bullet13",
[18] = "Bullet14",
[19] = "Bullet15",
[20] = "Bullet16",
[21] = "Bullet17",
[22] = "Bullet18",
[23] = "Bullet19",
[24] = "Bullet20",
[25] = "Bullet21",
[26] = "Bullet22",
[27] = "Bullet23",
[28] = "Bullet24",
[29] = "Bullet25",
[30] = "Bullet26",
[31] = "Bullet27",
[32] = "Bullet28",
[33] = "Bullet29",
[34] = "Bullet30",
[35] = "Bullet31",
[36] = "Bullet32",
[37] = "Bullet33",
[38] = "Bullet34",
[39] = "Bullet35",
[40] = "Bullet36",
[41] = "Bullet37",
[42] = "Bullet38",
[43] = "Bullet39",
[44] = "Bullet40",
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
LHIK = true,
Time = 0.5,
LHIKIn = 0,
LHIKOut = 0.5,
},
["ready"] = {
Source = "ready",
Time = 1.5,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = {"shoot", "shoot1"},
Time = 0.3,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shoot_iron",
Time = 0.1,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Checkpoints = {16, 30},
Time = 2.4,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LHIKEaseOut = 0.25,
LastClip1OutTime = 1,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SMG1,
Checkpoints = {16, 30, 55},
Time = 2.6,
FrameRate = 30,
LHIK = true,
LHIKIn = 0.3,
LHIKOut = 0.3,
LHIKEaseOut = 0.25,
LastClip1OutTime = 1,
},
["enter_inspect"] = false,
["idle_inspect"] = false,
["exit_inspect"] = false,
}
sound.Add({
name = "2012.Cliphit",
channel = 16,
volume = 1.0,
sound = "2012/cliphit.wav"
})
sound.Add({
name = "2012.Clipout",
channel = 16,
volume = 1.0,
sound = "2012/clipout.wav"
})
sound.Add({
name = "2012.Clipin",
channel = 16,
volume = 1.0,
sound = "2012/clipin.wav"
})

View File

@@ -0,0 +1,291 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Revolver"
SWEP.Trivia_Class = "Revolver"
SWEP.Trivia_Desc = "A simple and reliable weapon produced in the Metro. Has great stopping power but kicks like a mule."
SWEP.Trivia_Manufacturer = "Unknown"
SWEP.Trivia_Calibre = ".44 Magnum"
SWEP.Trivia_Mechanism = "Double Action"
SWEP.Trivia_Country = "Russia"
SWEP.Slot = 1
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_MetroRevolver.mdl"
SWEP.WorldModel = "models/weapons/c_MetroRevolver.mdl"
SWEP.ViewModelFOV = 60
SWEP.DefaultSkin = 0
SWEP.Damage = 32
SWEP.DamageMin = 32
SWEP.Range = 40 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 1230 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.CanFireUnderwater = false
SWEP.ChamberSize = 0 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 6 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 6
SWEP.ReducedClipSize = 4
SWEP.Recoil = 2.5
SWEP.RecoilSide = 1
SWEP.RecoilRise = 1.8
SWEP.VisualRecoilMult = 0.5
SWEP.Delay = 60 / 180 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
PrintName = "DACT",
Mode = 1,
},
{
Mode = 0,
}
}
SWEP.NPCWeaponType = {"weapon_pistol", "weapon_357"}
SWEP.NPCWeight = 75
SWEP.AccuracyMOA = 8 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "357" -- what ammo type the gun uses
SWEP.MagID = "ragingbull" -- the magazine pool this gun draws from
SWEP.ShootVol = 100 -- volume of shoot sound
SWEP.ShootPitch = 95 -- pitch of shoot sound
SWEP.ShootSound = "Revolver/Shot.wav"
SWEP.ShootSoundSilenced = "Revolver/Shots.wav"
SWEP.DistantShootSound = "Revolver/Shot.wav"
SWEP.MuzzleEffect = "muzzleflash_pistol_deagle"
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 0 -- which attachment to put the case effect on
SWEP.RevolverReload = true
SWEP.SightTime = 0.28
SWEP.SpeedMult = 0.975
SWEP.SightedSpeedMult = 0.75
SWEP.BarrelLength = 18
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {
[1] = "Bullet1",
[2] = "Bullet2",
[3] = "Bullet3",
[4] = "Bullet4",
[5] = "Bullet5",
[6] = "Bullet6",
}
SWEP.IronSightStruct = {
Pos = Vector(-2.721, -2, 1.759),
Ang = Angle(0, 0, 0),
Magnification = 1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.HoldtypeHolstered = "normal"
SWEP.HoldtypeActive = "pistol"
SWEP.HoldtypeSights = "revolver"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_REVOLVER
SWEP.ActivePos = Vector(0, 0, 1)
SWEP.ActiveAng = Angle(0, 1, 0)
SWEP.CustomizePos = Vector(20, 5, -5)
SWEP.HolsterPos = Vector(0, -10, -10)
SWEP.HolsterAng = Angle(45, 0, 0)
SWEP.CrouchPos = Vector(-3, 0, 0)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.SprintPos = Vector(0, -10, -10)
SWEP.SprintAng = Angle(45, 0, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.ExtraSightDist = 10
SWEP.AttachmentElements = {
["lastlightmr"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.WorldModelOffset = {
pos = Vector(-19.2, 4.1, -2),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
DefaultAttName = "Iron Sights",
Slot = {"optic_lp", "optic"},
Bone = "ValveBiped.Weapon_bone",
Offset = {
vpos = Vector(3, 0, 2.2),
vang = Angle(0, 0, 0),
},
VMScale = Vector(0.7, 0.7, 0.7),
CorrectiveAng = nil --Angle(90, 0, -90)
},
{
PrintName = "Muzzle",
DefaultAttName = "Standard Muzzle",
Slot = "muzzle",
Bone = "ValveBiped.Weapon_bone",
Offset = {
vpos = Vector(8.699, 0, 1.75),
vang = Angle(0, 0, 0),
wpos = Vector(15.2, 1, -4.3),
wang = Angle(0, 0, 0)
},
VMScale = Vector(0.7, 0.7, 0.7),
},
{
PrintName = "Tactical",
Slot = "tac_pistol",
Bone = "ValveBiped.Weapon_bone",
Offset = {
vpos = Vector(7, 0, 1),
vang = Angle(0, -1, 0),
wpos = Vector(15, 1, -3.4),
wang = Angle(0, 0, 180)
}
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet",
},
{
PrintName = "Perk",
Slot = {"perk", "perk_revolver"}
},
{
PrintName = "Skin",
Slot = {"metro_skinmr"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "ValveBiped.Weapon_bone",
Offset = {
vpos = Vector(1.799, -0.301, -0.301), -- offset that the attachment will be relative to the bone
vang = Angle(0, 0, 0),
wpos = Vector(10, 1.25, -4),
wang = Angle(0, -4.211, 180)
},
},
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
Time = 0.7,
},
["ready"] = {
Source = "ready",
},
["fire"] = {
Source = "shoot",
},
["fire_iron"] = {
Source = "shoot",
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
Time = 2.15,
FrameRate = 30,
LastClip1OutTime = 1.3,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
FrameRate = 30,
LastClip1OutTime = 1.3,
},
}
sound.Add({
name = "MR.BI",
channel = 16,
volume = 1.0,
sound = "Revolver/Bulletsin.wav"
})
sound.Add({
name = "MR.BO",
channel = 16,
volume = 1.0,
sound = "Revolver/Bulletsout.wav"
})
sound.Add({
name = "MR.Close",
channel = 16,
volume = 1.0,
sound = "Revolver/Close.wav"
})
sound.Add({
name = "MR.Open",
channel = 16,
volume = 1.0,
sound = "Revolver/Op.wav"
})
sound.Add({
name = "MR.MT",
channel = 16,
volume = 1.0,
sound = "Revolver/Mt.wav"
})

View File

@@ -0,0 +1,280 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "Tikhar"
SWEP.Trivia_Class = "Tikhar"
SWEP.Trivia_Desc = "A makeshift air gun, surprisingly silent and accurate. Overpressurizing its tank increases power, but the extra pressure vents before long."
SWEP.Trivia_Manufacturer = "Homemade"
SWEP.Trivia_Calibre = "Ball Bearings"
SWEP.Trivia_Mechanism = "Pneumatic"
SWEP.Trivia_Country = "Russia"
SWEP.Slot = 3
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_Tikhar.mdl"
SWEP.WorldModel = "models/weapons/c_Tikhar.mdl"
SWEP.ViewModelFOV = 65
SWEP.DefaultBodygroups = "00000"
SWEP.Damage = 25
SWEP.DamageMin = 25
SWEP.Range = 50 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 200 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.AlwaysPhysBullet = true
SWEP.PhysTracerProfile = 0
SWEP.TracerNum = 1
SWEP.Tracer = "arccw_tracer"
SWEP.TracerCol = Color(38, 38, 38)
SWEP.CanFireUnderwater = true
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 15 -- DefaultClip is automatically set.
SWEP.ExtendedClipSize = 30
SWEP.ReducedClipSize = 10
SWEP.Recoil = 0.9
SWEP.RecoilSide = 0.65
SWEP.RecoilRise = 1
SWEP.VisualRecoilMult = 1
SWEP.Delay = 60 / 180 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.AccuracyMOA = 3 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 150 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 250
SWEP.Primary.Ammo = "ar2" -- what ammo type the gun uses
SWEP.ShootVol = 120 -- volume of shoot sound
SWEP.ShootPitch = 110 -- pitch of shoot sound
SWEP.ShootSound = "Tikhar/Shoot.wav"
SWEP.DistantShootSound = "Tikhar/Shoot.wav"
SWEP.ShootSoundSilenced = "Tikhar/Shoot.wav"
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 0 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.89
SWEP.SightedSpeedMult = 0.65
SWEP.RevolverReload = true
SWEP.ProceduralRegularFire = false
SWEP.ProceduralIronFire = false
SWEP.CaseBones = {
[1] = "Bullet16",
[2] = "Bullet15",
[3] = "Bullet14",
[4] = "Bullet13",
[5] = "Bullet12",
[6] = "Bullet11",
[7] = "Bullet10",
[8] = "Bullet9",
[9] = "Bullet8",
[10] = "Bullet7",
[11] = "Bullet6",
[12] = "Bullet5",
[13] = "Bullet4",
[14] = "Bullet3",
[15] = "Bullet2",
[16] = "Bullet1",
}
SWEP.IronSightStruct = {
Pos = Vector(-3.217, 0, 0.959),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 100
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(0, 0, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.HolsterPos = Vector(3.5, 2, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.BarrelLength = 27
SWEP.ShellRotateAngle = Angle(180, 180, 0)
SWEP.ExtraSightDist = 6
SWEP.MirrorVMWM = true
SWEP.WorldModelOffset = {
pos = Vector(-13, 4, -4),
ang = Angle(-10.52, 0, 180)
}
SWEP.Attachments = {
{
PrintName = "Optic", -- print name
DefaultAttName = "Iron Sights",
Slot = {"optic", "optic_sniper", "optic_lp"}, -- what kind of attachments can fit here, can be string or table
Bone = "Tikhar", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0, -3.5, 14),
vang = Angle(90, 0, -90),
},
VMScale = Vector(1.1, 1.1, 1.1),
},
{
PrintName = "Underbarrel",
Slot = {"foregrip", "bipod"},
Bone = "Tikhar",
Offset = {
vpos = Vector(0, 0.699, 7.791),
vang = Angle(90, 0, -90),
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "Tikhar",
Offset = {
vpos = Vector(0.6, -2.597, 15.064), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, 0),
},
},
{
PrintName = "Grip",
Slot = "grip",
DefaultAttName = "Standard Grip"
},
{
PrintName = "Fire Group",
Slot = "fcg",
DefaultAttName = "Standard FCG"
},
{
PrintName = "Ammo Type",
Slot = "ammo_bullet"
},
{
PrintName = "Perk",
Slot = "perk"
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "Tikhar", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.7, -2.1, 5),
vang = Angle(90, 0, -90),
},
VMScale = Vector(1, 1, 1),
},
}
SWEP.BulletBones = {
[1] = "Bullet16",
[2] = "Bullet15",
[3] = "Bullet14",
[4] = "Bullet13",
[5] = "Bullet12",
[6] = "Bullet11",
[7] = "Bullet10",
[8] = "Bullet9",
[9] = "Bullet8",
[10] = "Bullet7",
[11] = "Bullet6",
[12] = "Bullet5",
[13] = "Bullet4",
[14] = "Bullet3",
[15] = "Bullet2",
[16] = "Bullet1",
}
SWEP.Animations = {
["idle"] = {
Source = "idle"
},
["draw"] = {
Source = "draw",
Time = 1,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["ready"] = {
Source = "ready",
Time = 1.5,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.25,
},
["fire"] = {
Source = "shoot",
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shoot",
ShellEjectAt = 0,
},
["reload"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {24, 60},
FrameRate = 30,
Time = 4.2,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
LastClip1OutTime = 2,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
Checkpoints = {24, 60, 102},
FrameRate = 30,
LHIK = true,
LHIKIn = 0.5,
LHIKOut = 0.5,
LastClip1OutTime = 2,
},
}

View File

@@ -0,0 +1,328 @@
--[[
| 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/
--]]
SWEP.Base = "arccw_base"
SWEP.Spawnable = true -- this obviously has to be set to true
SWEP.Category = "Willard - Junk Weapons" -- edit this if you like
SWEP.AdminOnly = false
SWEP.PrintName = "VSV"
SWEP.TrueName = "VSK-94"
SWEP.Trivia_Class = "Assault Rifle"
SWEP.Trivia_Desc = "An accurate and powerful assault rifle good for medium-range combat. Its somewhat low muzzle velocity translates into lower noise and faster bullet drop."
SWEP.Trivia_Manufacturer = "Konstruktorskoe Buro Priborostroeniya"
SWEP.Trivia_Calibre = "5.45x39mm"
SWEP.Trivia_Mechanism = "Gas-Operated"
SWEP.Trivia_Country = "Russia"
SWEP.Trivia_Year = 1994
SWEP.Slot = 2
if GetConVar("arccw_truenames"):GetBool() then SWEP.PrintName = SWEP.TrueName end
SWEP.UseHands = true
SWEP.ViewModel = "models/weapons/c_VSV.mdl"
SWEP.WorldModel = "models/weapons/c_VSV.mdl"
SWEP.ViewModelFOV = 65
SWEP.DefaultBodygroups = "000000000000"
SWEP.Damage = 14
SWEP.DamageMin = 14
SWEP.Range = 400 -- in METRES
SWEP.Penetration = 1
SWEP.DamageType = DMG_BULLET
SWEP.ShootEntity = nil -- entity to fire, if any
SWEP.MuzzleVelocity = 270 -- projectile or phys bullet muzzle velocity
-- IN M/S
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
SWEP.Primary.ClipSize = 20 -- DefaultClip is automatically set.
SWEP.PhysBulletMuzzleVelocity = 270
SWEP.Recoil = 0.62
SWEP.RecoilSide = 0.255
SWEP.RecoilRise = 0.2
SWEP.RecoilPunch = 2.5
SWEP.Delay = 60 / 600 -- 60 / RPM.
SWEP.Num = 1 -- number of shots per trigger pull.
SWEP.Firemodes = {
{
Mode = 2,
},
{
Mode = 1,
},
{
Mode = 0
}
}
SWEP.NPCWeaponType = "weapon_ar2"
SWEP.NPCWeight = 100
SWEP.AccuracyMOA = 9 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
SWEP.HipDispersion = 650 -- inaccuracy added by hip firing.
SWEP.MoveDispersion = 100
SWEP.Primary.Ammo = "smg1" -- what ammo type the gun uses
SWEP.MagID = "stanag" -- the magazine pool this gun draws from
SWEP.ShootVol = 110 -- volume of shoot sound
SWEP.ShootPitch = 100 -- pitch of shoot sound
SWEP.ShootSound = "VSV/shoot.wav"
SWEP.DistantShootSound = "VSV/shoot2.wav"
SWEP.MeleeSwingSound = "arccw_go/m249/m249_draw.wav"
SWEP.MeleeMissSound = "weapons/iceaxe/iceaxe_swing1.wav"
SWEP.MeleeHitSound = "arccw_go/knife/knife_hitwall1.wav"
SWEP.MeleeHitNPCSound = "physics/body/body_medium_break2.wav"
SWEP.MuzzleEffect = "muzzleflash_4"
SWEP.ShellModel = "models/shells/shell_556.mdl"
SWEP.ShellPitch = 95
SWEP.ShellScale = 1.25
SWEP.ShellRotateAngle = Angle(0, 180, 0)
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
SWEP.SpeedMult = 0.97
SWEP.SightedSpeedMult = 0.75
SWEP.SightTime = 0.30
SWEP.IronSightStruct = {
Pos = Vector(-6.281, -5, 1.879),
Ang = Angle(0, 0, 0),
Magnification = 1.1,
SwitchToSound = "", -- sound that plays when switching to this sight
CrosshairInSights = false
}
SWEP.HoldtypeHolstered = "passive"
SWEP.HoldtypeActive = "ar2"
SWEP.HoldtypeSights = "rpg"
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_AR2
SWEP.ActivePos = Vector(-1, 2, 0)
SWEP.ActiveAng = Angle(0, 0, 0)
SWEP.CrouchPos = Vector(-4, 0, -1)
SWEP.CrouchAng = Angle(0, 0, -10)
SWEP.HolsterPos = Vector(3, 3, 0)
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
SWEP.CustomizePos = Vector(8, 0, 1)
SWEP.CustomizeAng = Angle(5, 30, 30)
SWEP.BarrelLength = 24
SWEP.AttachmentElements = {
["lastlightvsv"] = {
VMSkin = 1,
WMSkin = 1,
},
}
SWEP.ExtraSightDist = 10
SWEP.GuaranteeLaser = true
SWEP.WorldModelOffset = {
pos = Vector(-12, 7, -3.5),
ang = Angle(-10, 0, 180)
}
SWEP.MirrorVMWM = true
SWEP.Attachments = {
{
PrintName = "Optic",
Slot = {"optic", "optic_lp"},
Bone = "VSV",
DefaultAttName = "Iron Sights",
Offset = {
vpos = Vector(0.05, -3.1, 3.635),
vang = Angle(90, 0, -90),
wpos = Vector(22, 1, -7),
wang = Angle(-9.79, 0, 180)
},
VMScale = Vector(1, 1, 1),
InstalledEles = {"rs_none", "fs_down"},
CorrectiveAng = Angle(0, 0, 0),
},
{
PrintName = "Underbarrel",
Slot = "foregrip",
Bone = "VSV",
Offset = {
vpos = Vector(0, -1, 11),
vang = Angle(90, 0, -90),
wpos = Vector(22, 1, -7),
wang = Angle(-9.79, 0, 180)
},
},
{
PrintName = "Tactical",
Slot = "tac",
Bone = "VSV",
Offset = {
vpos = Vector(0, -0.7, 15),
vang = Angle(90, 0, -90),
wpos = Vector(22, 1, -7),
wang = Angle(-9.79, 0, 180)
},
},
{
PrintName = "Ammo Type",
Slot = "go_ammo",
DefaultAttName = "Standard Ammo"
},
{
PrintName = "Perk",
Slot = "go_perk"
},
{
PrintName = "Skin",
Slot = {"metro_skinvsv"},
DefaultAttName = "Metro 2033",
FreeSlot = true
},
{
PrintName = "Charm",
Slot = "charm",
FreeSlot = true,
Bone = "VSV", -- relevant bone any attachments will be mostly referring to
Offset = {
vpos = Vector(0.6, -1.601, 0.4), -- offset that the attachment will be relative to the bone
vang = Angle(90, 0, -90),
wpos = Vector(6.099, 1.1, -3.301),
wang = Angle(171.817, 180-1.17, 0),
},
},
}
SWEP.BulletBones = {
[1] = "Bullet20",
[2] = "Bullet19",
[3] = "Bullet18",
[4] = "Bullet17",
[5] = "Bullet16",
[6] = "Bullet15",
[7] = "Bullet14",
[8] = "Bullet13",
[9] = "Bullet12",
[10] = "Bullet11",
[11] = "Bullet10",
[12] = "Bullet9",
[13] = "Bullet8",
[14] = "Bullet7",
[15] = "Bullet6",
[16] = "Bullet5",
[17] = "Bullet4",
[18] = "Bullet3",
[19] = "Bullet2",
[20] = "Bullet1",
}
SWEP.Animations = {
["idle"] = {
Source = "idle",
},
["draw"] = {
Source = "draw",
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["ready"] = {
Source = "ready",
Time = 1.7,
LHIK = true,
LHIKIn = 0,
LHIKOut = 0.5,
},
["fire"] = {
Source = "shoot",
Time = 0.5,
ShellEjectAt = 0,
},
["fire_iron"] = {
Source = "shoot_iron",
Time = 0.5,
ShellEjectAt = 0,
},
["reload"] = {
Source = "reloadpart",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
Time = 2.3,
LHIK = true,
LHIKIn = 0.2,
LHIKEaseIn = 0.2,
LHIKOut = 0.2,
LHIKEaseOut = 0.2,
LastClip1OutTime = 1,
},
["reload_empty"] = {
Source = "reload",
TPAnim = ACT_HL2MP_GESTURE_RELOAD_AR2,
FrameRate = 30,
Time = 3,
LHIK = true,
LHIKIn = 0.2,
LHIKOut = 0.2,
LHIKEaseOut = 0.2,
LastClip1OutTime = 1,
},
["enter_inspect"] = {
LHIK = false,
},
["idle_inspect"] = {
LHIK = false,
},
["exit_inspect"] = {
LHIK = false,
},
}
sound.Add({
name = "Weapon_VSV.CA",
channel = 16,
volume = 1.0,
sound = "VSV/VSVCA.wav"
})
sound.Add({
name = "Weapon_VSV.Clipout",
channel = 16,
volume = 1.0,
sound = "VSV/VSVClipout.wav"
})
sound.Add({
name = "Weapon_VSV.Clipin",
channel = 16,
volume = 1.0,
sound = "VSV/VSVClipin.wav"
})
sound.Add({
name = "VSV.Cliphit",
channel = 16,
volume = 1.0,
sound = "VSV/cliphit.wav"
})

View File

@@ -0,0 +1,30 @@
--[[
| 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 = "OSPR2A-EXP"
ITEM.description = "A heavier, more powerful version of the Combine Pulse-Rifle. Extremely inaccurate when moving. Ball launcher not included and is sold separately."
ITEM.model = "models/weapons/irifle2/w_irifle2.mdl"
ITEM.class = "arccw_ar21"
ITEM.weaponCategory = "primary"
ITEM.balanceCat = "assaultrifle"
ITEM.baseDamage = 23
ITEM.armorPen = 0.8
ITEM.width = 4
ITEM.height = 2
ITEM.iconCam = {
pos = Vector(-19.67, 199.67, 5.91),
ang = Angle(1.2, 633.49, 0),
fov = 10.64
}
ITEM.replaceOnDeath = "dummy_biolock_expar2"
ITEM.magazines = {["magazine_heavypulse"] = true}

View File

@@ -0,0 +1,29 @@
--[[
| 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 = "HK USP .45"
ITEM.description = "The USP 45 is a semi-automatic handgun utilizing standard 9mm rounds. It is quite popular among the Civil Protection for use in daily duties and containment as an effective firearm."
ITEM.model = "models/weapons/unloaded/pist_p228.mdl"
ITEM.class = "arccw_eft_usp"
ITEM.weaponCategory = "sidearm"
ITEM.balanceCat = "pistol"
ITEM.baseDamage = 15
ITEM.armorPen = 0.6
ITEM.width = 2
ITEM.height = 1
ITEM.iconCam = {
pos = Vector(138.44, -705.16, 149.66),
ang = Angle(11.67, 461.26, 0),
fov = 1.32
}
ITEM.magazines = {["magazine_usp"] = true}

Some files were not shown because too many files have changed in this diff Show More