Files
wnsrc/lua/tfa/modules/tfa_commands.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

376 lines
14 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
-- Copyright (c) 2018-2020 TFA Base Devs
-- 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.
local function CreateReplConVar(cvarname, cvarvalue, description, ...)
return CreateConVar(cvarname, cvarvalue, CLIENT and {FCVAR_REPLICATED} or {FCVAR_REPLICATED, FCVAR_ARCHIVE, FCVAR_NOTIFY}, description, ...)
end -- replicated only on clients, archive/notify on server
-- Shared Convars
if GetConVar("sv_tfa_changelog") == nil then
CreateReplConVar("sv_tfa_changelog", "1", "Enable changelog?")
end
if GetConVar("sv_tfa_soundscale") == nil then
CreateReplConVar("sv_tfa_soundscale", "1", "Scale sound pitch in accordance to timescale?")
end
if GetConVar("sv_tfa_weapon_strip") == nil then
CreateReplConVar("sv_tfa_weapon_strip", "0", "Allow the removal of empty weapons?")
end
if GetConVar("sv_tfa_spread_legacy") == nil then
CreateReplConVar("sv_tfa_spread_legacy", "0", "Use legacy spread algorithms?")
end
if GetConVar("sv_tfa_cmenu") == nil then
CreateReplConVar("sv_tfa_cmenu", "1", "Allow custom context menu?")
end
if GetConVar("sv_tfa_cmenu_key") == nil then
CreateReplConVar("sv_tfa_cmenu_key", "-1", "Override the inspection menu key? Uses the KEY enum available on the gmod wiki. -1 to not.")
end
if GetConVar("sv_tfa_range_modifier") == nil then
CreateReplConVar("sv_tfa_range_modifier", "0.5", "This controls how much the range affects damage. 0.5 means the maximum loss of damage is 0.5.")
end
if GetConVar("sv_tfa_allow_dryfire") == nil then
CreateReplConVar("sv_tfa_allow_dryfire", "1", "Allow dryfire?")
end
if GetConVar("sv_tfa_penetration_hardlimit") == nil then
CreateReplConVar("sv_tfa_penetration_hardlimit", "100", "Max number of objects we can penetrate through.")
end
if GetConVar("sv_tfa_bullet_penetration_power_mul") == nil then
CreateReplConVar("sv_tfa_bullet_penetration_power_mul", "1", "Power multiplier. 1 or 1.5 for CS 1.6 experience, 0.25 for semi-realistic behavior")
end
if GetConVar("sv_tfa_penetration_hitmarker") == nil then
CreateReplConVar("sv_tfa_penetration_hitmarker", "1", "Should penetrating bullet send hitmarker to attacker?")
end
if GetConVar("sv_tfa_damage_multiplier") == nil then
CreateReplConVar("sv_tfa_damage_multiplier", "1", "Multiplier for TFA base projectile damage.")
end
if GetConVar("sv_tfa_damage_multiplier_npc") == nil then
CreateReplConVar("sv_tfa_damage_multiplier_npc", "1", "Multiplier for TFA base projectile damage for NPCs.")
end
if GetConVar("sv_tfa_damage_mult_min") == nil then
CreateConVar("sv_tfa_damage_mult_min", "0.95", {FCVAR_REPLICATED, FCVAR_NOTIFY, FCVAR_ARCHIVE}, "This is the lower range of a random damage factor.")
end
if GetConVar("sv_tfa_damage_mult_max") == nil then
CreateReplConVar("sv_tfa_damage_mult_max", "1.05", "This is the higher range of a random damage factor.")
end
if GetConVar("sv_tfa_melee_damage_npc") == nil then
CreateReplConVar("sv_tfa_melee_damage_npc", "1", "Damage multiplier against NPCs using TFA Melees.")
end
if GetConVar("sv_tfa_melee_damage_ply") == nil then
CreateReplConVar("sv_tfa_melee_damage_ply", "0.65", "Damage multiplier against players using TFA Melees.")
end
if GetConVar("sv_tfa_melee_blocking_timed") == nil then
CreateReplConVar("sv_tfa_melee_blocking_timed", "1", "Enable timed blocking?")
end
if GetConVar("sv_tfa_melee_blocking_anglemult") == nil then
CreateReplConVar("sv_tfa_melee_blocking_anglemult", "1", "Players can block attacks in an angle around their view. This multiplies that angle.")
end
if GetConVar("sv_tfa_melee_blocking_deflection") == nil then
CreateReplConVar("sv_tfa_melee_blocking_deflection", "1", "For weapons that can deflect bullets ( e.g. certain katans ), can you deflect bullets? Set to 1 to enable for parries, or 2 for all blocks.")
end
if GetConVar("sv_tfa_melee_blocking_timed") == nil then
CreateReplConVar("sv_tfa_melee_blocking_timed", "1", "Enable timed blocking?")
end
if GetConVar("sv_tfa_melee_blocking_stun_enabled") == nil then
CreateReplConVar("sv_tfa_melee_blocking_stun_enabled", "1", "Stun NPCs on block?")
end
if GetConVar("sv_tfa_melee_blocking_stun_time") == nil then
CreateReplConVar("sv_tfa_melee_blocking_stun_time", "0.65", "How long to stun NPCs on block.")
end
if GetConVar("sv_tfa_melee_doordestruction") == nil then
CreateReplConVar("sv_tfa_melee_doordestruction", "1", "Allow players to bash open doors?")
end
if GetConVar("sv_tfa_door_respawn") == nil then
CreateReplConVar("sv_tfa_door_respawn", "-1", "Time for doors to respawn; -1 for never.")
end
if GetConVar("sv_tfa_npc_randomize_atts") == nil then
CreateReplConVar("sv_tfa_npc_randomize_atts", "1", "Randomize NPC's weapons attachments.")
end
local cv_dfc
if GetConVar("sv_tfa_default_clip") == nil then
cv_dfc = CreateReplConVar("sv_tfa_default_clip", "-1", "How many clips will a weapon spawn with? Negative reverts to default values.")
else
cv_dfc = GetConVar("sv_tfa_default_clip")
end
local function TFAUpdateDefaultClip()
local dfc = cv_dfc:GetInt()
local weplist = weapons.GetList()
if not weplist or #weplist <= 0 then return end
for _, v in pairs(weplist) do
local cl = v.ClassName and v.ClassName or v
local wep = weapons.GetStored(cl)
if wep and (wep.IsTFAWeapon or string.find(string.lower(wep.Base and wep.Base or ""), "tfa")) then
if not wep.Primary then
wep.Primary = {}
end
if not wep.Primary.TrueDefaultClip then
wep.Primary.TrueDefaultClip = wep.Primary.DefaultClip
end
if not wep.Primary.TrueDefaultClip then
wep.Primary.TrueDefaultClip = 0
end
if dfc < 0 then
wep.Primary.DefaultClip = wep.Primary.TrueDefaultClip
else
if wep.Primary.ClipSize and wep.Primary.ClipSize > 0 then
wep.Primary.DefaultClip = wep.Primary.ClipSize * dfc
else
wep.Primary.DefaultClip = wep.Primary.TrueDefaultClip * 1
end
end
end
end
end
hook.Add("InitPostEntity", "TFADefaultClipPE", TFAUpdateDefaultClip)
if TFAUpdateDefaultClip then
TFAUpdateDefaultClip()
end
--if GetConVar("sv_tfa_default_clip") == nil then
cvars.AddChangeCallback("sv_tfa_default_clip", function(convar_name, value_old, value_new)
TFAUpdateDefaultClip()
end, "TFAUpdateDefaultClip")
local function sv_tfa_range_modifier()
for k, v in ipairs(ents.GetAll()) do
if v.IsTFAWeapon and v.Primary_TFA.RangeFalloffLUT_IsConverted then
v.Primary_TFA.RangeFalloffLUT = nil
v:AutoDetectRange()
end
end
end
cvars.AddChangeCallback("sv_tfa_range_modifier", sv_tfa_range_modifier, "TFA")
sv_tfa_range_modifier()
if CLIENT then
hook.Add("InitPostEntity", "sv_tfa_range_modifier", sv_tfa_range_modifier)
end
--end
if GetConVar("sv_tfa_unique_slots") == nil then
CreateReplConVar("sv_tfa_unique_slots", "1", "Give TFA-based Weapons unique slots? 1 for true, 0 for false. RESTART AFTER CHANGING.")
end
if GetConVar("sv_tfa_spread_multiplier") == nil then
CreateReplConVar("sv_tfa_spread_multiplier", "1", "Increase for more spread, decrease for less.")
end
if GetConVar("sv_tfa_force_multiplier") == nil then
CreateReplConVar("sv_tfa_force_multiplier", "1", "Arrow force multiplier (not arrow velocity, but how much force they give on impact).")
end
if GetConVar("sv_tfa_dynamicaccuracy") == nil then
CreateReplConVar("sv_tfa_dynamicaccuracy", "1", "Dynamic acuracy? (e.g.more accurate on crouch, less accurate on jumping.")
end
if GetConVar("sv_tfa_ammo_detonation") == nil then
CreateReplConVar("sv_tfa_ammo_detonation", "1", "Ammo Detonation? (e.g. shoot ammo until it explodes) ")
end
if GetConVar("sv_tfa_ammo_detonation_mode") == nil then
CreateReplConVar("sv_tfa_ammo_detonation_mode", "2", "Ammo Detonation Mode? (0=Bullets,1=Blast,2=Mix) ")
end
if GetConVar("sv_tfa_ammo_detonation_chain") == nil then
CreateReplConVar("sv_tfa_ammo_detonation_chain", "1", "Ammo Detonation Chain? (0=Ammo boxes don't detonate other ammo boxes, 1 you can chain them together) ")
end
if GetConVar("sv_tfa_scope_gun_speed_scale") == nil then
CreateReplConVar("sv_tfa_scope_gun_speed_scale", "0", "Scale player sensitivity based on player move speed?")
end
if GetConVar("sv_tfa_bullet_penetration") == nil then
CreateReplConVar("sv_tfa_bullet_penetration", "1", "Allow bullet penetration?")
end
if GetConVar("sv_tfa_bullet_doordestruction") == nil then
CreateReplConVar("sv_tfa_bullet_doordestruction", "1", "Allow to shoot down doors?")
end
if GetConVar("sv_tfa_bullet_doordestruction_keep") == nil then
CreateReplConVar("sv_tfa_bullet_doordestruction_keep", "0", "Don't shoot door off hinges")
end
if GetConVar("sv_tfa_npc_burst") == nil then
CreateReplConVar("sv_tfa_npc_burst", "0", "Whenever NPCs should fire in bursts like they do with HL2 weapons.")
end
if GetConVar("sv_tfa_bullet_ricochet") == nil then
CreateReplConVar("sv_tfa_bullet_ricochet", "0", "Allow bullet ricochet?")
end
if GetConVar("sv_tfa_bullet_randomseed") == nil then
CreateReplConVar("sv_tfa_bullet_randomseed", "0", "Populate extra seed serverside? This will cause spread to be out of sync with server!")
end
if GetConVar("sv_tfa_debug") == nil then
CreateReplConVar("sv_tfa_debug", "0", "Enable debug mode?")
end
if GetConVar("sv_tfa_holdtype_dynamic") == nil then
CreateReplConVar("sv_tfa_holdtype_dynamic", "1", "Allow dynamic holdtype?")
end
if GetConVar("sv_tfa_arrow_lifetime") == nil then
CreateReplConVar("sv_tfa_arrow_lifetime", "30", "Arrow lifetime.")
end
if GetConVar("sv_tfa_worldmodel_culldistance") == nil then
CreateReplConVar("sv_tfa_worldmodel_culldistance", "-1", "-1 to leave unculled. Anything else is feet*16.")
end
if GetConVar("sv_tfa_reloads_legacy") == nil then
CreateReplConVar("sv_tfa_reloads_legacy", "0", "Enable legacy-style reloading?")
end
if GetConVar("sv_tfa_recoil_legacy") == nil then
CreateReplConVar("sv_tfa_recoil_legacy", "0", "Enable legacy-style recoil? This will cause prediction issues in multiplayer. Always disabled for NPCs!")
end
if GetConVar("sv_tfa_recoil_mul_p") == nil then
CreateReplConVar("sv_tfa_recoil_mul_p", "1", "Pitch kick multiplier for recoil")
end
if GetConVar("sv_tfa_recoil_mul_y") == nil then
CreateReplConVar("sv_tfa_recoil_mul_y", "1", "Yaw kick multiplier for recoil")
end
if GetConVar("sv_tfa_recoil_mul_p_npc") == nil then
CreateReplConVar("sv_tfa_recoil_mul_p_npc", "1", "Pitch kick multiplier for recoil for NPCs")
end
if GetConVar("sv_tfa_recoil_mul_y_npc") == nil then
CreateReplConVar("sv_tfa_recoil_mul_y_npc", "1", "Yaw kick multiplier for recoil for NPCs")
end
if GetConVar("sv_tfa_recoil_viewpunch_mul") == nil then
CreateReplConVar("sv_tfa_recoil_viewpunch_mul", "1", "Multiplier for viewpunch recoil (visual viewmodel recoil)")
end
if GetConVar("sv_tfa_recoil_eyeangles_mul") == nil then
CreateReplConVar("sv_tfa_recoil_eyeangles_mul", "1", "Multiplier for eye angles recoil (real angle change recoil)")
end
if GetConVar("sv_tfa_fx_penetration_decal") == nil then
CreateReplConVar("sv_tfa_fx_penetration_decal", "1", "Enable decals on the other side of a penetrated object?")
end
local cv_ironsights = GetConVar("sv_tfa_ironsights_enabled")
if cv_ironsights == nil then
cv_ironsights = CreateReplConVar("sv_tfa_ironsights_enabled", "1", "Enable ironsights? Disabling this still allows scopes.")
end
local is_stats = {
["data.ironsights"] = 0,
["Secondary.IronSightsEnabled"] = false,
}
hook.Add("TFA_GetStat", "TFA_IronsightsConVarToggle", function(wep, stat, val)
if not IsValid(wep) or is_stats[stat] == nil then return end
if not cv_ironsights:GetBool() and not wep:GetStatRawL("Scoped") and not wep:GetStatRawL("Scoped_3D") then
return is_stats[stat]
end
end)
if GetConVar("sv_tfa_sprint_enabled") == nil then
CreateReplConVar("sv_tfa_sprint_enabled", "1", "Enable sprinting? Disabling this allows shooting while IN_SPEED.")
end
if GetConVar("sv_tfa_attachments_alphabetical") == nil then
CreateReplConVar("sv_tfa_attachments_alphabetical", "0", "Override weapon attachment order to be alphabetical.")
end
if GetConVar("sv_tfa_jamming") == nil then
CreateReplConVar("sv_tfa_jamming", "1", "Enable jamming mechanics?")
end
if GetConVar("sv_tfa_jamming_mult") == nil then
CreateReplConVar("sv_tfa_jamming_mult", "1", "Multiply jam chance by this value. You really should modify sv_tfa_jamming_factor_inc rather than this.")
end
if GetConVar("sv_tfa_jamming_factor") == nil then
CreateReplConVar("sv_tfa_jamming_factor", "1", "Multiply jam factor by this value")
end
if GetConVar("sv_tfa_jamming_factor_inc") == nil then
CreateReplConVar("sv_tfa_jamming_factor_inc", "1", "Multiply jam factor gain by this value")
end
if GetConVar("sv_tfa_nearlyempty") == nil then
CreateReplConVar("sv_tfa_nearlyempty", "1", "Enable nearly-empty sounds")
end
if GetConVar("sv_tfa_fixed_crosshair") == nil then
CreateReplConVar("sv_tfa_fixed_crosshair", "0", "Fix crosshair position on center of the screen (CS:GO style)")
end
if GetConVar("sv_tfa_weapon_weight") == nil then
CreateReplConVar("sv_tfa_weapon_weight", "1", "Disabling this WILL break certain SWEPs and Mechanics. You were warned.")
end