Библиотека.NW System. SetNW замена umsg на net

:warning: Внимание!
Данный код может не работать на сборках sup (нужно тестировать отдельно)

Данный код есть в двух вариациях старый стиль и Новый стиль.
Старый стиль был написан поверх нового стиля, по этому имеет код который есть, но не используется, к примеру имена типа SetNW (Angle ,bool и т.д).
Так же Сам код основан на доработанной мной библиотеки

gBetterNet(Ссылка на Github).
Она не так важна просто немного меняет стиль работы с net.

Данный код изменяет стандартный SetNW основанный на usmg на net.

Стандартный SetNW каждые 10 секунд или изменённое значение, командой: sv_playerforcedupdate, отправляет данные и не важно менялись ли они или нет.

Работает почти как SetNW2, но игрок, получает данные даже вне PVS, эти данные отправляются в сеть 1 раз, а так же синхронизируются с новым подключённым игроком.

Всё это уменьшает нагрузку на сервер, так как ему не надо каждые 10 секунд, отправлять много данных.

Исправляя вот такие приколы (грязновато жёлтый)

image

Скриншот сделан на Бебраград’е с онлайном, 14 человек.

Новые функции

PLAYER:AddText( ‘Цвет’, ‘Сообщение’ ) – отправляет с sv части цветное сообщение.

Пример:
:warning:Цвета желательно сохранить в переменных!
:warning:Если используете один и тот же текст сделайте через net с cl стороны.

Player(1):AddText( Color(255,255,255), 'Белый ',Color(255,0,0),'Красный ',Color(0,255,0),'Зелённый ',Color(0,0,255),'Синий')

Получит определённый игрок.
:clock3:
player.AddText( ‘Цвет’, ‘Сообщение’ ) – тоже самое но отправляет всем игрокам.

Новые SetNW

ENTITY:SetNWVar(‘name’,var)
ENTITY:GetNWVar(‘name’,fallback = nil)
– автоматически определяет тип отправляемого значения
– var любой тип string,int,Color,Entity,Table и т.д,

– смотреть разницу Int и Uint
ENTITY:SetNWUInt(‘name’,var)
ENTITY:GetNWUInt(‘name’,fallback = nil)

Приватность SetNW

:warning: Работает только если целью указан игрок!

Так же аддон позволяет отправлять данные только одному игроку, пример:

--=Стандарт=-
--Server
Player(1):SetString('password','dfgFfdt')
-- Client - Player(1)
localplayer():GetString('password','none')
-- вернёт dfgFfdt

-- Client - Player(2)
Player(1):GetString('password','none')
-- вернёт dfgFfdt
--=NW System=--
--Server
Player(1):SetString('password','dfgFfdt',true)
-- Client - Player(1)
localplayer():GetString('password','none')
-- вернёт dfgFfdt

-- Client - Player(2)
Player(1):GetString('password','none')
-- вернёт none

Это позволяет проще отправлять кондифициальную информацию.

:warning: Работает только если целью указан игрок!

Новый хук

PlayerNWRead

hook.Add('PlayerNWRead','Name',function(pl, id)
-- pl -игрок
-- id - Player(id)
--
end)

запускается когда игрок зашёл на сервер
хук гарантированно передаёт net сообщение
используется как синхронизация NW таблицы.

:information_source:
Разница UInt и Int:
UInt - передаёт значения от 0 до 4294967295.
Int-передаёт значения от -2147483648 до 2147483647

Разница между Старым стилем и Новым:
Старый стиль полностью совместим с аддонами, Новый может ломать некоторые аддоны, так как авторы могут использовать на одном значении разные типы запросов.

Пример:

Entity(1):SetNWBool(‘test’,true)
Entity(1):GetNWInt((‘test’,0)-- получим 1 так как true в бите является 1.

Почему так? Новый стиль создаёт под каждый тип отдельную таблицу, и по этому они не пересекаются.

Так же Есть функция нулить NW значения просто поставте nil

Entity(1):SetNWString(‘Text’,nil)

:warning: Внимание!
Личные NW нельзя занулить, после обновлю и будет можно.
Личные NW не синхронизируются но остаются в доступе у игрока и сервера.
Личные NW не в приоритете при получении NW значения.

:information_source:
Установка:
распаковать в папку Addons.
!!_system2.rar (Установка распаковка в garrysmod/addons/)

Данный Код позволяет устанавливать для него свои аддоны.
Да бы не засорять файлами в других каталогах.

!!nw_system\lua\nw_addons

В открытом доступе только старый стиль.

С вас :hearts:

любишь же ты странную дичь мутить)

1 лайк

думаю это очень полезная штучка