GameGuru Classic

GameGuru Classic

Nicht genug Bewertungen
Описание и руководство по написанию скриптов на LUA | GameGuru
Von tisheme
Это руководство предназначено для того, чтобы познакомить и направить новичка со скриптов LUA, провести его через первые этапы редактирования существующих скриптов, создания собственных и, наконец, обобщения скриптов, связанных с GameGuru, по категориям.
   
Preis verleihen
Favorisieren
Favorisiert
Entfernen
От Автора
  • Это руководство-перевод для русскоязычной аудитории. По сути, это база, для начинающих и уже опытных разработчиков. Так уж сложилось, что языковой барьер отталкивает многих пользователей, хотя язык LUA прост в освоении, а обширная база бесплатных уже готовых скриптов может сделать из ваших задумок прекрасный проект.

  • Пример того, как пользоваться этим руководством. Вы можете по началу искать в интернете бесплатные скрипты для GameGuru или в папке движка GG подходящие под ваши идеи, и менять код под свои нужды с помощью этого руководства, переводчика и блокнота.

  • Скрипты = сценарии

  • Объекты = сущности

Оригинальный текст руководства:
https://steamcommunity.com/sharedfiles/filedetails/?id=398177770&insideModal=1
Основные понятия скриптов LUA


Основано на оригинальном документе Джоэла Сигала - с благодарностью.

GameGuru - это программный пакет, который использует систему Microsoft Direct X для моделирования 3D-среды на вашем компьютере. Используя модели, сценарии и другие процессы движка GameGuru, пользователь / разработчик может создать 3D-игру. (На самом деле нам нравится думать об этом как о песочнице, с помощью которой можно создавать игры профессионального качества.).

Используя расширяющуюся структуру команд в GameGuru и язык сценариев под названием LUA, вы можете создавать более сложные экшн / стратегические игры. Цель этого руководства - изучить на самом базовом уровне использование языка LUA с GameGuru.

Имейте в виду, что GameGuru на момент написания этой статьи все еще находится в стадии бета-тестирования, поэтому не вся структура GameGuru еще не завершена.

Основные концепции LUA

Подумайте о языке сценариев LUA как о программе внутри программы. Основной программой является 3D-движок GameGuru. В конечном счете, все, что вы видите на экране, от моделей до персонажей, движения, освещения и т. Д., Управляется движком GameGuru. В движок встроены командные структуры (называемые общими функциями), которые могут взаимодействовать с внешним миром и с помощью которых можно управлять шторными процессами движка GameGuru.

Было бы невозможно создать движок GameGuru, чтобы учесть все возможные повороты и повороты, которые могут придумать создатели игр.

LUA - это "внутренний" язык программирования, который взаимодействует с движком GameGuru. Скриптовые команды LUA могут быть специфичны для истории, стратегии и действий разрабатываемой “Игры”, обеспечивая контроль и активацию десятков, даже сотен действий, которые будут выполняться Движком в соответствии с запросами команд из скрипта LUA.

Реальная сила языка LUA заключается в его способности выполнять собственный набор кода управления и моделирования, управляя игрой, общаясь с GameGuru вне контроля движка. Это позволяет разрабатывать очень сложные симуляции, которые можно воспроизводить в режиме реального времени в 360-градусном 3D.

LUA - это очень полный, но компактный язык, предоставляющий сценаристу широкий спектр полезных возможностей. (Я ненавижу использовать слово “программист”, так как оно, кажется, пугает людей, тогда как ”Сценарист” кажется намного мягче.)

“Привет...Они сказали, что не будет никакого кодирования"

Итак, GameGuru рекламируется как "Простой в использовании игровой движок, и это может быть. Используя базовые объекты и персонажей и имея лишь небольшое представление о том, как работает движок и скрипты LUA, можно выбрать, создать и заполнить 3D-среду и создать рабочую игру без написания основного сценария. Итак, если все, чего вы хотите, это настроить окружение и весь день стрелять в зомби, управляемых искусственным интеллектом, занимайтесь этим, GameGuru вас прикроет.
“Два способа думать о LUA"
Во-первых, LUA может стать очень мощным инструментом, если вы немного узнаете о процессе написания сценариев. Обладая этими знаниями, вы можете вносить изменения в существующие скрипты. Изменение значений, добавление дополнительных отображаемых данных (команда запроса), изменение кода, чтобы скрипт делал то, что вы хотите.

Во-вторых, это прыжок с обеих ног, LUA deep-end или, наконец, ломка и обучение сценарию. Создание собственных сценариев и использование LUA для управления основными аспектами игры. Например, возможность создавать простую структуру данных (таблицу на языке LUA) и использовать эти данные для разработки стратегии вашей игры.

Я предлагаю большинству людей начать с первого шага, что в конечном итоге делает шаг 2 немного проще, вместо того, чтобы погружаться в область кодирования LUA. Те, кто владеет другими дисциплинами программирования (C, Basic, другие языки сценариев), найдут LUA довольно простым и относительно простым в построении. (Я из ТЕМНОЙ-ОСНОВНОЙ стороны силы.. Там нет ложки!)

Дело в том, что, помимо стрельбы по зомби весь день, GameGuru имеет (или будет иметь) более глубокие уровни контроля, позволяющие создателю игры управлять игрой, а не просто сражаться со скриптом ИИ, запущенным внутри движка GameGuru.

Вернемся к основам
Программа на Lua (которую вы создаете или изменяете) называется "Скриптом". Это простой текстовый файл с соглашением об именовании "name.lua".

TID-БИТ: версия LUA, работающая с GameGuru, требует, чтобы все имена файлов скриптов LUA были в нижнем регистре или числах. Позже вы поймете, почему это так важно.

Name.lua - НЕ ГОДИТСЯ, name.lua - Правильно

Блокнот или Блокнот + (который является бесплатным и предназначен для написания сценариев в стиле LUA) - это все, что необходимо для написания и / или изменения сценариев LUA.

Большинство сценариев LUA назначаются или присоединяются к определенным объектам, которые являются частью 3D-игры. По большей части эти объекты представляют собой модели Direct X, которые заполняют 3D-мир. Сценарий Lua прикрепляется как свойство каждой сущности перед запуском игры. Иногда это сценарии по умолчанию, которые ничего не делают, в то время как другие сценарии могут оказывать очень глубокое влияние на объект, к которому он привязан, или на ход игры.

Ход игры в игре
3D-среда, в которой будет проходить игра, была заполнена десятками объектов и персонажей. К каждой сущности и каждому персонажу прикреплен скрипт LUA. Эти скрипты могут быть прикреплены к объекту через файл "FPE", или скрипты могут быть изменены в редакторе свойств GameGuru.

Частично функция игрового движка заключается в организации и запуске этих сценариев LUA, что в конечном итоге составляет основную часть игрового процесса. На языке программистов это называется;
"Цикл выполнения". Как только все будет на месте и заработает, игра начнется. Одним из процессов движка является быстрый просмотр каждого сценария LUA. Этот процесс продолжается от одного скрипта к другому, повторяется (зацикливается) снова и снова с очень высокой скоростью. Циклическое использование скриптов LUA плюс интеграция команд, поступающих с мыши и клавиатуры (например, двигаться вперед, смотреть влево и т.д.), Представляет собой большую часть процесса игры.

Сценарии для статических объектов (например, зданий, которые не двигаются, или припаркованных автомобилей и т. Д.) Ничего не делают, И их сценарии LUA практически игнорируются, В то время как другие сценарии могут предоставлять движку команды, основанные на каком-либо аспекте игры (обычно связанные с объектом или персонажем, которым является сценарий тоже прилагается)

TID-БИТ: в GameGuru есть два типа объектов: статические и нестатические. Для того чтобы скрипт мог работать, объект, к которому он присоединен, должен быть нестатическим. Это не означает, что объект будет двигаться. Например, я мог бы прикрепить скрипт LUA к зданию, который выдает экранную подсказку (), предоставляющую текущие координаты XYZ игрока. Нет намерения перемещать здание, но для того, чтобы скрипт работал, здание должно быть настроено как нестатичное. Это тоже можно сделать через файл FPE или с помощью редактора свойств.

Цикл продолжается
В зависимости от этих условий скрипт либо выдает команду (команды), либо нет. Когда вы закончите, этот сценарий на данный момент завершается. Через несколько микросекунд игровой цикл возвращается на круги своя, и в зависимости от любых изменений условий игры с момента последнего раунда, сценарий снова запускается, выдавая или не выдавая команды, и все снова заканчивается. Процесс зацикливания продолжается до тех пор, пока игра не закончится. Таким образом, скрипт LUA просматривается и запускается движком GameGuru тысячи раз в секунду.

Именно эта циклическая среда предоставляет сценаристу временную и косвенную информацию, используемую сценарием для принятия решения о том, как и когда выдавать команду или запрос движку. (перемещение транспортного средства, местоположение игрока, взрыв и т. Д.)
GameGuru и LUA - жесткие и быстрые правила
Скрипты и функции
Большинство скриптов имеют форму “Функций”. Функция - это обычная практика программирования. Функция представляет собой структурированную часть кодирования. Внутри функции заключена кодировка, которая заставляет скрипт работать. Один скрипт LUA может содержать множество функций, но в 99% случаев есть только две функции;

1) Function name_init(e)
Эта функция "init" используется в самом начале игры, когда движок сортирует сценарии LUA, которые он будет запускать (цикл). Это также возможность для сценариста установить специальные значения, которые остальная часть скрипта (и другие скрипты) могут использовать во время реальной игры.

2) Function name_main(e)
Функция “main” предоставляет код, который будет повторяться во время игры.

TID-БИТ: В GameGuru каждый скрипт ДОЛЖЕН включать функции “init” и “main” (есть некоторые скрипты, которым не нужны эти базовые настройки функций, о чем мы поговорим позже). Имя сценария LUA должно В точности совпадать с именем, используемым в обеих обязательных функциях;

Имя файла ... name.lua (запомнить все строчные буквы)

Function name_init(e)
end

Function name_main(e)
end


Итак, ты меня поймал

Там я снова добавляю кое-что из этого кодирования. Здесь следует отметить две вещи;

1) Ваше знакомство с буквой “e”. Не волнуйтесь, буква "e" относится к "Индексу сущности". Это универсальное значение, присваиваемое и используемое движком для идентификации рассматриваемой сущности в скрипте. Вам не нужно знать, что такое буква “е”, вам просто нужно расставить ее в нужных местах, чтобы все работало гладко.

2) “end”. Каждая функция должна иметь команду “end”. На этом функция завершается и движок переходит к следующему скрипту в процессе цикла. В LUA вы найдете "end", который будет и другом, и создателем проблем. LUA использует множество операторов "if / then" (условных), и для каждого оператора if / then также требуется команда “end". Нередко иметь скрипт с десятками команд “end”. По мере изучения LUA важно научиться правильно размещать команды “end”.



Давайте подумаем о простой функции
У вас есть объект со скриптом Lua. Игрок движется к этой сущности. Каждый раз, когда сценарий зацикливается, простое математическое уравнение определяет, насколько далеко игрок находится от объекта. Когда игрок подходит ближе, почти волшебным образом на экране появляется сообщение "Вы прибыли".

Внутри основной функции этого скрипта находится последовательность кодирования, подобная этой..

Скрипт "главного дома"
Function house1_init -- требуется, но в этом случае ничего не делает end Function house1_main(e) PlayerDist = GetPlayerDistance(e) - эта строка вызывает другую функцию if PlayerDist < 100 then Prompt(“You Have Arrived”) end end

TID-БИТ: в коде LUA любой текст, перед которым стоит -- (два тире), называется примечанием. Там есть замечания для сценариста, чтобы вы могли "вспомнить, что, черт возьми, вы делали два месяца назад". Во время работы замечания игнорируются. Давайте рассмотрим вышеприведенную функцию шаг за шагом.

Сначала мы настраиваем функцию с именем, которое совпадает с именем сценария Lua (house1.lua), который привязан к определенному объекту (представленному (e)). Обратите внимание на две команды “end", одну для оператора if / then, а другую для закрытия основной функции.

Во-вторых, скрипт вызывает другую функцию с именем; GetPlayerDistance(e) . Эта функция находится в другом скрипте, но при необходимости ее можно вызвать из любого скрипта в игре.

То, что возвращает внешняя функция “GetPlayerDistance(e)”, - это значение, которое теперь представлено переменной PlayerDist. (Чуть позже мы обсудим секретное расположение этой и других распространенных функций.)

Затем мы подвергаем это расстояние проверке, чтобы увидеть, достаточно ли Игрок близок к объекту, чтобы получить наше Приглашение. "ЕСЛИ" значение PlayerDist меньше (<) 100 единиц, тогда отобразится подсказка. Однако, если значение PlayerDist больше 100, функция завершается, и игровой цикл продолжается. Когда это произойдет вновь, и игрок будет находится за пределами расстояния в 100 единиц, вам не будет показано сообщение! Если игрок переместиться на расстояние 100 единиц, появиться сообщение. Если он выйдет из этой области, сообщение исчезнет.
"Некоторые скрипты LUA отличаются"
В папке GameGuru Scriptbank находится скрипт под названием “global.lua”. Этот скрипт не привязан к объекту и служит центральным хранилищем LUA для объявления переменных, в частности “Глобальных переменных”, табличных переменных (name = {} set-up a table), а также обеспечивает централизованный дом для десятков “общих функций”, таких как Функция GetPlayerDistance(e). Эти общие функции представляют взаимодействие между скриптом и Движком.

Именно через этот глобальный скрипт находится большинство подключений, которые позволяют скриптам LUA управлять игрой, отправляя команды и значения одной из внешних общих функций в global.lua. Функция подсказки, например, выводит подсказку на экран. Фактическая печать сообщения выполняется движком GameGuru, но триггер для отображения приглашения и отображаемого сообщения предоставляются скриптом LUA. Командная строка LUA ("Привет, это приглашение") вызывает функцию global.lua Prompt(), и движок отображает ваш текст.

Сценарист может создать и включить свой собственный "myglobal.lua file в дополнение к global.lua file. Этот скрипт может объявлять другие глобальные переменные и общие функции, специфичные для вашей игры. С помощью этих инструментов можно создавать сложные системы скриптов, которые сделают ваш игровой процесс сложным и приятным.
Пример скрипта LUA
Вот скрипт LUA, который отображает приглашение, в котором указаны местоположения игрока по X, Y, Z. Поскольку у игрока нет собственного скрипта, этот скрипт привязан к другому объекту в 3D-среде, скажем, к зданию.

-- Скрипт для отображения текущего местоположения игрока function aaplayerxyzprompt_init(e) end function aaplayerxyzprompt_main(e) x1=math.floor (g_PlayerPosX) y1=math.floor (g_PlayerPosY) z1=math.floor (g_PlayerPosZ) Prompt("X= "..x1.." Y= "..y1.." Z= "..z1) end

Вскоре мы рассмотрим этот сценарий шаг за шагом, но давайте сначала посмотрим на процесс вложения.

Файловая система GameGuru

Как и многие программы, GameGuru имеет файловую систему, специфичную для движка. Эти файлы организованы и названы таким образом, и размещены в определенном месте, чтобы движок мог найти то, что ему нужно. Эту файловую систему можно найти в папке с программой, в которой вы установили GameGuru. Это папка под названием “Files”.

Внутри папки "Files" находится группа папок "bank", в которых хранятся файлы разных типов. "scriptbank" содержит сценарии LUA. В банке карт хранятся файлы карт (уровней). В "entitybank" хранятся модели и текстуры, доступные для загрузки в вашу 3D-среду.

Для того, чтобы объект был готов к загрузке, конкретному объекту требуется минимум 3 файла для успешной загрузки и отображения.

1) Файл с точкой X (.x), который содержит фактическую сетку модели. Train.x

2) Файл текстуры в формате “_D.dds”. Train_D.dds.
(пожалуйста, обратите внимание на формат _D.dds, так как это важно для GameGuru)

3) Файл FPE Train.fpe.

В файле FPE объясняется
Для каждой сущности, которая в конечном итоге окажется в вашей 3D-среде, требуется файл FPE. Если вы заглянете в папку entitybank для определенного объекта, вы найдете файл FPE для каждого объекта. Как и сценарий LUA, FPE представляет собой простой текстовый файл, сохраненный с помощью формы .fpe.

Файл FPE представляет собой группу начальных инструкций, которые сообщают движку GameGuru, как настроить вашу сущность в 3D-среде. Вот типичный файл FPE.

;header
desc = DodgeChargerC2

;visualinfo
textured = LPVcar2_D.dds
effect = effectbank\GameGuru\entity_basic.fx
castshadow = 1

;
model = DodgeChargerC2.x
offx = 0
offy = 0
offz = 0
rotx = 0
roty = 0
rotz = 0
defaultstatic = 1
materialindex = 3
collisionmode = 1

;statistics
strength = 25
explodable = 0
debrisshape = 0

;ai
aiinit = appear.lua
aimain = default.lua
aidestroy = disappear.lua

;spawn
spawnmax = 0
spawndelay = 0
spawnqty = 0

В файле FPE можно использовать множество дополнительных настроек команд. А пока обратите внимание на следующее...

1) Использование строки desc также должно быть именем файла FPE. Важно, чтобы имя файла FPE совпадало с именем файла model.x, в данном случае DodgeChargerC2, таким же, как DodgeChargerC2(.x). (файл FPE не подвержен смещению нижнего регистра скриптов LUA в том, что касается именования.)

2) Имя файла текстуры с использованием формы _D.dds. Обратите внимание, что файл текстуры, файл FPE и файл .X должны находиться в одной папке внутри папки "entitybank", чтобы загрузить объект в среду.

3) В разделе “ai” обратите внимание на "aimain script =". Это сценарий LUA, который может быть прикреплен к объекту в файле FPE. Также обратите внимание, что к объекту также можно прикрепить определенный скрипт с помощью редактора свойств в GameGuru. (будет обсуждаться в ближайшее время)

4) Обратите внимание на строку “effect”... entity_basic.fx. Это тоже тип скрипта, который определяет тип загружаемой сущности и то, как GameGuru будет работать с этой сущностью. Существует два таких скрипта: entity_basic.fx и character_basic.fx.

5) Обратите внимание на “defaultstatic=:”. Помните, раньше мы обсуждали статические и нестатические сущности. Это где 1 = статический режим, а 0 = не статический режим. Это тоже можно изменить в редакторе свойств.


Хорошо, давайте вернемся к подсказке LUA-скрипта

1 -- Скрипт для отображения текущего местоположения игрока 2 function aaplayerxyzprompt_init(e) 3 end 4 function aaplayerxyzprompt_main(e) 5 x1=math.floor (g_PlayerPosX) 6 y1=math.floor (g_PlayerPosY) 7 z1=math.floor (g_PlayerPosZ) 8 Prompt("X= "..x1.." Y= "..y1.." Z= "..z1) 9 end

ОК строка за строкой

1) Просто замечание, чтобы я знал, о чем сценарий (не обязательно)

2) Устанавливает функцию “init” (обсуждалось ранее).

3) Команда end для закрытия функции init

4) Устанавливает основную функцию, которая запускается каждый раз, когда скрипт зацикливается движком.

5) Устанавливает значение местоположения игроков X, ссылаясь на глобальную переменную (устанавливается глобальный сценарий lua, обсуждался ранее) (g_PlayerPosX). В этом случае значение хранится в переменной с именем “x1“. Оператор “math.floor” - это вызов библиотеки встроенных команд LUA. Эта команда округляет значения g_PlayerPosX в меньшую сторону. Т.е. если значение местоположения игрока x равно 2367.8904, команда math.floor округляет число в меньшую сторону до 2367. Целые числа легче читать на экране, чем числа двойной точности.

6 и 7) это то же самое, что и строка 5, используемая для установления значений для Y и Z (y1 и z1). Эти три числа представляют точное местоположение игрока в 3D-среде, которое в GameGuru составляет около 51000 x 51000 единиц (x & z). Y - это расположение вверх / вниз.

8) Эта строка отображает подсказку() на мониторе. В этом случае дисплей будет выглядеть примерно так, проходя по нижнему центру экрана.

X= 21563 Y = 125 Z = 15674

Эти значения могут использоваться для проведения измерений в среде или могут использоваться в других сценариях для определения конкретного местоположения.

9) эта команда “end” для функции _main. чтобы сценарий закончился.

TID-БИТ: быстрое отображение значений длится недолго, и это отображение обновляется каждый раз при циклическом запуске скрипта. Таким образом, если я перемещаюсь, значения меняются, чтобы представлять мою новую позицию. Существуют и другие команды, связанные с подсказками, такие как PromptDuration(). Эта команда отображает приглашение, но в течение определенного промежутка времени.
Файловая система GameGuru
Как и многие программы, GameGuru имеет файловую систему, специфичную для движка. Эти файлы организованы и названы таким образом, и размещены в определенном месте, чтобы движок мог найти то, что ему нужно. Эту файловую систему можно найти в папке с программой, в которой вы установили GameGuru. Это папка под названием “Files”.

Внутри папки "Files" находится группа папок "Bank", в которых хранятся файлы разных типов. Скриптовый Bank содержит сценарии LUA. В "mapbank" хранятся файлы карт (уровней). В "entitybank" хранятся модели и текстуры, доступные для загрузки в вашу 3D-среду.

Для того, чтобы объект был готов к загрузке, конкретному объекту требуется минимум 4 файла для успешной загрузки и отображения. Приведенный ниже пример относится к самому первому объекту, который, если он поставляется с GameGuru, является Бочкой (с кислотой).

1) Файл dot X (.x), который содержит фактическую сетку модели. Например. barrel.x

2) Файл текстуры в формате “_D.dds”. E, g, barrell_acid_D.dds
(пожалуйста, обратите внимание на формат _D.dds, поскольку это важно для GameGuru)

3) Файл .BMP, это изображение в редакторе. Например, Barrel (Acid).bmp

4) Файл FPE, например, Barrel (Acid).fpe. Это ДОЛЖНО иметь то же имя, что и BMP.

В файле FPE объясняется
Для каждой сущности, которая в конечном итоге окажется в вашей 3D-среде, требуется файл FPE. Если вы заглянете в папку entitybank для конкретного объекта, вы найдете файл FPE для каждого объекта. Как и сценарий LUA, FPE представляет собой простой текстовый файл, сохраненный с помощью формы .fpe.

Файл FPE представляет собой группу начальных инструкций, которые сообщают движку GameGuru, как настроить вашу сущность в 3D-среде. Вот типичный файл FPE.

;header
desc = Barrel (Acid)

;visualinfo
textured = barrell_acid_D.dds
effect = effectbank\reloaded\entity_basic.fx
castshadow = 0

;orientation
model = barrel.x
offx = 0
offy = 0
offz = 0
rotx = 0
roty = 0
rotz = 0
defaultstatic = 0
materialindex = 2

;statistics
strength = 25
explodable = 0
debrisshape = 1

;ai
aiinit = appear.lua
aimain = default.lua
aidestroy = disappear.lua

;spawn
spawnmax = 0
spawndelay = 0
spawnqty = 0

В файле FPE можно использовать множество дополнительных настроек команд. А пока обратите внимание на следующее...

1) Использование строки "desc" также должно быть именем файла FPE. (файл FPE не подвержен смещению нижнего регистра скриптов LUA в том, что касается именования.). Это также имя, которое будет присвоено сущности в редакторе.

2) Имя файла текстуры с использованием формы _D.dds. Обратите внимание, что файл текстуры, файл FPE и файл .X должны находиться в одной папке внутри папки "entitybank", чтобы загрузить объект в среду.

3) В разделе “ai” обратите внимание на aimain=. Это сценарий LUA, который можно прикрепить к объекту в файле FPE. Также обратите внимание, что к объекту также можно прикрепить определенный скрипт с помощью редактора свойств в GameGuru. (будет обсуждаться в ближайшее время)

4) Обратите внимание на строку “effect”... entity_basic.fx. Это файл шейдера, который определяет эффект, который будет a, и то, как GameGuru будет работать с этим объектом. Существует два таких скрипта; entity_basic.fx и character_basic.fx.

5) Обратите внимание на "defaultstatic=:". Помните, раньше мы обсуждали статические и не статические объекты. Здесь 1 = статический режим, а 0 = не статический режим. Это тоже можно изменить в редакторе свойств.


Хорошо, давайте вернемся к подсказке скрипта LUA

1 -- Скрипт для отображения текущего местоположения игрока 2 function aaplayerxyzprompt_init(e) 3 end 4 function aaplayerxyzprompt_main(e) 5 x1=math.floor (g_PlayerPosX) 6 y1=math.floor (g_PlayerPosY) 7 z1=math.floor (g_PlayerPosZ) 8 Prompt("X= "..x1.." Y= "..y1.." Z= "..z1) 9 end

ОК строка за строкой

1) Просто замечание, чтобы я знал, о чем сценарий (не обязательно)

2) Устанавливает функцию “init” (обсуждалось ранее).

3) Команда end для закрытия функции init

4) Устанавливает основную функцию, которая запускается каждый раз, когда скрипт зацикливается движком.

5) Устанавливает значение местоположения игроков X, ссылаясь на глобальную переменную (устанавливается глобальный сценарий lua, обсуждался ранее) (g_PlayerPosX). В этом случае значение хранится в переменной с именем “x1“. Оператор “math.floor” - это вызов библиотеки встроенных команд LUA. Эта команда округляет значения g_PlayerPosX в меньшую сторону. Т.е. если значение местоположения игрока x равно 2367.8904, команда math.floor округляет число в меньшую сторону до 2367. Целые числа легче читать на экране, чем числа двойной точности.

6 и 7) это то же самое, что и строка 5, используемая для установления значений для Y и Z (y1 и z1). Эти три числа представляют точное местоположение игрока в 3D-среде, которое в GameGuru составляет около 51000 x 51000 единиц (x & z). Y - это расположение вверх / вниз.

8) Эта строка отображает подсказку() на мониторе. В этом случае дисплей будет выглядеть примерно так, проходя по нижнему центру экрана.

X= 21563 Y = 125 Z = 15674

Эти значения могут использоваться для проведения измерений в среде или могут использоваться в других сценариях для определения конкретного местоположения.

9) эта команда “end” для функции _main. чтобы сценарий закончился.

TID-БИТ: быстрое отображение значений длится недолго, и это отображение обновляется каждый раз при циклическом запуске скрипта. Таким образом, если я перемещаюсь, значения меняются, чтобы представлять мою новую позицию. Существуют и другие команды, связанные с подсказками, такие как PromptDuration(). Эта команда отображает приглашение, но в течение определенного промежутка времени.

Вот где вопрос о статических и не статических сущностях становится важным. Если я прикреплю этот скрипт к “статической” сущности, во время игры ничего не произойдет. Таким образом, я должен убедиться, что объект не статичен. Здесь я снова могу изменить значение "defaultstatic" в FPE с 1 на 0. Ноль означает, что объект рассматривается GameGuru как не статический, и, таким образом, при запуске игры отображение приглашения работает должным образом.
Ограничения на активацию скрипта
TID-БИТ: Итак, у вас запущен скрипт и есть ваш дисплей. Вы продолжаете перемещаться в своей 3D-среде, и, как и ожидалось, значения меняются по мере вашего перемещения. Затем внезапно подсказка исчезает. Почему?

В GameGuru встроена система, которая ограничивает действие сценариев, если игрок находится на расстоянии более 3000 единиц от объекта. Это гарантирует, что сценарии, которые не нужно запускать, будут приостановлены, что, в свою очередь, повышает производительность.

Итак, в приведенном выше примере, если ваш сценарий отображения превышает 3000 единиц в любом направлении, отображение приглашения теряется.

Однако существует другой параметр, который может переопределить это ограничение, сохраняя сценарий всегда включенным, независимо от расстояния. Мы обсудим эту настройку позже, когда заглянем в таинственный редактор свойств внутри редактора GameGuru.
Добавление скрипта к объекту
Редактор свойств.

Вот типичный редактор для GameGuru. Здесь вы добавляете объекты и формируете свою 3D-среду. Я разместил бочку на местности, а также начальный маркер (зеленый), который определяет место, где начнется игра при запуске. Вы можете найти более подробную информацию об этом в других наших руководствах.

Если щелкнуть левой кнопкой мыши по объекту, отобразится набор вариантов редактирования (виджет). Один из вариантов - “PROPERTIES” (“СВОЙСТВА”)

Когда вы выбираете свойства, отображение экрана меняется (см. Снимок экрана ниже). Слева находятся свойства для этой сущности. Убедитесь, что для статического режима установлено значение (Always Active=) NO, что выбран правильный скрипт LUA, и если вы хотите, чтобы скрипт всегда выполнялся, для свойства Always Active установлено значение YES.

Наконец, не забудьте нажать Apply Changes (Применить изменения), чтобы ваши изменения были установлены для объекта.
Создаем ваш первый скрипт
Для всех вас, начинающих сценаристов, мы сейчас рассмотрим все команды LUA, уникальные для GameGuru

Вы можете найти базовые скрипты, которые дают сценаристам представление о макете. Скрипты поставляются вместе с GameGuru и могут быть найдены в вашей папке "Scriptbank".

В приведенном ниже коде следует отметить четыре важные вещи:-

1) Скрипт должен быть сохранен под тем же именем, что и ссылка на него в функции скрипта. В приведенном ниже примере это будет health.lua

2) Скрипт может содержать примечания (слова или предложения, которые не являются скриптовыми командами), и они должны использовать префикс --

3) Все скрипты ДОЛЖНЫ начинаться с

function NAME_init(e)
end


А заканчиваться на

function health_init(e)
end


4) Все основные функции скрипта должны начинаться и заканчиваться

function NAME_main(e)
end


В приведенном ниже примере это

function health_main(e)
немного кода
end

-- Сценарий LUA - перед каждой функцией и глобальным элементом указывается имя в нижнем регистре script + '_main' -- Игрок встает в триггер "здоровья" function health_init(e) end function health_main(e) PlayerDX = g_Entity[e]['x'] - g_PlayerPosX PlayerDY = g_Entity[e]['y'] - g_PlayerPosY PlayerDZ = g_Entity[e]['z'] - g_PlayerPosZ PlayerDist=math.sqrt(math.abs(PlayerDX*PlayerDX)+math.abs(PlayerDY*PlayerDY)+math.abs (PlayerDZ*PlayerDZ)) if PlayerDist < 80 then PlaySound(e,0) AddPlayerHealth(e) Destroy(e) end end

Еще одним очень полезным дополнением к сценариям LUA является новый суффикс _exit.

"Функция _exit в необязательной процедуре, которую можно добавить в любой скрипт. Когда объект уничтожается в игре и проходит процесс удаления из игры, будет вызвана функция _exit для этого объекта, если он существует. Это дает возможность создать индивидуальный стиль для вашего персонажа, предмета и т. Д., Чтобы выглядеть стильно. Возможно, вы хотели бы воспроизвести пользовательский звук смерти, нанести урон игроку, если он находится поблизости и т. Д. ”

Наконец, вот список всех текущих команд, мы будем обновлять его по мере расширения сценариев.
Команды LUA - глобальные переменные GameGuru
Глобальная переменная в GameGuru - это быстрый способ возврата информации об объектах или входных данных во время игры. Они могут быть очень мощными и открывают доступ ко множеству внутренних данных, которые могут превратить отличный сценарий в потрясающий.

Глобалы игроков

g_PlayerPosX - возвращает позиции игроков X в 3D-мире
g_PlayerPosY - возвращает игрокам Y позицию в 3D мире
g_PlayerPosZ - возвращает положение игроков Z в 3D-мире
g_PlayerAngX - возвращает игрокам угол /поворот X
g_PlayerAngY - возвращает игрокам угол /поворот Y
g_PlayerAngZ - возвращает игрокам угол /поворот Z
g_PlayerObjNo - возвращает ObjNo, присвоенный игроку, в основном для внутреннего использования.
g_PlayerHealth - возвращает текущее здоровье игроков
g_PlayerLives - возвращает текущее количество жизней игрока
g_PlayerFlashlight - возвращает значение true, если фонарик игрока активен
g_PlayerGunCount - возвращает количество оружия, которое в данный момент находится у игрока
g_PlayerGunID - возвращает идентификатор текущего использования оружия игроком
g_PlayerThirdPerson - возвращает значение true, если игрок изображен от третьего лица

Таймеры

g_Time - возвращает фактически сыгранное время с момента запуска тестовой или автономной игры, не включая время приостановки игры.
g_TimeElapsed - возвращает время, прошедшее в текущем кадре

Ввод

g_KeyPressE - возвращает значение true, если была нажата клавиша E
g_Scancode - возвращает текущий scancode
g_InKey = Возвращает true, если нажата клавиша X, например, g_InKey(S) вернет true, если нажата клавиша S

Сущности

g_Entity - возвращает номер объекта

Мультиплеер и кооператив

mp_isServer - возвращает true, если на компьютере размещен
mp_playerNames - возвращает имена игроков MP
mp_playerKills - возвращает количество убийств игроков
mp_playerDeaths - возвращает время, в течение которого игрок был убит
mp_playerConnected - возвращает значение true, если проигрыватель подключен
mp_playerTeam - возвращает команду игроков
mp_isConnectedToSteam - возвращает значение true, если плеер подключен к Steam
mp_gameMode = 0
mp_servertimer - возвращает текущее время сервера
mp_showscores - показывает текущие результаты
mp_teambased - возвращает true, если игра основана на команде
mp_friendlyfireoff - 1 = Разрешен дружественный огонь, 0 = Запрещен дружественный огонь
mp_me = 0;
mp_coop - возвращает значение true, если игра является кооперативной
mp_enemiesLeftToKill - возвращает количество символов, оставшихся для убийства.
Команды LUA - ТЕКСТОВЫЕ
Prompt(str)

Отображает текст (str) в нижней и центральной части экрана

PromptDuration(str,v)

Отображает текст (str) для V миллисекунд в нижней и центральной части экрана.

PromptTextSize(v)

Задает размер приглашения (V) - значение от 1 до 5, где 1 является наименьшим.

PromptLocal(e, str)

Отображает текст (str) в текущем местоположении объектов (e). (e) ссылается на текущую сущность, номер не требуется. Например. PromptLocal(e, "hello")

Text(x,y,size,txt)

Отображает текст (txt) с использованием (size) в относительном положении экрана X, Y, которые имеют значение от 1 до 100. Это процентное соотношение, где 100 - это полная ширина или высота экрана.

TextCenterOnX(x,y,size,txt)

Отображает текст (txt), используя (size), центрированный по относительному положению экрана X, Y, которые имеют значение от 1 до 100. Это процентное соотношение, где 100 - это полная ширина или высота экрана.
Команды LUA - ВИЗУАЛЬНЫЕ ЭФФЕКТЫ
SetFogNearest(v)

Устанавливает близкое расстояние тумана равным (V)

SetFogDistance(v)

Устанавливает близкое к дальнему расстояние тумана на (V)

SetFogRed(v)

Задает значение красного цвета тумана. Этот диапазон составляет 0-255

SetFogGreen(v)

Задает значение зеленого цвета тумана. Это имеет диапазон 0-255

SetFogBlue(v)

Задает значение синего цвета тумана. Этот диапазон составляет 0-255

SetFogIntensity(v)

Задает значение толщины тумана. Это значение имеет диапазон 0-100

SetAmbienceIntensity(v)

Устанавливает интенсивность окружения на V. Это значение имеет диапазон 0-100

SetAmbienceRed(v)

Задает значение красного цвета для общего окружающего освещения. Этот диапазон составляет 0-255

SetAmbienceGreen(v)

Задает значение зеленого цвета для общего окружающего освещения. Это имеет диапазон 0-255

SetAmbienceBlue(v)

Задает значение синего цвета для общего окружающего освещения. Это имеет диапазон 0-255

SetSurfaceRed(v)

Задает значение красного цвета света, наносимого на поверхность объектов. Это имеет диапазон 0-255

SetSurfaceGreen(v)

Задает значение зеленого цвета освещения, применяемого к поверхности объектов. Этот диапазон составляет 0-255

SetSurfaceBlue(v)

Задает значение синего цвета для освещения, применяемого к поверхности объектов. Этот диапазон составляет 0-255

SetPostVignetteRadius(v)

Настраивает радиус эффекта виньетки

SetPostVignetteIntensity(v)

Задает интенсивность эффекта виньетки

SetPostMotionDistance(v)

Установите расстояние, на которое влияет размытие при движении.

SetPostMotionIntensity(v)

Установите интенсивность размытия при движении

SetPostDepthOfFieldDistance(v)

Задает расстояние, на которое применяется глубина резкости

SetPostDepthOfFieldIntensity(v)

Задает глубину резкости
Команды LUA - УПРАВЛЕНИЕ УРОВНЕМ
JumpToLevelIfUsed(e)

Завершает уровень и загружает уровень, определенный в поле entities IfUsed в меню свойств.

JumpToLevel(levelname)

Завершает уровень и загружает уровень, определенный с помощью (levelname)

FinishLevel()

Завершите уровень, показав экран завершения игры
Команды LUA - ГЛОБАЛЬНЫЕ
HideTerrain()

Скрывает HUD экран, идеально подходит для сцен в помещении, где он не используется.

ShowTerrain()

Отображает ранее скрытый HUD.

HideWater()

Скрывает плоскость воды.

ShowWater()

Отображает ранее скрытую водную плоскость.

HideHuds()

Скрывает все экранные изображения,

ShowHuds()

Отображает ранее скрытые изображения.

Управляйте окклюдером с помощью скрипта! Установите значение перекрытия от 0 (выкл.) до 100 (макс.). 10 и ниже для минимального появления
Команды LUA - УПРАВЛЕНИЕ ИГРОКОМ
FreezePlayer()

Заморозьте все движения игрока и поиск мыши

UnFreezePlayer()

Разморозьте проигрыватель и разрешите движение и поиск мышью.

SetPlayerHealth(v)

Установите для здоровья игрока значение (v)

AddPlayerWeapon(e)

Если объект является оружием, назначьте его следующему доступному слоту оружия.

AddPlayerAmmo(e)

Если объект является боеприпасом, назначьте его соответствующему пулу боеприпасов.

AddPlayerHealth(e,v)

Добавьте (v) очков здоровья игроку, как определено значением количества в FPE объекта.

SetPlayerLives(e,v)

Установите жизни игроков равными (v).

RemovePlayerWeapons(e)

Уберите все оружие игрока.

AddPlayerJetPack(e,fuel)

Добавляет игроку способность "реактивный ранец" и устанавливает количество топлива.

HurtPlayer(e,v)

Нанести V урон игроку

SetFlashLightKeyEnabled(V)

V = 1 для разрешения использования фонарика

V = 0 для выключения использования фонарика

SetFlashLight(V)

V = 1 включает фонарик

V = 0 выключает фонарик

SetPlayerWeapons(0)

Отключает оружие игрока

SetPlayerWeapons(1)

Восстанавливает оружие игрока

Вычтите (v) здоровья у игрока.

TransportToIfUsed(e)

Перемещает игрока в местоположение объекта, указанного в поле ifused.
Команды LUA - ЧАСТИЦЫ
StartParticleEmitter(e)

Испускать частицы из сущности - в настоящее время это базовый излучатель.

StopParticleEmitter(e)

Остановите сущность, испускающую частицы.
Команды LUA - УПРАВЛЕНИЕ ОБЪЕКТАМИ - Часть 1
SetEntityHealth(e,v)

Установите для работоспособности объекта значение (v)

StartTimer(e)

Запускает таймер, зависящий от объекта.

GetTimer(e)

Возвращает текущее время сущности.

Destroy(e)

Уничтожает текущую сущность, удаляя ее из текущей игры.

CollisionOn(e)

Включите столкновение объектов (например, для закрытой двери).

CollisionOff(e)

Отключите столкновение объектов (например, для открытой двери).

GravityOff(e)

Отключите гравитацию сущностей.

GravityOn(e)

Включите гравитацию для объекта.

LookAtPlayer(e)

Заставляет сущность повернуться лицом к игроку.

RotateToPlayer(e)

Поворачивает объект лицом к игроку.

RotateToPlayerSlowly(e,v)

Поворачивает объект лицом к игроку со скоростью (v)

Hide(e)

Делает объект невидимым

Show(e)

Делает объект видимым

Spawn(e)

Заставляет сущность появляться, если она не настроена на появление при запуске, за исключением персонажей в многопользовательском режиме

SetActivated(e,v)

Устанавливает объект как активный (v = 1) или неактивный. (v=0)

ActivateIfUsed(e)

Активирует объект, указанный в поле свойств IfUsed.

Collected(e)

Отметьте объект как собранный (например, ключ)

MoveUp(e,v)

Переместите объект вверх и (v) ускорьте

MoveForward(e,v)

Переместите объект вперед и (v) ускорьте

MoveBackward(e,v)

Переместите объект назад и (v) ускорьте

SetPosition(e,x,y,z)

Переместите объект в положение карты x, y, z

ResetPosition(e,x,y,z)

Переместите физическую сущность

SetRotation(e,x,y,z)

Поворачивает объект на угол x, y, z
Команды LUA - УПРАВЛЕНИЕ ОБЪЕКТАМИ - Часть 2
ModulateSpeed(e,v)

Модулируйте скорость всех действий объекта на (v)

RotateX(e,v)

Поверните угол X объекта на (v)

RotateY(e,v)

Поверните угол Y объекта на (v)

RotateZ(e,v)

Поверните угол Z объекта на (v)

Scale(e,v)

Масштабирование объекта до (v) процента

SetAnimation(e)

Установите значение индекса анимации для последующего использования

SetAnimationFrames(a,b)

Установите рамку анимации объекта в диапазоне от (a) до (b)

PlayAnimation(e)

Воспроизведите текущий диапазон анимации один раз.

LoopAnimation(e)

Зациклите текущий диапазон анимации.

StopAnimation(e)

Остановить все анимации для текущего объекта

SetAnimationSpeed(e,v)

Установите скорость анимации объекта

SetAnimationFrame(e,v)

Установите для рамки анимации объектов значение (v)

GetAnimationFrame(e)

Получить номер кадра анимации от объекта

SpawnIfUsed(e)

Порождает объект, имя которого указано в поле IfUsed текущего объекта
Команды LUA - СКРИПТЫ
Include ("xxx")

Используйте внутри функции инициализации, чтобы убедиться, что вызываемый скрипт (xxx) предварительно загружен

SwitchScript(e,str)

Переключите скрипт сущностей на скрипт с именем (str)
Команды LUA - УПРАВЛЕНИЕ ПЕРСОНАЖАМИ и искусственным интеллектом
CharacterControlUnarmed(e)

Перевести персонажа в безоружное состояние

CharacterControlLimbo(e)

Перевод персонажа в состояние неопределенности

CharacterControlArmed(e)

Перевести персонажа в вооруженное состояние

CharacterControlFidget(e)

Переключите персонажа в состояние непоседы

CharacterControlDucked(e)

Перевести персонажа в согнутое состояние

CharacterControlStand(e)

Перевести персонажа в стоячее состояние

SetCharacterToWalk(e)

Установите для персонажа режим ходьбы при перемещении

SetCharacterToRun(e)

Установите для персонажа режим бега при перемещении

SetCharacterToStrafeLeft(e)

Установите для персонажа стрейф влево

SetCharacterToStrafeRight(e)

Установите для персонажа стрейф вправо

SetCharacterVisionDelay(e,v)

Установите скорость, с которой сущность будет реагировать, увидев игрока

SetAttachmentVisible(e,1)

1 делает видимым вложение объектов (например, их оружие), 0 отключает его

LockCharacterPosition(e,v)

Зафиксируйте персонажа на месте. Параметр зарезервирован для использования в будущем.

UnlockCharacterPosition(e,v)

Заблокируйте персонажа. Параметр зарезервирован для использования в будущем.

FreezeAI()

Заморозить весь ИИ

UnFreezeAI()

Разморозить весь ИИ

FireWeapon(e)

Если у персонажа есть оружие, стреляйте из него. Если нет, запустите атаку ближнего боя.
Команды LUA - ЗОНЫ
Checkpoint(e)

Запустите проигрыватель для записи контрольной точки для последующего использования

GetPlayerInZone(e)

Возвращает значение 1, если игрок находится внутри зоны объекта зоны

WinZone(e)

Активируйте игрока, чтобы выиграть этот уровень и перейти на уровень, указанный в свойстве IfUsed.
Команды LUA - ЗВУК и МУЗЫКА
PlaySound(e,v)

Воспроизвести звук, сохраненный в указанном слоте (v), как определено в свойствах объекта. (v) может быть 0 или 1.

PlaySoundIfSilent(e,v) - воспроизводит звук, если ОН в данный момент НЕ воспроизводится.

Воспроизведите звук, сохраненный в указанном слоте (v), как определено в свойствах объекта, если он не воспроизводится, который может быть 0 или 1.

PlayNon3DSound(e,v)

Воспроизведите звук, сохраненный в указанном слоте (v), как определено в свойствах объекта, игнорируя местоположение и расстояние, которые могут быть 0 или 1.

LoopSound(e,v)

Воспроизведение и зацикливание звука, сохраненного в указанном слоте, как определено в свойствах объекта, которые могут быть 0 или 1.

StopSound(e,v)

Остановите воспроизводимый звук, который может быть 0 или 1.

SetSound(e,v)

Будет использоваться перед такими функциями, как SetSoundVolume(vol), которые не определяют используемый звук

SetSoundSpeed(freq)

Установите текущую частоту звука

SetSoundVolume(vol)

Установите установленную в данный момент громкость звука (1 – 100)

SetCharacterSound(e,str)

Установите звук символа на (str), как определено в папке audiobank

PlayCharacterSound(e,str)

Воспроизводите звук персонажа (str), как определено в папке audiobank

PlayCombatMusic(playTime,fadeTime)

Воспроизводит боевую музыку, как определено в audiobank

PlayFinalAssaultMusic(fadeTime)

Воспроизводит музыку нападения, как определено в audiobank

DisableMusicReset(v)

Вызовите при запуске игры, чтобы приостановить обычное воспроизведение музыки, установив (v) на 1.
Команды LUA - СВЕТ
HideLight(e)

Скрыть источник света, если объект является динамическим источником света. Не влияет на статическое освещение.

ShowLight(e)

Показывать источник света, если объект является динамическим источником света. Не влияет на статическое освещение.
Команды LUA - ИЗОБРАЖЕНИЯ
LoadImages(str,v)

Укажите изображение внутри "scriptbank \ images \", чтобы загружать изображения в слот (v) и далее. Изображения должны иметь имена 000,001,002 и т.д.

SetImagePosition(x,y)

Установите положение X и Y того места, где должно быть нарисовано изображение

ShowImage(i)

Показать изображение

HideImage(i)

Скрыть изображение

SetImageAlignment(i)

Используйте 0 для позиционирования изображения с помощью центральной точки доступа, 1 - верхняя левая точка доступа

Panel(x,y,x2,y2)

Показать изображение от X, Y до X2, Y2
Команды LUA - СПРАЙТЫ
Спрайты - это изображения, которые можно размещать, поворачивать, изменять размер и манипулировать ими различными способами. Этот мощный набор команд позволяет кодировать многие расширенные функции. Спрайты совместно используют файлы изображений с помощью команд image.

LoadImage

myImage = LoadImage ( "MyFolder \\ myImage.png" ) - в любом месте папки GG Files (однако лучше всего поместить в папку scriptbank images для создания резервных копий)

CreateSprite

Создать спрайт

DeleteSprite

DeleteSprite (mySprite) - удалить спрайт из памяти

SetSpritePosition

SetSpritePosition (mysprite,x,y) - позиции спрайтов основаны на процентах, поэтому SetSpritePosition (mysprite,50,50) расположит спрайт в центре экрана.

SetSpriteSize

SetSpriteSize(mySprite,sizeX,sizeZ) - передача - 1 в качестве одного из параметров гарантирует, что спрайт сохраняет свое соотношение сторон

SetSpriteDepth

SetSpriteDepth(mySprite,10) (0 - передний, 100 - задний) - задает порядок, в котором будет отображаться спрайт.

SetSpriteColor

SetSpriteColor (mySprite,red,green,blue,alpha) - устанавливает значения RGB и alpha для спрайтов, каждое значение имеет диапазон 0-255.

SetSpriteAngle

SetSpriteAngle (mySprite,180) - задает поворот спрайта в градусах.

SetSpriteOffset

SetSpriteOffset (mySprite,32,32) (будет центром изображения размером 64x64, присвоенного спрайту)

SetSpriteImage

SetSpriteImage (mySprite,myImage) - присваивает новое изображение ранее созданному спрайту.
Команды LUA - МНОГОПОЛЬЗОВАТЕЛЬСКИЕ
MP_IsServer()

При разработке многопользовательского скрипта вам потребуется код как для клиента, так и для сервера. Некоторые из них могут быть общими (например, функция отображения результатов), но некоторые должны быть только серверными или клиентскими. Эта команда позволяет вам сделать именно это. возвращаемое значение 1 указывает на то, что этот скрипт запущен на сервере, 0 означает, что это клиентская машина.

SetMultiplayerGameMode(mode)

Игровой цикл обычно состоит из нескольких режимов. Самым простым примером может быть:

1. Запускаем игру, устанавливаем 0 очков, затем переходим в режим 2.
2. Сама основная игра продолжается до тех пор, пока кто-то не посчитает, что он выиграл, затем переключается на 3
3. Отображает итоговые результаты, останавливает игру и ведет обратный отсчет до следующей игры. возвращаемся к пункту 1

Сервер отвечает за настройки этих режимов и делает это с помощью этой команды, чтобы сообщить всем клиентам о режиме. Для сервера разумно сохранять переменную с режимом локально, чтобы не потерять отслеживание самого режима.

GetMultiplayerGameMode(mode)

Эта команда позволяет клиентам проверить, в каком режиме в данный момент находится игра. Это будет установлено сервером ранее через SetMultiplayerGameMode(mode)

SetServerTimer(t)

Позволяет серверу установить таймер (возможно, для запуска окончания игры). Это может быть получено клиентами с помощью GetServerTimer().

GetServerTimer(t)

Возвращает время, в течение которого таймер был установлен сервером с помощью SetServerTimer()

GetServerTimerPassed()

Возвращает, сколько времени прошло с тех пор, как сервер впервые установил таймер.

ServerRespawnAll()

Эта команда является дополнением к ServerEndPlay() и позволит продолжить игру, сначала запустив всех для появления. Это будет использовано для начала нового раунда после завершения предыдущего раунда.

ServerEndPlay()

Когда игра выиграна, эта команда может быть использована для остановки любого дальнейшего игрового процесса. Камера переключится на просмотр текущего уровня сверху вниз и покажет идеальное время, чтобы показать результаты и, возможно, установить обратный отсчет до следующего раунда. Если кто-то умрет, он снова появится в still, но затем переключится на вид сверху вниз вместе со всеми остальными.

GetShowScores()

Если игрок нажимает tab в игре, чтобы показать результаты, GetShowScores() вернет 1. После небольшой задержки, когда игрок нажимает tab, значение возвращается к 0. Используйте эту команду, когда игра в самом разгаре, чтобы показать текущий результат всех игр.

-- Отображение текущего табло if GetShowScores() == 1 then multiplayer_firstto10_results() end

SetServerKillsToWin(v)

Эта команда позволяет скрипту LUA сообщать игровому движку, сколько убийств необходимо для победы (если таковые имеются). Это необходимо, чтобы движок игры знал, когда нужно прекратить обновление убийств в матче. Например, когда кто-то выиграл игру, любые убийства после этого не должны учитываться. Эта команда включает эту функциональность.

Обычно вы устанавливаете количество убийств, необходимых для победы, внутри скрипта lua, чтобы сервер знал, сколько убийств потребуется для победы:

GAME_KILLS_TO_WIN = 10

Затем сервер может информировать всех остальных о необходимых убийствах, чтобы каждая версия игры знала, когда прекратить подсчет убийств:

SetServerKillsToWin(GAME_KILLS_TO_WIN)
Как помощь автору?
Перевел, исправил ошибки машинного перевода и сверстал это руководство

Если руководство вам понравилось, есть вопросы или вы нашли какие-то ошибки. Пишите под этим руководством и у меня на профиле:

Всем выражу благодарность и отвечу.

Так же вы можете присоединиться к нашему каналу в Discord для связи и взаимопомощи:
- https://discord.gg/4KE2Km7
4 Kommentare
tisheme  [Autor] 14. Nov. 2023 um 12:59 
Такую не встречал в GameGuru Classic, может на форумах кто писал.
M.A.S.Y.A. 1. Juni 2023 um 10:40 
А есть команда, чтобы объект притягивал к себе игроков условно?
tisheme  [Autor] 28. Nov. 2022 um 6:17 
Спасибо и тебе! :steamthumbsup:
WetPanties 28. Nov. 2022 um 6:14 
Сексуально, и очень познавательно. Спасибо!