add sborka
This commit is contained in:
382
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_init.lua
Normal file
382
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_init.lua
Normal file
@@ -0,0 +1,382 @@
|
||||
function SWEP:DoDeployAnimation()
|
||||
if self:GetReloading() and self:GetValue("MidReload") and !self:GetValue("ShotgunReload") and self:HasSequence("midreload") then
|
||||
local t = self:PlayAnimation("midreload", self:GetValue("ReloadTimeMult"), true, true)
|
||||
|
||||
self:SetReloadFinishTime(CurTime() + t)
|
||||
else
|
||||
self:SetReloading(false)
|
||||
if self:GetValue("TryUnholster") then
|
||||
self:PlayAnimation("unholster", self:GetValue("DeployTimeMult") * self:GetValue("UnholsterTimeMult"), true, true)
|
||||
else
|
||||
-- if self:GetReady() then
|
||||
-- self:PlayAnimation("unholster", self:GetValue("DeployTimeMult"), true, true)
|
||||
-- else
|
||||
-- self:PlayAnimation("deploy", self:GetValue("DeployTimeMult"), true, true)
|
||||
-- end
|
||||
self:PlayAnimation("deploy", self:GetValue("DeployTimeMult"), true, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:Deploy()
|
||||
if self:GetOwner():IsNPC() or self:GetOwner():IsNextBot() then
|
||||
if SERVER then
|
||||
self:NetworkWeapon()
|
||||
end
|
||||
if CLIENT then
|
||||
self:SetupModel(true)
|
||||
end
|
||||
return
|
||||
elseif SERVER and self:GetOwner():IsPlayer() then
|
||||
self:GetOwner():SetSaveValue("m_flNextAttack", 0)
|
||||
end
|
||||
|
||||
self:SetBaseSettings()
|
||||
|
||||
-- self:SetNextPrimaryFire(0)
|
||||
self:SetNextSecondaryFire(0)
|
||||
self:SetAnimLockTime(0)
|
||||
self:SetSprintLockTime(0)
|
||||
self:SetLastMeleeTime(0)
|
||||
self:SetRecoilAmount(0)
|
||||
self:SetLastScopeTime(0)
|
||||
self:SetHolsterTime(0)
|
||||
self:SetPrimedGrenade(false)
|
||||
self:SetBlindFireFinishTime(0)
|
||||
-- self:SetJammed(false)
|
||||
self:SetCharge(false)
|
||||
|
||||
self:SetBurstCount(0)
|
||||
self:SetScopeLevel(0)
|
||||
self:SetLoadedRounds(self:Clip1())
|
||||
self:SetCustomize(false)
|
||||
|
||||
if self:GetOwner():IsPlayer() and IsFirstTimePredicted() then
|
||||
self.InversePeek = self:GetOwner():GetInfoNum("tacrp_inversepeek", 0) == 1
|
||||
if !self.InversePeekInitialized then
|
||||
self:SetPeeking(false)
|
||||
end
|
||||
self.InversePeekInitialized = true
|
||||
end
|
||||
|
||||
self.PreviousZoom = self:GetOwner():GetCanZoom()
|
||||
if IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() then
|
||||
self:GetOwner():SetCanZoom(false)
|
||||
end
|
||||
|
||||
self:DoDeployAnimation()
|
||||
|
||||
self:GetOwner():DoAnimationEvent(ACT_HL2MP_GESTURE_RANGE_ATTACK_KNIFE)
|
||||
|
||||
if CLIENT then
|
||||
self:SetupModel(true)
|
||||
self:SetupModel(false)
|
||||
self.LastHintLife = CurTime()
|
||||
elseif !game.SinglePlayer() then
|
||||
self:DoBodygroups(true) -- Not sure why this is necessary
|
||||
self:DoBodygroups(false)
|
||||
end
|
||||
|
||||
if (game.SinglePlayer() or CLIENT) and !TacRP.NewsPopup and TacRP.ConVars["checknews"]:GetBool() then
|
||||
TacRP.NewsPopup = true
|
||||
RunConsoleCommand("tacrp_news_check")
|
||||
end
|
||||
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_NONE)
|
||||
|
||||
if TacRP.ConVars["deploysafety"]:GetBool() then
|
||||
self:ToggleSafety(true)
|
||||
end
|
||||
|
||||
self:SetShouldHoldType()
|
||||
|
||||
if self:IsQuickNadeAllowed() then
|
||||
if self:GetValue("PrimaryGrenade") then
|
||||
local nade = TacRP.QuickNades[self:GetValue("PrimaryGrenade")]
|
||||
if !TacRP.IsGrenadeInfiniteAmmo(nade) and self:GetOwner():GetAmmoCount(nade.Ammo) == 0 then
|
||||
if SERVER then self:Remove() end
|
||||
return true
|
||||
end
|
||||
elseif !self:CheckGrenade() then
|
||||
self:SelectGrenade()
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local v0 = Vector(0, 0, 0)
|
||||
local v1 = Vector(1, 1, 1)
|
||||
local a0 = Angle(0, 0, 0)
|
||||
|
||||
function SWEP:ClientHolster()
|
||||
if game.SinglePlayer() then
|
||||
self:CallOnClient("ClientHolster")
|
||||
end
|
||||
|
||||
local vm = self:GetVM()
|
||||
if IsValid(vm) then
|
||||
vm:SetSubMaterial()
|
||||
vm:SetMaterial()
|
||||
|
||||
for i = 0, vm:GetBoneCount() do
|
||||
vm:ManipulateBoneScale(i, v1)
|
||||
vm:ManipulateBoneAngles(i, a0)
|
||||
vm:ManipulateBonePosition(i, v0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:Holster(wep)
|
||||
if game.SinglePlayer() and CLIENT then return end
|
||||
|
||||
if CLIENT and self:GetOwner() != LocalPlayer() then return end
|
||||
|
||||
if self:GetOwner():IsNPC() then
|
||||
return
|
||||
end
|
||||
|
||||
self:SetCustomize(false)
|
||||
|
||||
if self:GetReloading() then
|
||||
if self:GetValue("ShotgunReload") then
|
||||
self:SetEndReload(false)
|
||||
self:SetReloading(false)
|
||||
self:KillTimer("ShotgunRestoreClip")
|
||||
else
|
||||
self:CancelReload(false)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if self:GetHolsterTime() > CurTime() then return false end -- or self:GetPrimedGrenade()
|
||||
|
||||
if !TacRP.ConVars["holster"]:GetBool() or (self:GetHolsterTime() != 0 and self:GetHolsterTime() <= CurTime()) or !IsValid(wep) then
|
||||
-- Do the final holster request
|
||||
-- Picking up props try to switch to NULL, by the way
|
||||
self:SetHolsterTime(0)
|
||||
self:SetHolsterEntity(NULL)
|
||||
self:SetReloadFinishTime(0)
|
||||
|
||||
local holster = self:GetValue("HolsterVisible")
|
||||
if SERVER and holster then
|
||||
net.Start("TacRP_updateholster")
|
||||
net.WriteEntity(self:GetOwner())
|
||||
net.WriteEntity(self)
|
||||
net.Broadcast()
|
||||
end
|
||||
|
||||
if game.SinglePlayer() then
|
||||
self:CallOnClient("KillModel")
|
||||
else
|
||||
if CLIENT then
|
||||
self:RemoveCustomizeHUD()
|
||||
self:KillModel()
|
||||
end
|
||||
end
|
||||
|
||||
if self.PreviousZoom then
|
||||
self:GetOwner():SetCanZoom(true)
|
||||
end
|
||||
|
||||
self:ClientHolster()
|
||||
|
||||
return true
|
||||
else
|
||||
local reverse = 1
|
||||
local anim = "holster"
|
||||
|
||||
if self:GetValue("NoHolsterAnimation") then
|
||||
anim = "deploy"
|
||||
reverse = -1
|
||||
end
|
||||
|
||||
local animation = self:PlayAnimation(anim, self:GetValue("HolsterTimeMult") * reverse, true, true)
|
||||
self:SetHolsterTime(CurTime() + (animation or 0))
|
||||
self:SetHolsterEntity(wep)
|
||||
|
||||
self:SetScopeLevel(0)
|
||||
self:KillTimers()
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_NONE)
|
||||
self:GetOwner():SetFOV(0, 0.1)
|
||||
self:SetLastProceduralFireTime(0)
|
||||
|
||||
self:GetOwner():DoAnimationEvent(ACT_HL2MP_GESTURE_RANGE_ATTACK_SLAM)
|
||||
self:SetShouldHoldType()
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
local holsteranticrash = false
|
||||
|
||||
hook.Add("StartCommand", "TacRP_Holster", function(ply, ucmd)
|
||||
local wep = ply:GetActiveWeapon()
|
||||
|
||||
if IsValid(wep) and wep.ArcticTacRP and wep:GetHolsterTime() != 0 and wep:GetHolsterTime() - wep:GetPingOffsetScale() <= CurTime() and IsValid(wep:GetHolsterEntity()) then
|
||||
wep:SetHolsterTime(-math.huge) -- Pretty much force it to work
|
||||
if !holsteranticrash then
|
||||
holsteranticrash = true
|
||||
ucmd:SelectWeapon(wep:GetHolsterEntity()) -- Call the final holster request
|
||||
holsteranticrash = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function SWEP:Initialize()
|
||||
self:SetShouldHoldType()
|
||||
|
||||
self:SetBaseSettings()
|
||||
|
||||
self:SetLastMeleeTime(0)
|
||||
self:SetNthShot(0)
|
||||
|
||||
if self:GetOwner():IsNPC() then
|
||||
self:NPC_Initialize()
|
||||
return
|
||||
end
|
||||
|
||||
if self:GetOwner():IsNextBot() then
|
||||
return
|
||||
end
|
||||
|
||||
self.m_WeaponDeploySpeed = 4
|
||||
|
||||
if engine.ActiveGamemode() == "terrortown" then
|
||||
self:TTT_Init()
|
||||
end
|
||||
|
||||
self:ClientInitialize()
|
||||
|
||||
if SERVER and engine.ActiveGamemode() != "terrortown" then
|
||||
-- If we have any pre-existing attachments, network it
|
||||
local empty = true
|
||||
for slot, slottbl in pairs(self.Attachments) do
|
||||
if slottbl.Installed then empty = false break end
|
||||
end
|
||||
if !empty then
|
||||
self:NetworkWeapon()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:ClientInitialize()
|
||||
if SERVER then return end
|
||||
|
||||
if game.SinglePlayer() and SERVER and IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() then
|
||||
self:CallOnClient("ClientInitialize")
|
||||
end
|
||||
|
||||
if !LocalPlayer().TacRPGreet and !TacRP.ConVars["shutup"]:GetBool() then
|
||||
LocalPlayer().TacRPGreet = true
|
||||
end
|
||||
|
||||
-- local mat = Material("entities/" .. self:GetClass() .. ".png")
|
||||
|
||||
-- local tex = mat:GetTexture("$basetexture")
|
||||
|
||||
-- killicon.Add(self:GetClass(), tex:GetName(), Color( 255, 255, 255, 255 ) )
|
||||
end
|
||||
|
||||
function SWEP:SetBaseSettings()
|
||||
if game.SinglePlayer() and SERVER and IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() then
|
||||
self:CallOnClient("SetBaseSettings")
|
||||
end
|
||||
|
||||
local fm = self:GetCurrentFiremode()
|
||||
if fm != 1 then
|
||||
if self:GetValue("RunawayBurst") and fm < 0 and !self:GetValue("AutoBurst") then
|
||||
self.Primary.Automatic = false
|
||||
else
|
||||
self.Primary.Automatic = true
|
||||
end
|
||||
else
|
||||
self.Primary.Automatic = false
|
||||
end
|
||||
|
||||
if self.PrimaryGrenade then
|
||||
self.Primary.ClipSize = -1
|
||||
self.Primary.Ammo = TacRP.QuickNades[self.PrimaryGrenade].Ammo or ""
|
||||
self.Primary.DefaultClip = 1
|
||||
else
|
||||
self.Primary.ClipSize = self:GetCapacity()
|
||||
self.Primary.Ammo = self:GetAmmoType()
|
||||
self.Primary.DefaultClip = math.ceil(self.Primary.ClipSize * TacRP.ConVars["defaultammo"]:GetFloat())
|
||||
end
|
||||
|
||||
if self:IsQuickNadeAllowed() then
|
||||
self.Secondary.Ammo = self:GetGrenade().Ammo or "grenade"
|
||||
else
|
||||
self.Secondary.Ammo = "none"
|
||||
end
|
||||
|
||||
if SERVER and IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() and self:GetCapacity() > 0 and self:Clip1() > self:GetCapacity() then
|
||||
self:GetOwner():GiveAmmo(self:Clip1() - self:GetCapacity(), self:GetAmmoType())
|
||||
self:SetClip1(self:GetCapacity())
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:SetShouldHoldType()
|
||||
if self:GetOwner():IsNPC() and !self:GetOwner():IsNextBot() then
|
||||
self:SetHoldType(self:GetValue("HoldTypeNPC") or self:GetValue("HoldType"))
|
||||
return
|
||||
end
|
||||
|
||||
if self:GetHolsterTime() > CurTime() then
|
||||
self:SetHoldType("passive")
|
||||
return
|
||||
end
|
||||
|
||||
if (self:GetIsSprinting() or self:ShouldLowerWeapon() or self:GetSafe()) and self:GetValue("HoldTypeSprint") then
|
||||
self:SetHoldType(self:GetValue("HoldTypeSprint"))
|
||||
return
|
||||
end
|
||||
|
||||
if self:GetBlindFire() then
|
||||
if self:GetBlindFireMode() == TacRP.BLINDFIRE_KYS and self:GetValue("HoldTypeSuicide") then
|
||||
self:SetHoldType(self:GetValue("HoldTypeSuicide"))
|
||||
return
|
||||
elseif self:GetValue("HoldTypeBlindFire") then
|
||||
self:SetHoldType(self:GetValue("HoldTypeBlindFire"))
|
||||
return
|
||||
end
|
||||
elseif self:GetScopeLevel() > 0 and self:GetValue("HoldTypeSighted") then
|
||||
self:SetHoldType(self:GetValue("HoldTypeSighted"))
|
||||
return
|
||||
elseif self:GetScopeLevel() > 0 and TacRP.HoldTypeSightedLookup[self:GetValue("HoldType")] then
|
||||
self:SetHoldType(TacRP.HoldTypeSightedLookup[self:GetValue("HoldType")])
|
||||
return
|
||||
end
|
||||
|
||||
if self:GetCustomize() and self:GetValue("HoldTypeCustomize") then
|
||||
self:SetHoldType(self:GetValue("HoldTypeCustomize"))
|
||||
return
|
||||
end
|
||||
|
||||
self:SetHoldType(self:GetValue("HoldType"))
|
||||
end
|
||||
|
||||
function SWEP:OnRemove()
|
||||
if IsValid(self:GetOwner()) and self:GetOwner():IsPlayer() then
|
||||
self:ToggleBoneMods(TacRP.BLINDFIRE_NONE)
|
||||
|
||||
if CLIENT then
|
||||
local vm = self:GetOwner():GetViewModel()
|
||||
if IsValid(vm) then
|
||||
vm:SetMaterial() -- Quick and dirty fix for grenade materials persisting on VM when stripped
|
||||
end
|
||||
end
|
||||
end
|
||||
if CLIENT and (self:GetCustomize() or (self.GrenadeMenuAlpha or 0) > 0 or (self.BlindFireMenuAlpha or 0) > 0) then
|
||||
gui.EnableScreenClicker(false)
|
||||
TacRP.CursorEnabled = false
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:EquipAmmo(ply)
|
||||
local ammotype = self.Primary.Ammo
|
||||
if ammotype == "" then return end
|
||||
|
||||
local supplyamount = self.GaveDefaultAmmo and self:Clip1() or math.ceil(math.max(1, self.Primary.ClipSize) * TacRP.ConVars["defaultammo"]:GetFloat())
|
||||
ply:GiveAmmo(supplyamount, ammotype)
|
||||
end
|
||||
Reference in New Issue
Block a user