Библиотека net

  • 10
  • 3
Контакты для связи отсутствуют.
Библиотека net используется в gmod'е для взаимодействия клиент-сервер. Для меня раньше было сложно понять, как именно она работает, поэтому вот лёгкое объяснение:

Что-бы написать консольную команду, которая будет нам восстанавливать хп, мы создадим 2 файла. Пути к ним это:
myaddon/lua/autorun/client/cl_myaddon.lua ( cl - сокращённо от client. То-беж клиентская часть кода )
myaddon/lua/autorun/server/sv_myaddon.lua ( sv - сокращённо от server. То-беж серверная часть кода )

Так-как мы хотим сделать консольную команду для игрока, будем её писать в клиентской части.


cl_myaddon.lua:
concommand.Add("getHealth", function() -- Создаём консольную команду
    net.Start("koko") -- Начинаем 'общение' с сервером, по идентификатору.
    net.WriteInt(120, 32) -- Число, выделяемые байты
    net.SendToServer() -- Отправляем сообщение на сервер
end)

В этом коде мы как-раз используем библиотеку net, начинаем общение (отправная точка входа данных, после которой мы будем вводить то, что хотим переслать на сервер). После того, как мы показали коду, где именно начнем общение с сервером - вписываем нужные числа. В функции net.WriteInt() есть 2 аргумента, первый - само число, второй - выделяемая под него память. Таблицу Макс-Мин число / Нужное кол-во байтов вы можете лицезреть на gmod wiki.

Что-же дальше? После запуска когда, конечно, ничего не произойдёт, ведь мы не сделали код на серверной части, он ниже.


sv_myaddon.lua:
util.AddNetworkString("koko") -- объявляем наш идентификатор
net.Receive("koko", function(len, ply)
    local hp = net.ReadInt(32)
    ply:SetHealth(hp)
end)

net.Receive - Это 'триггер', который будет выполняться после получения сервером сообщения, которое мы отправили на клиенте. То-есть он будет срабатывать как только сообщение "koko" будет отправлено, вместо koko вы можете написать что угодно, это идентификатор.

function(len, ply) - функция, в которой мы будем оперировать над нашим сообщением. len - размер сообщения в битах, чаще всего не используется и можно под него память не выделять, оставив так: function(_, ply). Собственно ply - игрок-отправитель.

Дальше мы объявляем локальную переменную hp с значением net.ReadInt(32), где 32 - количество битов нашего числа. Они должны совпадать.

После мы выдаём нашему игроку здоровье, думаю это объяснять не стоит. Стоит подметить - при работе с net старайтесь делать проверки именно на сервере, ведь екзек юзеры любят похимичить с ними. Всем бобра, я спать
 
  • 162
  • 21
  • 22
Контакты для связи отсутствуют.
gmod wiki Написан на русском? Не знал. А вообще, гайд сделан для тех кому сложно даётся, или тем, у кого с английским плохо.
Про переводчик видимо я один знаю...
А так для понимания вики не требуется высшего знания английского языка, школьной программы достаточно
 
Активность
Пока что здесь никого нет
Сверху Снизу