add sborka
This commit is contained in:
285
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_blindfire.lua
Normal file
285
garrysmod/addons/tacrp/lua/weapons/tacrp_base/sh_blindfire.lua
Normal file
@@ -0,0 +1,285 @@
|
||||
function SWEP:GetMuzzleOrigin()
|
||||
if !IsValid(self:GetOwner()) then
|
||||
return self:GetPos()
|
||||
end
|
||||
if self:GetOwner():IsNPC() then
|
||||
return SERVER and self:GetOwner():GetShootPos() or self:GetOwner():EyePos()
|
||||
end
|
||||
|
||||
local pos = self:GetOwner():EyePos()
|
||||
|
||||
if self:GetBlindFire() then
|
||||
local eyeang = self:GetOwner():EyeAngles()
|
||||
|
||||
local testpos = pos + eyeang:Up() * 24
|
||||
|
||||
if self:GetBlindFireLeft() or self:GetBlindFireRight() then
|
||||
testpos = pos + eyeang:Forward() * 24
|
||||
end
|
||||
|
||||
local tr = util.TraceLine({
|
||||
start = pos,
|
||||
endpos = testpos,
|
||||
filter = self:GetOwner()
|
||||
})
|
||||
|
||||
pos = tr.HitPos
|
||||
end
|
||||
|
||||
local offset = self:GetValue("ShootOffset")
|
||||
|
||||
if offset.x != 0 then
|
||||
pos = pos + self:GetOwner():GetRight() * offset.x
|
||||
end
|
||||
|
||||
if offset.y != 0 then
|
||||
pos = pos + self:GetOwner():GetForward() * offset.y
|
||||
end
|
||||
|
||||
if offset.z != 0 then
|
||||
pos = pos + self:GetOwner():GetUp() * offset.z
|
||||
end
|
||||
|
||||
return pos
|
||||
end
|
||||
|
||||
/*
|
||||
|
||||
ValveBiped.Bip01_Spine
|
||||
ValveBiped.Bip01_Spine1
|
||||
ValveBiped.Bip01_Spine2
|
||||
ValveBiped.Bip01_Spine4
|
||||
ValveBiped.Bip01_Neck1
|
||||
ValveBiped.Bip01_Head1
|
||||
ValveBiped.forward
|
||||
ValveBiped.Bip01_R_Clavicle
|
||||
ValveBiped.Bip01_R_UpperArm
|
||||
ValveBiped.Bip01_R_Forearm
|
||||
ValveBiped.Bip01_R_Hand
|
||||
ValveBiped.Anim_Attachment_RH
|
||||
ValveBiped.Bip01_L_Clavicle
|
||||
ValveBiped.Bip01_L_UpperArm
|
||||
ValveBiped.Bip01_L_Forearm
|
||||
ValveBiped.Bip01_L_Hand
|
||||
ValveBiped.Anim_Attachment_LH
|
||||
ValveBiped.Bip01_R_Thigh
|
||||
ValveBiped.Bip01_R_Calf
|
||||
ValveBiped.Bip01_R_Foot
|
||||
ValveBiped.Bip01_R_Toe0
|
||||
ValveBiped.Bip01_L_Thigh
|
||||
ValveBiped.Bip01_L_Calf
|
||||
ValveBiped.Bip01_L_Foot
|
||||
ValveBiped.Bip01_L_Toe0
|
||||
ValveBiped.Bip01_L_Finger4
|
||||
ValveBiped.Bip01_L_Finger41
|
||||
ValveBiped.Bip01_L_Finger42
|
||||
ValveBiped.Bip01_L_Finger3
|
||||
ValveBiped.Bip01_L_Finger31
|
||||
ValveBiped.Bip01_L_Finger32
|
||||
ValveBiped.Bip01_L_Finger2
|
||||
ValveBiped.Bip01_L_Finger21
|
||||
ValveBiped.Bip01_L_Finger22
|
||||
ValveBiped.Bip01_L_Finger1
|
||||
ValveBiped.Bip01_L_Finger11
|
||||
ValveBiped.Bip01_L_Finger12
|
||||
ValveBiped.Bip01_L_Finger0
|
||||
ValveBiped.Bip01_L_Finger01
|
||||
ValveBiped.Bip01_L_Finger02
|
||||
ValveBiped.Bip01_R_Finger4
|
||||
ValveBiped.Bip01_R_Finger41
|
||||
ValveBiped.Bip01_R_Finger42
|
||||
ValveBiped.Bip01_R_Finger3
|
||||
ValveBiped.Bip01_R_Finger31
|
||||
ValveBiped.Bip01_R_Finger32
|
||||
ValveBiped.Bip01_R_Finger2
|
||||
ValveBiped.Bip01_R_Finger21
|
||||
ValveBiped.Bip01_R_Finger22
|
||||
ValveBiped.Bip01_R_Finger1
|
||||
ValveBiped.Bip01_R_Finger11
|
||||
ValveBiped.Bip01_R_Finger12
|
||||
ValveBiped.Bip01_R_Finger0
|
||||
ValveBiped.Bip01_R_Finger01
|
||||
ValveBiped.Bip01_R_Finger02
|
||||
|
||||
*/
|
||||
|
||||
local bone_list = {
|
||||
"ValveBiped.Bip01_R_UpperArm",
|
||||
"ValveBiped.Bip01_R_Forearm",
|
||||
"ValveBiped.Bip01_R_Hand",
|
||||
"ValveBiped.Bip01_L_UpperArm",
|
||||
"ValveBiped.Bip01_L_Forearm",
|
||||
"ValveBiped.Bip01_L_Hand",
|
||||
}
|
||||
|
||||
local bone_mods = {
|
||||
-- ["ValveBiped.Bip01_R_UpperArm"] = Angle(0, -70, 0),
|
||||
-- ["ValveBiped.Bip01_R_Hand"] = Angle(-55, 45, -90),
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(45, -90, 0),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(-90, 0, 0),
|
||||
}
|
||||
|
||||
local bone_mods_left = {
|
||||
-- ["ValveBiped.Bip01_R_UpperArm"] = Angle(0, -70, 0),
|
||||
-- ["ValveBiped.Bip01_R_Hand"] = Angle(-55, 45, -90),
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(45, 0, 0),
|
||||
["ValveBiped.Bip01_R_Forearm"] = Angle(0, 0, 0),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(0, -75, 0),
|
||||
}
|
||||
|
||||
local bone_mods_right = {
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(-45, 0, 0),
|
||||
["ValveBiped.Bip01_R_Forearm"] = Angle(0, 0, 0),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(35, 75, 0),
|
||||
}
|
||||
|
||||
local bone_mods_kys = {
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(5, 0, 0),
|
||||
["ValveBiped.Bip01_R_Forearm"] = Angle(0, -5, 0),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(0, -165, 0),
|
||||
}
|
||||
local bone_mods_kys_pistol = {
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(55, 0, 0),
|
||||
["ValveBiped.Bip01_R_Forearm"] = Angle(0, -75, 5),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(45, -75, 0),
|
||||
}
|
||||
local bone_mods_kys_dual = {
|
||||
["ValveBiped.Bip01_L_UpperArm"] = Angle(-60, 0, -45),
|
||||
["ValveBiped.Bip01_L_Forearm"] = Angle(0, -60, -30),
|
||||
["ValveBiped.Bip01_L_Hand"] = Angle(-30, -45, -90),
|
||||
["ValveBiped.Bip01_R_UpperArm"] = Angle(55, 0, 30),
|
||||
["ValveBiped.Bip01_R_Forearm"] = Angle(0, -60, 30),
|
||||
["ValveBiped.Bip01_R_Hand"] = Angle(45, -75, 90),
|
||||
}
|
||||
|
||||
local bone_mods_index = {
|
||||
[TacRP.BLINDFIRE_UP] = bone_mods,
|
||||
[TacRP.BLINDFIRE_LEFT] = bone_mods_left,
|
||||
[TacRP.BLINDFIRE_RIGHT] = bone_mods_right,
|
||||
[TacRP.BLINDFIRE_KYS] = bone_mods_kys,
|
||||
}
|
||||
|
||||
function SWEP:ToggleBoneMods(on)
|
||||
if !IsValid(self:GetOwner()) then return end
|
||||
if on == TacRP.BLINDFIRE_NONE or on == false or on == nil then
|
||||
for _, i in ipairs(bone_list) do
|
||||
local boneindex = self:GetOwner():LookupBone(i)
|
||||
if !boneindex then continue end
|
||||
|
||||
self:GetOwner():ManipulateBoneAngles(boneindex, Angle(0, 0, 0))
|
||||
-- self:GetOwner():ManipulateBonePosition(boneindex, Vector(0, 0, 0))
|
||||
end
|
||||
else
|
||||
local tbl = bone_mods_index[on]
|
||||
if on == TacRP.BLINDFIRE_KYS and self:GetValue("HoldTypeSuicide") == "duel" then
|
||||
tbl = bone_mods_kys_dual
|
||||
elseif on == TacRP.BLINDFIRE_KYS and self:GetValue("HoldType") == "revolver" then
|
||||
tbl = bone_mods_kys_pistol
|
||||
end
|
||||
|
||||
for i, k in pairs(tbl) do
|
||||
local boneindex = self:GetOwner():LookupBone(i)
|
||||
if !boneindex then continue end
|
||||
|
||||
self:GetOwner():ManipulateBoneAngles(boneindex, k)
|
||||
end
|
||||
|
||||
-- for i, k in pairs(tbl[2]) do
|
||||
-- local boneindex = self:GetOwner():LookupBone(i)
|
||||
-- if !boneindex then continue end
|
||||
|
||||
-- self:GetOwner():ManipulateBonePosition(boneindex, k)
|
||||
-- end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:GetBlindFireMode()
|
||||
if !self:GetBlindFire() then
|
||||
return TacRP.BLINDFIRE_NONE
|
||||
elseif self:GetBlindFireLeft() and self:GetBlindFireRight() then
|
||||
return TacRP.BLINDFIRE_KYS
|
||||
elseif self:GetBlindFireLeft() then
|
||||
return TacRP.BLINDFIRE_LEFT
|
||||
elseif self:GetBlindFireRight() then
|
||||
return TacRP.BLINDFIRE_RIGHT
|
||||
else
|
||||
return TacRP.BLINDFIRE_UP
|
||||
end
|
||||
end
|
||||
|
||||
local bfmode = {
|
||||
[TacRP.BLINDFIRE_NONE] = {false, false, false},
|
||||
[TacRP.BLINDFIRE_UP] = {true, false, false},
|
||||
[TacRP.BLINDFIRE_LEFT] = {true, true, false},
|
||||
[TacRP.BLINDFIRE_RIGHT] = {true, false, true},
|
||||
[TacRP.BLINDFIRE_KYS] = {true, true, true},
|
||||
}
|
||||
function SWEP:SetBlindFireMode(mode)
|
||||
if !bfmode[mode] then
|
||||
print("[TacRP] WARNING! Trying to set invalid blindfire mode: " .. tostring(mode))
|
||||
mode = 0
|
||||
end
|
||||
self:SetBlindFire(bfmode[mode][1])
|
||||
self:SetBlindFireLeft(bfmode[mode][2])
|
||||
self:SetBlindFireRight(bfmode[mode][3])
|
||||
end
|
||||
|
||||
function SWEP:CheckBlindFire(suicide)
|
||||
if !self:GetValue("CanBlindFire") and (!suicide or !self:GetValue("CanSuicide")) then return false end
|
||||
if (self:GetIsSprinting()
|
||||
or self:GetAnimLockTime() > CurTime()
|
||||
or self:GetPrimedGrenade()
|
||||
or self:IsInScope()
|
||||
or self:GetSafe()) then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function SWEP:ToggleBlindFire(bf)
|
||||
local kms = bf == TacRP.BLINDFIRE_KYS or bf == TacRP.BLINDFIRE_NONE
|
||||
if bf != TacRP.BLINDFIRE_NONE and (!self:CheckBlindFire(kms) or bf == self:GetBlindFireMode()) then return end
|
||||
|
||||
local diff = bf != self:GetBlindFireMode()
|
||||
|
||||
if diff then
|
||||
self:ToggleCustomize(false)
|
||||
self:ScopeToggle(0)
|
||||
self:SetBlindFireFinishTime(CurTime() + (bf == TacRP.BLINDFIRE_KYS and 1 or 0.3))
|
||||
end
|
||||
|
||||
self:SetBlindFireMode(bf)
|
||||
self:ToggleBoneMods(bf)
|
||||
self:SetShouldHoldType()
|
||||
|
||||
if bf == TacRP.BLINDFIRE_KYS and TacRP.ShouldWeFunny() then
|
||||
self:GetOwner():EmitSound("tacrp/low-tier-god.mp3", 80, 100)
|
||||
end
|
||||
|
||||
if diff then
|
||||
if self:StillWaiting(true) then
|
||||
self:IdleAtEndOfAnimation()
|
||||
else
|
||||
self:Idle()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:ThinkBlindFire()
|
||||
if (self:GetOwner():KeyDown(IN_ZOOM) or self:GetOwner().TacRPBlindFireDown) and !tobool(self:GetOwner():GetInfo("tacrp_blindfiremenu")) then
|
||||
if CLIENT then self.LastHintLife = CurTime() end
|
||||
if self:GetOwner():KeyDown(IN_FORWARD) then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_UP)
|
||||
elseif self:GetOwner():KeyDown(IN_MOVELEFT) and !self:GetOwner():KeyDown(IN_MOVERIGHT) then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_LEFT)
|
||||
elseif self:GetOwner():KeyDown(IN_MOVERIGHT) and !self:GetOwner():KeyDown(IN_MOVELEFT) then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_RIGHT)
|
||||
elseif self:GetOwner():KeyDown(IN_SPEED) and self:GetOwner():KeyDown(IN_WALK) and !tobool(self:GetOwner():GetInfo("tacrp_idunwannadie")) then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_KYS)
|
||||
elseif self:GetOwner():KeyDown(IN_BACK) then
|
||||
self:ToggleBlindFire(TacRP.BLINDFIRE_NONE)
|
||||
end
|
||||
elseif (self:GetOwner():KeyDown(IN_ZOOM) or self:GetOwner().TacRPBlindFireDown) and self:GetOwner():GetInfo("tacrp_blindfiremenu") and self:GetOwner():GetCanZoom() then
|
||||
self:GetOwner():SetCanZoom(false)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user