105 lines
3.3 KiB
Lua
105 lines
3.3 KiB
Lua
-- TODO add some comments and clean up the code, this is bad for now lol
|
|
-- add split up to funcion's file and the file with hooks and shit
|
|
|
|
local findtarget = dofile(... .. "/Lua/findtarget.lua")
|
|
|
|
local function LinkAdd(target, otherTarget)
|
|
target.AddLinked(otherTarget)
|
|
otherTarget.AddLinked(target)
|
|
otherTarget.DisplaySideBySideWhenLinked = true
|
|
target.DisplaySideBySideWhenLinked = true
|
|
end
|
|
|
|
local function LinkRemove(target, otherTarget)
|
|
target.RemoveLinked(otherTarget)
|
|
otherTarget.RemoveLinked(target)
|
|
end
|
|
|
|
local function AddMessage(text, client)
|
|
local message = ChatMessage.Create("Lua Linker", text, ChatMessageType.Default, nil, nil)
|
|
message.Color = Color(60, 100, 255)
|
|
|
|
if CLIENT then
|
|
Game.ChatBox.AddMessage(message)
|
|
else
|
|
Game.SendDirectChatMessage(message, client)
|
|
end
|
|
end
|
|
|
|
local links = {}
|
|
|
|
Hook.Add("luaLinker.onUse", "lualinker.luaLinker", function(statusEffect, delta, item)
|
|
local target = findtarget.findtarget(item)
|
|
if CLIENT and Game.IsMultiplayer then
|
|
return
|
|
end
|
|
local owner = findtarget.FindClientCharacter(item.ParentInventory.Owner)
|
|
|
|
if target == nil then
|
|
AddMessage("No item found", owner)
|
|
return
|
|
end
|
|
|
|
if links[item] == nil then
|
|
links[item] = target
|
|
AddMessage(string.format("Link Start: \"%s\"", target.Name), owner)
|
|
findtarget.currsor_pos = 0
|
|
else
|
|
local otherTarget = links[item]
|
|
|
|
if otherTarget == target then
|
|
AddMessage("The linked items cannot be the same", owner)
|
|
links[item] = nil
|
|
return
|
|
end
|
|
|
|
for key, value in pairs(target.linkedTo) do
|
|
if value == otherTarget then
|
|
LinkRemove(target, otherTarget)
|
|
|
|
AddMessage(string.format("Removed link from \"%s\" and \"%s\"", target.Name, otherTarget.Name), owner)
|
|
links[item] = nil
|
|
|
|
if SERVER then
|
|
-- lets send a net message to all clients so they remove our link
|
|
local msg = Networking.Start("lualinker.remove")
|
|
msg.WriteUInt16(UShort(target.ID))
|
|
msg.WriteUInt16(UShort(otherTarget.ID))
|
|
Networking.Send(msg)
|
|
end
|
|
|
|
return
|
|
end
|
|
end
|
|
|
|
LinkAdd(target, otherTarget)
|
|
|
|
local text = string.format("Linked \"%s\" into \"%s\"", otherTarget.Name, target.Name)
|
|
AddMessage(text, owner)
|
|
|
|
if SERVER then
|
|
-- lets send a net message to all clients so they add our link
|
|
local msg = Networking.Start("lualinker.add")
|
|
msg.WriteUInt16(UShort(target.ID))
|
|
msg.WriteUInt16(UShort(otherTarget.ID))
|
|
Networking.Send(msg)
|
|
end
|
|
|
|
links[item] = nil
|
|
findtarget.currsor_pos = 0
|
|
end
|
|
end)
|
|
|
|
if CLIENT and Game.IsMultiplayer then
|
|
Networking.Receive("lualinker.add", function (msg)
|
|
local target = Entity.FindEntityByID(msg.ReadUInt16())
|
|
local otherTarget = Entity.FindEntityByID(msg.ReadUInt16())
|
|
LinkAdd(target, otherTarget)
|
|
end)
|
|
|
|
Networking.Receive("lualinker.remove", function (msg)
|
|
local target = Entity.FindEntityByID(msg.ReadUInt16())
|
|
local otherTarget = Entity.FindEntityByID(msg.ReadUInt16())
|
|
LinkRemove(target, otherTarget)
|
|
end)
|
|
end |