Since everyone is complaining about SetNW* causing crashes and I happened to need to make a new lib for my server I've made nw-vars.
nw-vars are a simple replacement to SetNW*. Data is synced when the player first joins the server and the moment a var is changed. You can optionally set the write, read functions and a filter function to increase efficiency as seen below.
Link: [url]https://github.com/aStonedPenguin/nw-vars[/url]
To use place in: lua/includes/modules
Example usage:
[lua]
require('nw')
- Get a var
ENTITY:GetNetVar(var)
- Set a var
ENTITY:SetNetVar(var, value)
- Register the var, this is totally optional, filter and read/write functions are optional
nw.Register('MyVar', {
Read = net.ReadString,
Write = net.WriteString,
Filter = function(ent, var, value)
return ent
end,
}
- Use this hook instead of InitialSpawn
hook.Add('PlayerEntityCreated', 'example', function(pl)
pl:SetNetVar('MyVar', 'Hello')
end)
[/lua]
Honestly I think the simple approach taken here is probably better than other networking libraries. Gives you a low level of abstraction that gets the job done without sacrificing performance for the sake of tons of automagic features.
[QUOTE=thelastpenguin;47366041]Honestly I think the simple approach taken here is probably better than other networking libraries. Gives you a low level of abstraction that gets the job done without sacrificing performance for the sake of tons of automagic features.[/QUOTE]
nice edit
[QUOTE=Th3applek1d;47366065]nice edit[/QUOTE]
he totally didn't force me to change that.
At least this one won't cause any of my addons to break like others which replace SetNW*.
So do i need to place the nw.lua in lua/includes/modules and let it go
or should i also change SetNW to SetNetVar ?
[QUOTE=PwndKilled;47367739]So do i need to place the nw.lua in lua/includes/modules and let it go
or should i also change SetNW to SetNetVar ?[/QUOTE]
You'll have to overwrite SetNW* or replace all calls yourself.
This is a neat little library, I did something similar myself.
There's a [I]bug[/I] though, I'm not really sure if it's something you want to address or if it was just something that I needed in my implementation.
Anyway, net messages are not guaranteed to be received in the same order that they were sent, so it's possible on the server:
[lua]
ent:SetNetVar('test', 100);
ent:SetNetVar('test', 50);
[/lua]
Will in turn, set it to 50 then 100, effectively making the second call useless.
[QUOTE=>>oubliette<<;47369198]
Anyway, net messages are not guaranteed to be received in the same order that they were sent, so it's possible on the server:
[/QUOTE]
Do you have any source for that?
If that is true that would be really bad.
[QUOTE=syl0r;47369403]Do you have any source for that?
If that is true that would be really bad.[/QUOTE]
NW Events are sent as binary encoded UDP packets aren't they? There's no ordering built into that so unless GMod / Valve implements their own ordering and retransmission system they will be vulnerable to the same loss / reordering that all UDP is.
There is ordering (unless you mark the message as unreliable).
Sorry, you need to Log In to post a reply to this thread.