mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
159
gamemodes/ixhl2rp/plugins/tfahl2sweps/sv_plugin.lua
Normal file
159
gamemodes/ixhl2rp/plugins/tfahl2sweps/sv_plugin.lua
Normal file
@@ -0,0 +1,159 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
|
||||
function PLUGIN:TFA_Attachment_Attached(weapon, attachmentID, attachmentTable, category, attachmentIndex, forced)
|
||||
local character = weapon.Owner:GetCharacter()
|
||||
if (weapon.ixItem and character) then
|
||||
for _, v in pairs(weapon.ixItem.atts) do
|
||||
if (v == attachmentID) then
|
||||
local data = weapon.ixItem:GetData("tfa_default_atts_uneq", {})
|
||||
data[v] = nil
|
||||
weapon.ixItem:SetData("tfa_default_atts_uneq", data)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local attData = weapon.ixItem:GetData("tfa_atts", {})
|
||||
if (attData[category]) then
|
||||
if (attData[category].att == attachmentID) then
|
||||
return
|
||||
else
|
||||
self:RefundAttachment(weapon, character, attData[category].itemID)
|
||||
attData[category] = nil
|
||||
weapon.ixItem:SetData("tfa_atts", attData)
|
||||
end
|
||||
end
|
||||
|
||||
local item = character:GetInventory():HasItem(self.attnTranslate[attachmentID] or attachmentID)
|
||||
if (!item) then return end
|
||||
attData[category] = {att = attachmentID, itemID = item:GetID()}
|
||||
item:Transfer(nil, nil, nil, weapon.Owner, nil, true)
|
||||
|
||||
weapon.ixItem:SetData("tfa_atts", attData)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:TFA_Attachment_Detached(weapon, attid, atttable, category, attindex, forced)
|
||||
local character = weapon.Owner:GetCharacter()
|
||||
if (weapon.ixItem and character) then
|
||||
for _, v in pairs(weapon.ixItem.atts) do
|
||||
if (v == attid) then
|
||||
local data = weapon.ixItem:GetData("tfa_default_atts_uneq", {})
|
||||
data[v] = true
|
||||
weapon.ixItem:SetData("tfa_default_atts_uneq", data)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local attData = weapon.ixItem:GetData("tfa_atts", {})
|
||||
|
||||
local itemID = attData[category].itemID
|
||||
self:RefundAttachment(weapon, character, itemID)
|
||||
|
||||
attData[category] = nil
|
||||
|
||||
if (!table.IsEmpty(attData)) then
|
||||
weapon.ixItem:SetData("tfa_atts", attData)
|
||||
else
|
||||
weapon.ixItem:SetData("tfa_atts", nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:RefundAttachment(weapon, character, itemID)
|
||||
if (!ix.item.instances[itemID]) then
|
||||
local query = mysql:Select("ix_items")
|
||||
query:Select("item_id")
|
||||
query:Select("unique_id")
|
||||
query:Select("data")
|
||||
query:Where("item_id", itemID)
|
||||
query:Callback(function(result)
|
||||
if (istable(result)) then
|
||||
local data = util.JSONToTable(result[1].data or "[]")
|
||||
local uniqueID = result[1].unique_id
|
||||
local itemTable = ix.item.list[uniqueID]
|
||||
|
||||
if (itemTable and itemID) then
|
||||
local item = ix.item.New(uniqueID, itemID)
|
||||
item.data = data or {}
|
||||
item.invID = 0
|
||||
|
||||
local x, y, bagInv = character:GetInventory():FindEmptySlot(item.width, item.height)
|
||||
if (x and y) then
|
||||
local id = bagInv and bagInv:GetID() or character:GetInventory():GetID()
|
||||
item:Transfer(id, x, y)
|
||||
else
|
||||
local itemEntity = item:Spawn(weapon.Owner)
|
||||
itemEntity.ixItemID = itemID
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
query:Execute()
|
||||
else
|
||||
local item = ix.item.instances[itemID]
|
||||
local x, y, bagInv = character:GetInventory():FindEmptySlot(item.width, item.height)
|
||||
if (x and y) then
|
||||
local id = bagInv and bagInv:GetID() or character:GetInventory():GetID()
|
||||
item:Transfer(id, x, y)
|
||||
else
|
||||
local itemEntity = item:Spawn(weapon.Owner)
|
||||
itemEntity.ixItemID = itemID
|
||||
item.invID = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:DenyWeaponFire(weapon)
|
||||
if ((!weapon.ixDeniedSound or weapon.ixDeniedSound < CurTime()) and IsValid(weapon.Owner)) then
|
||||
weapon.ixDeniedSound = CurTime() + 2
|
||||
weapon.Owner:EmitSound("buttons/combine_button_locked.wav")
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:TFA_PreCanPrimaryAttack(weapon)
|
||||
if (weapon.ixItem and weapon.ixItem:GetData("BioLocked")) then
|
||||
self:DenyWeaponFire(weapon)
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:TFA_SecondaryAttack(weapon)
|
||||
if (weapon.ixItem and weapon.ixItem:GetData("BioLocked")) then
|
||||
self:DenyWeaponFire(weapon)
|
||||
return true -- signal we 'handled' the attack
|
||||
end
|
||||
end
|
||||
|
||||
local swing_threshold = 0.3
|
||||
local function M_TIME(client)
|
||||
local wep = client:GetActiveWeapon()
|
||||
if (!IsValid(wep) or !wep.TFA_NMRIH_MELEE or wep:GetStatus() != TFA.Enum.STATUS_IDLE) then return end
|
||||
if (client.HasTFANMRIMSwing) then return end
|
||||
|
||||
if (client:KeyDown(IN_ATTACK)) then
|
||||
if (client.LastNMRIMSwing == nil) then
|
||||
client.HasTFANMRIMSwing = false
|
||||
if (hook.Run("CanDoHeavyMeleeAttack", wep) == false) then
|
||||
client.LastNMRIMSwing = math.huge
|
||||
else
|
||||
client.LastNMRIMSwing = CurTime() + swing_threshold
|
||||
end
|
||||
elseif (client.LastNMRIMSwing and CurTime() > client.LastNMRIMSwing and IsValid(wep) and wep.IsTFAWeapon) then
|
||||
client.HasTFANMRIMSwing = true
|
||||
client:GetActiveWeapon():PrimaryAttack(true, true)
|
||||
client.LastNMRIMSwing = CurTime()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
hook.Add("PlayerTick","TFANMRIH_M",M_TIME)
|
||||
Reference in New Issue
Block a user