mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
328
gamemodes/ixhl2rp/plugins/tfahl2sweps/sh_plugin.lua
Normal file
328
gamemodes/ixhl2rp/plugins/tfahl2sweps/sh_plugin.lua
Normal 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/
|
||||
--]]
|
||||
|
||||
|
||||
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"
|
||||
})
|
||||
Reference in New Issue
Block a user