как запустить lua скрипт в gmod
Вот сам серверный скрипт:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Получить UserID с клиентской части игры hl2
Нужно вытащить UserID с клиентской части игры hl2. UserID это число которое присваивается.
Написать скрипт Bash, компилирующий и запускающий программу
Задача: Написать скрипт, компилирующий и запускающий программу (имя исходного файла и exe-файла.
Требуется написать скрипт, запускающий приложение с CD-диска
Требуется написать скрипт запускающий приложение с CD-диска, независимо оттого откуда он был.
Это если папка client находится там, где расположен бинарник игры.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Нужно создать сервер для клиентской части(чат)(внутри файл клиентской части)
Нужна помощь для создания серверной части для клиента, что бы он мог принимать сообщения от.
Как создать скрипт запускающий ярлык с параметром
Подскажите пожалуйста, как создать скрипт который будет открывать ярлык с параметром?
Как создать скрипт, запускающий определённую процедуру по закрытию браузера?
Помогите решить такую задачу: В win2008server с ролью терминального сервера пользователь.
Запускающий скрипт. Особенность работы
Работаю с программой Modem Manager. Нужно реализовать в собственном приложение некоторые функции.
Скрипт запускающий службы в определенном порядке
Коллеги, всем доброго времени суток. Возникла потребность написать bat скрипт, который запускает.
Как запустить lua скрипт в gmod
Теперь приступим к скриптингу.
Вписываем в луа скрипт наш код:
function HookTest() // Название нашей функции которую будет вызывать хук.
print(«Привет») // Вывод текста в консоль.
end // Конец функции
hook.Add(«Think», «HookId», HookTest) // Код хука.
Теперь нужно сделать так чтобы гмод читал наш текст.
Для этого нужен NotePad++.
Выделите весь код.
Жмите на Кодировки/Преобразовать в UTF-8 (без BOM).
Прикрепленная картинка
Теперь проверим это в игре и мы увидим:
Прикрепленная картинка
Событие «Think» будет постоянно вызывать код, который мы указали в функции.
Некоторые события имеют свои значения для функции.Например для определения игрока.
function HelloSpawn( ply ) // Обратите внимание на код ply в скобках,это игрок который спавнится после подключения.
ply:PrintMessage(HUD_PRINTTALK,»Здравствуйте!Вы зашли на наш сервер.Хорошей игры!») // Выводим в чат появившегося игрока,наш текст.
end
hook.Add( «PlayerInitialSpawn», «HelloSpawnId», HelloSpawn ) // Событие «PlayerInitialSpawn» вызывается когда игрок подключается.
Прикрепленная картинка
Вот пара других событий:
Hooks
Ну вот,вы научились создавать скриптовый аддон для Garry’s Mod’а.
Как запустить lua скрипт в gmod
What can Lua do on Gmod? Lua can help you create add-ons like the ones in the workshop. You can use it to control objects in-game, create an admin system, or anything you want, as long as you know how to do it.
If you would like some help with Lua, or any other programming language, come join my server on Guilded, a fellow programmer, or I will help you as much as possible. Do not private message me on Guilded, ask your questions on the programming group, if you do I will ignore it.
Or if your running a server, you can put it in there.
Now you need to enable the console on Garry’s Mod if you already haven’t.
1.) Start Garry’s Mod.
2.) Go to Options.
3.) Go to the Keyboard Tab.
4.) Click the Advanced button.
5.) Check Enabled developer console, then click Okay.
6.) Click Okay again. Now your console will open when you press «
Now, start a game, after that open the console, and you can put lua_openscript fileName.lua to start it server side, to start it client side put lua_openscript_cl fileName.lua in the console. It should run unless you have errors, the errors will appear if that file does not exist, or theres a problem in your lua file.
These will not work if your on someon else’s server, it can be only on your own, unless you have some kind of special access to their server.
What printing does is that it prints to a developer console to post a message, this is basically used to print out errors in the console so developers can fix the issues. But it can also be used for anything. The cool thing is that print(); can take in any variable, bellow i will show you examples.
Printing normal text
Adding variables along with text
Today we will be learning about Variables, now the first thing I need to show you is different Variable Types. Below is an example of all them.
Firstly to make a Variable itself just make a name without spaces, or any special characters, but to replace spaces, use «_» ( Underscore ). Then make an equals sign after that, and make it equal anything that is specified up-top in the Variable Types.
String Variable Rules
In string variables, when you make it equal text, make sure you put quotations around the text, otherwise it doesn’t work. The reason for this is so that the interpreter [en.wikipedia.org] knows it’s not code, but just normal text.
Boolean Variable Rules
In boolean variables they can only equal true, or false. They do not require quotations because they are not normal text.
Number Variable Rules
Now this works for all Number Variable Types, they do not also require quotations because they are not normal text, and they are to be only numbers!
When using variables all you have to do to use them is reference the name, but make sure they are exactly the same! In programming it is «Caps Sensetive», meaning it has to have capitals if the variable has capital letters in it. Same with everything else which we will be learning! When referencing variables it does not need Quotations, otherwise it thinks your writing normal text, but really your trying to use a variable in code.
To add to a variable?
In this we will be learning how to use the If then Statement for making checks in your programs. First of all what is an If Then Else statement? Well they are pieces of code used to check numbers, booleans, and text to do certain things, below is an example of how it works!
Okay so one thing we need to talk about are Semi-Colons, usually you need semi-colons to end a line of code, but if it’s a grouping such as the if then else statement, or methods, etc. then they are not required. Another thing to talk about is how to end groupings ( if then else statement, or methods, etc. ), always when your using groupings you need to end it with «end» otherwise the code will not work properly, and could most likely output errors.
Now in this we will learn how to use else, which is used to do something else if it doesn’t equal.
Now what this does is that if Health does not equal 0 then it puts him as alive. You can also do else if, although the else if is part of the if then up-top it still need another end because its another grouping. below is an example.
Alright so basically what a function is, is it’s a group of code that can be started as many times as you like without re-writing the code multiple times, very suggested that you use this! By the way a method, and a function is the same thing just that in Object-Orientated Programming a method is contained in a class.
Okay so remember how I said that functions are also groupings? Well if you remember, groupings have to have endings just like If Then Statements! What is the parameters in the parentheses? Well in there is what you want to pass, so that the function can use that value. All it really is, is that it’s a variable in those parentheses. An example of how it works should help you!
Why did I reference a function in print? Well the reason I did that is because when you make a function return something shown up-top, it acts like a variable, this is very useful! Go ahead and try this for yourself, it will help give you a better understanding of how it works! Here is another example by the way.
-Output: Hello World!
You don’t need to return anything, this is your choice to do.
Arrays are variables with lists, arrays can be 1-D, 2-D, or 3-D. 1-D Arrays mean they only have 1 list, 2-D Arrays have more than 2 lists, 3-D Arrays are just cluster ♥♥♥♥♥, quite literally most people get stuck at this point because it’s hard to think about. Anyways just think of a 3-D graph as for a 3-D Array. Heres how it’s setup.
Really confusing huh? I know how you felt when I first started. Anyways to get the values, you need to label the index for example.
Okay so heres something important you need to know, try to lessen the use of while loops, they can be a problem! Usualy while loops are to loop unless an arguement returns the opposite in the arguemnts, I’ll show you an example!
Now this while loop will loop forever because true is true. Here will be another example of toggling loops.
This will loop constantly until Tof is false.
For loops are the most common used loop. Mostly they are used to get every individual index in an Array, which you will learn how later. Here is example of how it works.
Okay so here is how it works, i = 1 is the starting value, 10 is the max number it will go to, 1 is how many it will add or subtract to the i variable. Now here is an example how to work it with arrays in 2 different ways.
-Output:
1: Aaron
2: Denis
3: Dave
4: Cherell
Here is another way.
-Output:
1: Aaron
2: Denis
3: Dave
4: Cherell
Как запустить lua скрипт в gmod
Набор условных операторов и циклов довольно типичен:
Код на Lua:
— условные операторы (ветки else может не быть)
if a == 0 then
print(«a is zero»)
else
print(«a is not zero»)
end
— сокращенная форма if/elseif/end (вместо switch/case)
if a == 0 then
print(«zero»)
elseif a == 1 then
print(«one»)
elseif a == 2 then
print(«two»)
else
print(«other»)
end
— цикл со счетчиком
for i = 1, 10 do
print(i)
end
— цикл с постусловием
repeat
b = b + 1
until b >= 5
В выражениях можно использовать такие вот операторы над переменными:
= (не-равно, да-да, вместо привычного «!=»)
* конкатенация строк (оператор «..»), напр.: s1=»hello»; s2=»world»; s3=s1..s2
* длина/размер (оператор #): s=»hello»; a = #s (‘a’ будет равно 5).
* получение элемента по индексу, напр.: s[2]
Битовых операций в языке долгое время не было, но в версии 5.2 появилась библиотека bit32, которая их реализует (как функции, не как операторы).
Я вам соврал, когда сказал что у языка один тип данных. Их у него много (как и у каждого серьезного языка):
* nil (ровным счетом ничего)
* булевы числа (true/false)
* числа (numbers) — без деления на целые/вещественные. Просто числа.
* строки — кстати, они очень похожи на строки в паскале
* функции — да, переменная может быть типа «функция»
* поток (thread)
* произвольные данные (userdata)
* таблица (table)
Если с первыми типами все понятно, то что же такое userdata? Вспомним о том, что Lua — язык встраиваемый, и обычно тесно работает с компонентами программ, написанными на других языках. Так вот, эти «чужие» компоненты могут создавать данные под свои нужды и хранить эти данные вместе с lua-объектами. Так вот, userdata — и есть подводная часть айсберга, которая с точки зрения языка lua не нужна, но и просто не обращать внимания на нее мы не можем.
А теперь самое важное в языке — таблицы.
Я вам снова соврал, когда сказал, что у языка 8 типов данных. Можете считать что он один: всё — это таблицы (это, кстати, тоже неправда). Таблица — это очень изящная структура данных, она сочетает в себе свойства массива, хэш-таблицы («ключ»-«значение»), структуры, объекта.
Код на Lua:
— Итак, вот пример таблицы как массива:
a = <1, 2, 3>— массив из 3-х элементов
print(a[2]) — выведет «2», потому что индесы считаются с единицы
— А таблица в виде разреженного массива (у которого есть не все элементы)
a = <> — пустая таблица
a[1] = 1
a[3] = 5
ПОДУМАЙТЕ: чему равно a[2] в случае разреженного массива?
В примере выше таблица ведет себя как массив, но на самом деле — у нас ведь есть ключи (индексы) и значения (элементы массива). И при этом ключами могут быть какие угодно типы, не только числа:
Код на Lua:
a = <>
a[«hello»] = true
a[«world»] = false
a[true] = 1
— или так:
a = <
hello = 123,
world = 456
>
print(a[«hello»])
print(a.hello) — то же самое, что и a[«hello»], хотя выглядит как структура с полями
Кстати, раз уж у таблицы есть ключи и значения, то можно в цикле перебрать все ключи и соответствующие им значения:
Код на Lua:
t = <
a = 3,
b = 4
>
for key, value in pairs(t) do
print(key, value) — выведет «a 3», потом «b 4»
end
А как же объекты? О них мы узнаем чуть позже, вначале — о функциях.
Вот пример обычной функции.
Код на Lua:
function add(a, b)
return a + b
end
print(add(5, 3)) — напечатает «8»
Функции языка позволяют принимать несколько аргументов, и возвращать несколько аргументов. Так аргументы, значения которых не указаны явно, считаются равными nil.
ПОДУМАЙТЕ: зачем может понадобиться возвращать несколько аргументов?
Код на Lua:
function swap(a, b)
return b, a
end
Функции могут принимать переменное количество аргументов:
Код на Lua:
— в прототипе переменное число аргументов записывается как троеточие
function sum(. )
s = 0
for _, n in pairs(arg) do — в функции обращаются к ним, как к таблице «arg»
s = s + n
end
return a
end
sum(1, 2, 3) — вернет 6
sum(1, 2, 3, 4) — вернет 10
Поскольку функции — это полноценный тип данных, то можно создавать переменные-функции, а можно передавать функции как аргументы других функций
Код на Lua:
a = function(x) return x * 2 end — функция, умножающая на 2
b = function(x) return x + 1 end — функция, увеличивающая на 1
function apply(table, f)
result = <>
for k, v in pairs(table) do
result[k] = f(v) — заменяем элемент на какую-то функцию от этого элемента
end
end
— ПОДУМАЙТЕ: что вернут вызовы
t = <1, 3, 5>
apply(t, a)
apply(t, b)
Объекты = функции + таблицы
Раз мы можем сохранять функции в переменных, то и в полях таблиц тоже сможем. А это уже получаются как-бы-методы. Для тех, кто не знаком с ООП скажу, что основная его польза (по крайней мере в Lua) в том, что функции и данные, с которыми они работают находятся рядом — в пределах одного объекта. Для тех, кто знаком с ООП скажу, что классов здесь нет, а наследование прототипное.
Перейдем к примерам. Есть у нас объект, скажем, лампочка. Она умеет гореть и не гореть. Ну а действия с ней можно сделать два — включить и выключить:
Код на Lua:
lamp = <
on = false
>
function turn_on(l)
l.on = true
end
function turn_off(l)
l.on = false
end
— это просто функции для работы со структурой
turn_on(lamp)
turn_off(lamp)
А если лампочку сделать объектом, и функции turn_off и turn_on сделать полями объекта, то получится:
Код на Lua:
lamp = <
on = false
turn_on = function(l) l.on = true end
turn_off = function(l) l.on = false end
>
lamp.turn_on(lamp)
lamp.turn_off(lamp)
Мы вынуждены передавать сам объект лампочки в качестве первого аргумента, потому что иначе наша функция не узнает с какой именно лампочкой надо работать, чтобы сменить состояние on/off. Но чтобы не быть многословными, в Lua есть сокращенная запись, которую обычно и используют — lamp:turn_on(). Итого, мы уже знаем несколько таких упрощений синтаксиса:
Код на Lua:
lamp:turn_on() — самая общепринятая запись
lamp.turn_on(lamp) — то с точки зрения синтаксиса это тоже правильно
lamp[«turn_on»](lamp) — и это
Продолжая говорить о сокращениях, функции можно описывать не только явно, как поля структуры, но и в более удобной форме:
Код на Lua:
lamp = <
on = false
>
Эффективная разработка в Garry’s Mod
_AMD_
Основатель trigon.im и gm-donate.ru. Интересуюсь айти, текстами, продажами. Меломан, интроверт, альтруист
_AMD_
Я занимаюсь Garry’s Mod’ом с 2015 года, начиная с администрирования чужого сервера и до создания своего проекта, где большинство разработок были самописны (не куплены), а сервера проекта в свое время были в топ-10 мира по рейтингу GameTracker.
Инструменты, которые я использую позволили мне ускорить разработку в сравнении с банальным редактированием файлов через FTP в десятки раз. То, что написано ниже требует немного времени на изучение, но это время уже за неделю окупится за счет гораздо большего скорости разработки и удобства в целом.
Я старался сделать пост максимально сжатым, поэтому некоторые детали по установке или настройке упустил. Если возникнут вопросы, вы можете задать их мне в t.me/gmodev
Софт, который будем использовать
Плагины для SublimeText
Плагины будут показывать нам на ошибки в коде прямо в процессе его написания, будут заниматься синхронизацией файлов сервера с локальным компом и ускорять навигацию в коде
Все плагины устанавливаются через один единственный плагин PackageControl, который устанавливается одной командой и позволяет сделать из простого текстового редактора красивую и мощную IDE
GLua синтаксис
GmodLua (glua) немного отличается от чистого Lua. В нем есть особенности синтаксиса, а также функции, которых нет в чистом Lua. Плагин сделает ваш код визуально красивее.
Мой файл настроек саблайма. Здесь настраивается тема, шрифт, а выделенным показано то, что вам нужно сделать, чтобы glua не конфликтовал с Lua
Пример файла настройки и инструкция находится здесь
Чтобы работали сочетания клавиш, нужно добавить в ваши key bindings (ищите в панели инструментов Sublime) нужные сочетания:
Плагин сделает ваш код чище, а также сэкономит время на исправлении случайных синтаксических ошибок (ох уж эти скобочки). Он прямо в процессе написания кода будет подсвечивать участки, которые не соответствуют стилю или вовсе содержат ошибки.
Красным выделена синтаксическая ошибка
Перед установкой плагина сначала нужно скачать glualint.exe «модуль», закинуть его в удобную папку и прописать путь к ней в PATH системы (как это сделать?). После этого откройте командную строку Win+R > cmd.exe и введите там glualint. Если появляется ошибка, то плагин для саблайма работать не будет. Именно этот модуль отвечает за определение ошибок в коде.
Только теперь можно открывать саблайм и устанавливать сам плагин. В Ctrl + Shift + P пишем Install Package, затем ищем glualint (SublimeLinter-contrib-glualint). Чтобы этот плагин работал, необходимо установить еще SublimeLinter. Он так и называется. Подробнее процесс установки Glualint описан тут.
Если возникли вопросы или нужна помощь с установкой и настройкой, напишите мне в t.me/gmodev
Еще для SublimeText
Особенности разработки
Еще скрипты для сервера
В статье собраны не все инструменты, которые я использовал при разработке и администрировании своего проекта, чтобы статья получилась не слишком громадной. Если вам интересно узнать что-то еще, то можете спросить у меня в t.me/gmodev.
Также я буду рад, если кто-то подскажет еще какие-то интересности. Так что не стесняйтесь и пишите мне 🙂
Subscribe to Блог _AMD_
Get the latest posts delivered right to your inbox