Files
wnsrc/gamemodes/ixhl2rp/plugins/tfahl2sweps/sh_plugin.lua
lifestorm c6d9b6f580 Upload
2024-08-05 18:40:29 +03:00

329 lines
10 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/
--]]
local PLUGIN = PLUGIN;
PLUGIN.name = "TFA weapons and attachments";
PLUGIN.description = "Adds the weapons and attachments from that TFA mod.";
PLUGIN.author = "Fruity";
weapons.OnLoaded()
ix.util.Include("sh_atts.lua")
ix.util.Include("sv_plugin.lua")
ix.util.Include("sv_hooks.lua")
-- All grenade entities used on the server must be declared here
PLUGIN.grenades = {
npc_grenade_frag = true,
mmod_frag = true,
tfa_rustalpha_flare_thrown = true,
tfa_csgo_throwndecoy = true,
tfa_csgo_thrownflash = true,
tfa_csgo_thrownfrag = true,
tfa_csgo_thrownincen = true,
tfa_csgo_thrownmolotov = true,
tfa_csgo_thrownsmoke = true,
tfa_csgo_thrownsonar = true
}
hook.Remove("TFA_GetStat", "TFA_IronsightsConVarToggle")
local stunstick = weapons.GetStored("tfa_mmod_stunstick") or {}
stunstick.PrintName = "Stunstick"
function stunstick:OnRaised()
self:GetOwner():EmitSound("Weapon_StunStick.Activate")
self:GetOwner():ForceSequence("activatebaton", nil, nil, true)
end
function stunstick:OnLowered()
self:GetOwner():EmitSound("Weapon_StunStick.Deactivate")
self:GetOwner():ForceSequence("deactivatebaton", nil, nil, true)
end
local ar2 = weapons.GetStored("tfa_mmod_ar2") or {Primary = {}}
ar2.Primary.Ammo = "StriderMinigun"
if (CLIENT) then
hook.Remove("HUDPaint", "tfaDrawHitmarker")
function PLUGIN:TFA_PreCanPrimaryAttack(weapon)
if (weapon:GetNetVar("BioLocked")) then
return false
end
end
function PLUGIN:TFA_SecondaryAttack(weapon)
if (weapon:GetNetVar("BioLocked")) then
return true -- signal we 'handled' the attack
end
end
end
function PLUGIN:TFA_PreCanAttach(weapon, attn)
if (attn == "") then return end
for _, v in ipairs(weapon:GetNetVar("ixItemAtts", {})) do
if (v == attn) then return true end
end
if (weapon.ixItem) then
for _, v in pairs(weapon.ixItem:GetData("tfa_atts", {})) do
if (v.att == attn) then return true end
end
end
local character = weapon.Owner:GetCharacter()
if (character) then
local inventory = character:GetInventory()
if (self.attnTranslate[attn]) then
if (!inventory:HasItem(self.attnTranslate[attn])) then
return false
end
elseif (!inventory:HasItem(attn)) then
return false
end
end
end
TFA.AddAmmo("csgo_decoy", "Decoy")
TFA.AddAmmo("csgo_frag", "Fragmentation Grenade")
TFA.AddAmmo("csgo_flash", "Flashbang")
TFA.AddAmmo("csgo_incend", "Incendiary Grenade")
TFA.AddAmmo("csgo_molly", "Molotov")
TFA.AddAmmo("csgo_smoke", "Smoke Grenade")
TFA.AddAmmo("csgo_sonarbomb", "Tactical Awareness Grenade")
local csgo_flashtime = 10
local csgo_flashfade = 4
local csgo_flashdistance = 2048
local csgo_flashdistancefade = 2048 - 1024
local tab = {
["$pp_colour_addr"] = 0,
["$pp_colour_addg"] = 0,
["$pp_colour_addb"] = 0,
["$pp_colour_brightness"] = 0.0,
["$pp_colour_contrast"] = 1.0,
["$pp_colour_colour"] = 1.0,
["$pp_colour_mulr"] = 0,
["$pp_colour_mulg"] = 0,
["$pp_colour_mulb"] = 0
}
function TFA_CSGO_FlashIntensity(ply)
local flashtime = ply:GetNWFloat("TFACSGO_LastFlash", -999)
local flashdistance = ply:GetNWFloat("TFACSGO_FlashDistance", 0)
local flashfac = ply:GetNWFloat("TFACSGO_FlashFactor", 1)
local distancefac = 1 - math.Clamp((flashdistance - csgo_flashdistance + csgo_flashdistancefade) / csgo_flashdistancefade, 0, 1)
local intensity = 1 - math.Clamp(((CurTime() - flashtime) / distancefac - csgo_flashtime + csgo_flashfade) / csgo_flashfade, 0, 1)
intensity = intensity * distancefac
intensity = intensity * math.Clamp(flashfac + 0.1, 0.35, 1)
return intensity
end
if (CLIENT) then
hook.Add("RenderScreenspaceEffects", "TFA_CSGO_FLASHBANG", function()
local client = LocalPlayer()
if (!IsValid(client)) then return end
local intensity = TFA_CSGO_FlashIntensity(client)
if (intensity > 0.01) then
tab["$pp_colour_brightness"] = math.pow(intensity, 3)
tab["$pp_colour_colour"] = 1 - intensity * 0.33
DrawColorModify(tab) --Draws Color Modify effect
DrawMotionBlur(0.2, intensity, 0.03)
end
end)
end
function CSGOSmokeBlind()
local ply = LocalPlayer()
local IsInSmoke = false
local SmokeAmount = 0
for k,v in pairs(ents.FindByClass("tfa_csgo_thrownsmoke")) do
local Distance = ply:GetPos():Distance(v:GetPos())
if Distance <= 144 and v:GetNWBool("IsDetonated",false) then
IsInSmoke = true
SmokeAmount = SmokeAmount + (144 - Distance)*2
end
end
if IsInSmoke then
local ModAmount = math.Clamp(SmokeAmount / 100,0,1)
local smokeMat = Material( "tfa_csgo/particle/particle_smokegrenade_view" )
surface.SetDrawColor( Color(99, 99, 99,ModAmount*255) )
surface.SetMaterial( smokeMat )
surface.DrawRect( 0, 0, ScrW(), ScrH() )
end
end
hook.Add("RenderScreenspaceEffects","CSGOSmokeBlind",CSGOSmokeBlind)
TFA.CSGO = TFA.CSGO or {}
TFA.CSGO.HandsTbl = TFA.CSGO.HandsTbl or {}
function TFA.CSGO.AddHandsModel(id, mdl, name)
assert(type(id) == "string", "Invalid hands variant ID specified: " .. tostring(id))
assert(type(mdl) == "string", "Invalid hands model path specified: " .. tostring(mdl))
if (!file.Exists(mdl, "GAME")) then
print("[TFA CS:GO] Unable to add hands with id " .. id .. ", model " .. mdl .. " not found.")
return
end
TFA.CSGO.HandsTbl[id] = {}
TFA.CSGO.HandsTbl[id].mdl = mdl
TFA.CSGO.HandsTbl[id].name = type(name) == "string" and name or "#tfa_csgo_hands_" .. id
end
if (SERVER) then return end
local cv_hands = CreateClientConVar("cl_tfa_csgo_hands_override", "none", true, false)
if IsValid(TFA.CSGO.HandsEnt) then
TFA.CSGO.HandsEnt:Remove()
TFA.CSGO.HandsEnt = nil
end
local handsFallback = "models/weapons/tfa_csgo/c_hands_translator.mdl"
local handsOverride, handsID, handsMDL = false, "", ""
function TFA.CSGO.ParentHands(hands, vm, ply, wep)
if (!IsValid(hands) or !IsValid(vm) or !IsValid(wep)) then
if IsValid(TFA.CSGO.HandsEnt) then
TFA.CSGO.HandsEnt:RemoveEffects(EF_BONEMERGE)
TFA.CSGO.HandsEnt:RemoveEffects(EF_BONEMERGE_FASTCULL)
TFA.CSGO.HandsEnt:SetParent(NULL)
TFA.CSGO.HandsEnt:Remove()
end
return
end
if (!wep.IsTFAWeapon or !wep.IsTFACSGOWeapon) then return end
handsID = cv_hands:GetString()
handsOverride = handsID ~= "none" and TFA.CSGO.HandsTbl[handsID]
handsMDL = handsOverride and TFA.CSGO.HandsTbl[handsID].mdl or handsFallback
if (!IsValid(TFA.CSGO.HandsEnt)) then
TFA.CSGO.HandsEnt = ClientsideModel(handsMDL)
TFA.CSGO.HandsEnt:SetupBones()
TFA.CSGO.HandsEnt:SetNoDraw(true)
elseif (TFA.CSGO.HandsEnt:GetModel() ~= handsMDL) then
TFA.CSGO.HandsEnt:SetModel(handsMDL)
TFA.CSGO.HandsEnt:SetupBones()
end
if (!vm:LookupBone("ValveBiped.Bip01_R_Hand")) then
local newhands = TFA.CSGO.HandsEnt
newhands:SetParent(vm)
newhands:SetPos(vm:GetPos())
newhands:SetAngles(vm:GetAngles())
if (!newhands:IsEffectActive(EF_BONEMERGE)) then
newhands:AddEffects(EF_BONEMERGE)
newhands:AddEffects(EF_BONEMERGE_FASTCULL)
end
if handsOverride then
newhands:DrawModel()
else
hands:SetParent(newhands)
end
end
end
hook.Add("PreDrawPlayerHands", "TFA_CSGO_PreDrawPlayerHands", TFA.CSGO.ParentHands)
do
local CSGOParticleFiles = {}
table.insert(CSGOParticleFiles, #CSGOParticleFiles, "cs_weapon_fx")
table.insert(CSGOParticleFiles, #CSGOParticleFiles, "explosions_fx")
table.insert(CSGOParticleFiles, #CSGOParticleFiles, "inferno_fx")
local CSGOParticleEffects = {}
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_muzzle_smoke")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_muzzle_smoke_long")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_sensorgren_beeplight")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_sensorgren_detonate")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_decoy_ground_effect")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_decoy_ground_effect_shot")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_molotov_fp")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "weapon_molotov_thrown")
--EXPLOSION_FX
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_basic")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_hegrenade_interior")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_hegrenade_brief")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_smoke_disperse")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_smokegrenade")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_smokegrenade_fallback")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_smokegrenade_CT")
--INFERNO FX
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_explosion")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_fire01")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_groundfire")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_fire_main_gm")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_fire_child_gm")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_groundfire_00HIGH")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "molotov_groundfire_00MEDIUM")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "extinguish_fire")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "explosion_molotov_air")
table.insert(CSGOParticleEffects, #CSGOParticleEffects, "incgrenade_thrown_trail")
for k, v in pairs(CSGOParticleFiles) do
game.AddParticles("particles/" .. v .. ".pcf")
end
for k, v in pairs(CSGOParticleEffects) do
PrecacheParticleSystem(v)
end
end
sound.Add(
{
name = "csgo_Weapon.WeaponMove1",
channel = CHAN_ITEM,
level = 65,
volume = 0.15,
sound = "weapons/tfa_csgo/movement1.wav"
})
sound.Add(
{
name = "csgo_Weapon.WeaponMove2",
channel = CHAN_ITEM,
level = 65,
volume = 0.15,
sound = "weapons/tfa_csgo/movement2.wav"
})
sound.Add(
{
name = "csgo_Weapon.WeaponMove3",
channel = CHAN_ITEM,
level = 65,
volume = 0.15,
sound = "weapons/tfa_csgo/movement3.wav"
})