diff --git a/lua/entities/gmod_wire_expression2/core/cl_files.lua b/lua/entities/gmod_wire_expression2/core/cl_files.lua index 0cf2a1126e..724580a8b0 100644 --- a/lua/entities/gmod_wire_expression2/core/cl_files.lua +++ b/lua/entities/gmod_wire_expression2/core/cl_files.lua @@ -90,16 +90,21 @@ net.Receive( "wire_expression2_request_list", function() net.Start("wire_expression2_file_list") local files, folders = file.Find( dir .. "*","DATA" ) - net.WriteUInt(#files + #folders, 16) + local txtfiles = {} for _,fop in pairs(files) do if string.GetExtensionFromFilename( fop ) == "txt" then - net.WriteUInt(#fop, 16) - net.WriteData(fop) + txtfiles[#txtfiles + 1] = fop end end - for _,fop in pairs(folders) do + net.WriteUInt(#txtfiles + #folders, 16) + for _,fop in pairs(txtfiles) do net.WriteUInt(#fop, 16) - net.WriteData(fop .. "/") + net.WriteData(fop) + end + for _,fop in pairs(folders) do + local folder = fop .. "/" + net.WriteUInt(#folder, 16) + net.WriteData(folder) end net.SendToServer() end) diff --git a/lua/entities/gmod_wire_expression2/core/signal.lua b/lua/entities/gmod_wire_expression2/core/signal.lua index 3a337a18e3..29c732d381 100644 --- a/lua/entities/gmod_wire_expression2/core/signal.lua +++ b/lua/entities/gmod_wire_expression2/core/signal.lua @@ -91,9 +91,6 @@ local function broadcastSignal(group, name, scope, sender, filter_player) end end ---local function table_IsEmpty(t) return not pairs(t)(t) end -local function table_IsEmpty(t) return not next(t) end - local function setGroup(self, group) -- set the current group to the new group self.data.signalgroup = group @@ -241,8 +238,8 @@ __e2setcost(20) --- sends signal S to chips owned by the given player, multiple calls for different players do not overwrite each other e2function void signalSendToPlayer(string name, entity player) - if not IsValid(player) then return end - broadcastSignal(self.data.signalgroup, name, 1, self.entity, player) + if not IsValid(player) or not player:IsPlayer() then return end + broadcastSignal(self.data.signalgroup, name, 1, self.entity, player:UniqueID()) end --[[************************************************************************]]-- @@ -253,6 +250,8 @@ registerCallback("construct",function(self) end) registerCallback("destruct",function(self) + local receiverid = self.entity:EntIndex() + -- loop through all scopes, ... for scope,groups in pairs_ac(scopes) do -- ... all groups ... @@ -260,7 +259,7 @@ registerCallback("destruct",function(self) -- ... and all signals ... for name, contexts in pairs_ac(signals) do -- to remove all signals the chip registered for. - contexts[self] = nil + contexts[receiverid] = nil end end end diff --git a/lua/wire/wirenet.lua b/lua/wire/wirenet.lua index e4fe6a1672..138fdb91dc 100644 --- a/lua/wire/wirenet.lua +++ b/lua/wire/wirenet.lua @@ -49,10 +49,14 @@ if SERVER then local data = table.concat(tbl) if #data < 4096 then - data = util.Compress(data) + local compressed = util.Compress(data) net.WriteBool(false) - net.WriteUInt(#data, 12) - net.WriteData(data) + if compressed then + net.WriteUInt(#compressed, 12) + net.WriteData(compressed) + else + net.WriteUInt(0, 12) + end else net.WriteBool(true) net.WriteStream(data, nil, false) @@ -207,4 +211,4 @@ function Net.Trivial.Receive(name, callback) update_handlers(name:lower(), callback) end -Net.Receivers = registered_handlers \ No newline at end of file +Net.Receivers = registered_handlers