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 |