hj-s | 01.10.2011, 19:35 | # 1 |
Made In Game
Активист
Посты: 818
| Maniascript Documentation by konte Прим. переводчика:
Я написал эту документацию бета-стажёром на форуме, я не думал, что другие люди увидят это. В общем здесь документация. Я всё ещё работаю над ней время от времени, но не могу обещать, что закончу её полностью. Но я попытаюсь.
Общее. General Цикл while (true) имеет несколько важных характеристик. Во-первых, вы можете реагировать на события (events) и другие изменения переменных с ними. Во-вторых, это заставляет скрипт работать. Если скрипт закончен, маниялинк, созданный скриптом (для работы с редактором) заработает. Поэтому вы можете реагировать на ошибки прерыванием, если вы хотите выйти из скрипта. Что бы применить изменения в новых событиях с этой системой, yield – важная функция. Yield передаёт контроль игровой системе, поэтому система получает доступ к маниалинкам и событиям, таким как нажатие на клавишу, или клик мышью. Без yield не могут быть показаны окна, диалоги. Вызов yield так же означает, что данное событие будет удалено, поэтому yield должен быть вызван после того, как обработаются события.
Функции массива. Array Functions Вы можете применить знания о массивах для получения их свойств из других источников (например как в JavaSkript, ладно, там только одно свойство).
• Integer .count: Возвращает количество элементов в массива • Boolean .exists(Value): Ожидает значения, возвращает истина/ложь • Boolean .existskey(Key): Ожидает ключа, возвращает истина/ложь • Boolean .remove(Value): Удаляет значение массива, возвращает, если всё прошло успешно • Boolean .removekey(Key): Удаляет ключ массива, возвращает истину, если всё прошло успешно • .add(Value): Ожидает добавления значения к массиву • Array .sort(): Ничего не используется, возвращает отсортированный массив • Key .keyof(Value): Ожидает значения массива, возвращает ключ этого значения. Если значение не подходит, это влияет на массив, поэтому убедитесь, что вы проверили это с помощью exists()
Внимание: remove(), removekey() и add() влияют на массив (и непосредственно на переменные ), в отличии от sort(). Code declare myarray = [3, 7, 5]; myarray.add(4); myarray.removekey(0); myarray = myarray.sort(); log(myarray); // [4, 5, 7]
MathLib Вам придётся загрузить Math объекты для того что бы получить math функции: Code #Include "MathLib" as MathLib
• Real/Integer MathLib::Rand(Real/Integer, Real/Integer): Оба аргумента должны быть real/integer. Integer выдаст случайное число между первым и вторым, real выдаст то же самое, но с пятью знаками после запятой. • Integer MathLib::NearestInteger(Real): Ближайшее целое число, например : 1.3 -> 1; 1.5 -> 2 • Integer MathLib::CeilingInteger(Real): Следующее целое число, пример: 1.3 -> 2 • Integer MathLib::FloorInteger(Real): Предыдущее целое число, припер: 1.6 -> 1 • Real MathLib::Sin(Real): Синус, пример: 3.141593/2 -> 1 • Real MathLib::Cos(Real): Косинус, пример: 3.141593 -> -1 • Real MathLib::Tan(Real): Тангенс, пример: 3.141593/4 -> 1 • Real MathLib::Exp(Real): exp(x) равняется e в степени x, где e – число Эйлера. Поэтому exp(1.) возвращает e.
TextLib Вам придётся загрузить TextLib объекты, что бы использовать текстовые функции: Code #Include "TextLib" as Textib
• Text TextLib::SubString(Text, Integer start, Integer length): Возвращает часть текста, где начало является первым символом (0 – первый) и длину этой части. • Text TextLib::ToText(Integer/Real/Boolean/Int3/Vec3): Преобразует много типов в текст. • Real TextLib::ToReal(Text) • Integer TextLib::ToInteger(Text)
Маниялинки. Manialinks Events (далее события) Существует стандартная конструкция реагирования на события: Code while(True) { foreach(Event in PendingEvents) { switch(Event.Type) { // case blabliblubb and so on } } yield; }
Событие имеет данные свойства: • Event.Type: типы: o CGameManialinkScriptEvent::Type::MouseClick o CGameManialinkScriptEvent::Type::MouseOver o CGameManialinkScriptEvent::Type::MouseOut o CGameManialinkScriptEvent::Type::KeyPress
События мыши происходят если соответствующий элемент Маниялинка имеет свойство ScriptEvents=”1”. Элементу не нужно присваивать id=””.
• Event.ControlId: В случае событий мыши (MouseClick; MouseOver; MouseOut) это свойство указывает на id элемента. Если элементу не задан id, значение ставится на “unassigned”. • Event.CharPressed: В случае KeyPress это свойство возвращает уникальный номер нажатия на клавишу, например 327680, 393216. Номер как правило десятичный, но эти числа сделаются более чувствительными при использовании шестнадцатеричного выхода. Shift, Ctrl и Alt не начинают событие, и тем более, нет различий между а и А. Это событие всегда провоцируется, вы не должны выбирать его или делать что-либо. Тем более это провоцируется в редакторе скриптов или когда вы пишете в адресную строку.
Страница. Page Страница так же предопределённый объект. Сейчас я нашёл только одно применение для этого: выделение элементов и их свойств, или изменение этих свойств. • Page.GetFirstChild(): Ожидает текст, который является id элемента маниялинк. Не нуждается в ScriptEvenss=”1” для этого. GetFirstChild() является глобальнее маниялинка, поэтому вы можете добавлять элементы внутри кода. • Page.MainFrame.Controls: Вторая возможность состоит в MainFrame.Controls, который является массивом. Таким образом, вы можете выбрать элементы по его id (text), но и положение происходит в маниялинке (integer).
Примеры: Code Page.MainFrame.Controls["myQuad"] Page.MainFrame.Controls[3] // Addresses the fourth element in the manialink
Елементы классы. Element Classes Оба MainFrame.Controls и GetFirstChild() возвращают объекты. Классы этих объектов CGameNinaalinkControl. В добавок, этот объект может быть использован как одна из следующих производных CGameManialinkControl, (поэтому все методы и свойства базовых классов всё ещё могут использоваться).
CGameManialinkControl • Text Id: Id элемента; Обычно выбирается только соответствующими элементами управления. • Real PosnX: x-позиция; изменяема • Real PosnY: y-позиция • Real PosnZ: z-позиция • Hide(): Предполагает отсутствие аргумента, скрывает элемент • Show(): Предполагает отсутствие аргумента; показывает элемент. • Unload(): Предполагает отсутствие аргумента; удаляет элемент. Использование переменной введёт к ошибке.
CGameManialinkQuad • ChangeImageUrl(Text) CGameManialinkEntry • Text Value: изменяема. CGameManialinkFileEntry • Text Value: изменяема. • Text FullFileName: только чтение CGameManialinkLabel • SetText(Text) CGameManialinkFrame • Controls: То же самое управление, как в Page.MainFrame.Controls – вы можете получить доступ к элементам.
Состояния клавиш и мыши. Key and Mouse States Есть несколько предопределённых переменных (выдающих boolean), которые показывают состояние мыши или клавиш: • MouseLeftButton • MouseRightButton • MouseMiddleButton • KeyUp • KeyDown • KeyLeft • KeyRight • KeyReturn • KeySpace (ещё не работает) • KeyDelete (ещё не работает)
Другие переменные. Other Variables • Real MouseX and MouseY: Выдаёт позицию (real) мыши в позиции маниялинк version=”1” , неважно, используете ли вы version=”1” или нет (в моём случае hover в vesion =”0” , элемент в положении x=10 выдаёт MouseX=25). • Text CurrentLocalDateText: Местная дата и местное время. Пример: 2011/09/05 15:35:12 • Text CurrentTimeText: Время, с которого ManiaPlanet работает. Синтакс: (Hours:)Minutes:Seconds.Hundredths; Пример: 3:15.20 or 1:33:29.82 • Integer CurrentTime: Количество миллисекунд с начала работа ManiPlanetThe number of milliseconds that have passed since ManiaPlanet has started.
Редактор плагинов. Editor Plugins Существует тип Int3 для обозначения позиции блоков. Синтаксис: Code declare Int3 coord = <0, 1, 2>;
Вы можете использовать (читать и изменять) значение массивов, coord[0] и т.д. Координаты задаются с помощью <CoordX, CoordY, CoordZ>, это значит ширина, высота, глубина, относительно земли. На самом деле, я не проверял всё, например даже не смотрел на MacroBlocks.
События. Events Так же, как и в маниялинках, есть массив, называемый PundingEvents. Это элементы (я их опять назову событиями) имеют свойство типа. Типы типов: • CGameCtnEditorPluginScriptEvent::Type::CursorChange: Когда позиция курсора меняется. • CGameCtnEditorPluginScriptEvent::Type::CursorSelectionBegin: Когда (начало) ставится блок. • CGameCtnEditorPluginScriptEvent::Type::CursorSelectionEnd: Когда (конец) ставится блок. Каждое размещение блока изменяет положение обоих CursorSelectionBegin и CursorSelectionEnd событий. Только если это нормальный блок, события происходят одно зад другим. Но это всё ещё похоже на размещение блока или рельефа: CursorSelectionBegin включён, когда нажимается кнопка мыши, а CursorSelectionEnd когда кнопка мыши не нажата. CursorChange так же может быть в состоянии между SelectionBegin и-End.
Маниялинки. Manialinks • ManialinkText: Текст в маниялинке в интерфейсе редактора. В этом случае не нужен тег <manialink> и заголовок XML. Так же может использоваться тег <script>. • ManialinkPage: Для взаимодействия МанияСкрипта вместе с МанияЛинком и ManialinkText, вы можете использовать переменные ManialinkPage, пример:
Code declare Text var for ManialinkPage; ManialinkText = """<script><!-- declare Text var for Page; declare Text oldvar; while (True) { declare Text var for Page; if (var != oldvar) { log(var); log("Congratulations! You INTERACTED."); oldvar = var; } yield; } --></script>"""; var = "This variable has been changed"; while (True) { yield; } Переназначение переменных перезагружет переменные.
Модели блоков. Block Models Если вы хотите задать блоку переменную, используйте класс CGameCtnBlock: Code declare CGameCtnBlock myblock; • BlockModels[]: BlockModels – массив со всеми названиями моделями блоков в качестве ключа; Выдаёт объект класса CBlockModel. o Id: Название блока. • TerrainBlockModels[]: Массив со всеми моделями блоков рельефа. MacroBlockModels[]: Массив во всеми моделями макро блоков. Id должен работать так же. • CursorBlockModel: Данная модель блока. o Id: Название данного блока. o VariantAir: IsAllUnderground o VariantGround o IsRoad: Имеются только один блок дороги 2-1-1 (который можете ставить вы). • CursorTerrainBlockModel: Данная модель блока рельефа. Вы можете иметь модель блока и модель блока рельефа одновременно. o Id: Название данного блока. o VariantGround • CursorMacroblockModel: Данная модель макро блока. Не использовал это, но могу предположить, что это переменная может иметь значение в то же время, как остальные две. o Id? o IsGround o GeneratedBlockModel VariantAir IsAllUnderground? VariantGround IsRoad?
Направление и курсор. Directions and Cursor • ::CardinalDirections: Да, это переменная называется так, с двойного двоеточия в начале. o ::North; ::East; ::South; ::West • CursorCoord: Значение в формате Int3 с данными координатами. • CursorDir: Данное направление курсора, направление должно быть в координатах.
Карта. Map Свойства карты Map properties. • Size == <32, 40, 32>. Всегда. • MapName: Изменяема • Comments: Изменяема; Комментарии к карте • CollectionName == Окружение; Только чтение • AuthorLogin: Только чтение • AuthorNickname: Только чтение • AuthorZonePath: Только чтение • CopperPrice: Только чтение; Размер карты • MapParameters: Все свойства изменяемы на данный момент. Все свойства в миллисекундах (integer). o AuthorScore == Время автора o AuthorTime o GoldTime o SilverTime o BronzeTime o TimeLimit == 60000 стандартно
Функции блоков. Block functions • Bool CanPlaceBlock(BlockModel, Coord, Dir, OnGround, VariantIndex): Возвращает, может ли блок поставлен на это место и направление или нет. Я надеюсь, что эти аргументы пустые (первые три^^). OnGround и VariantIndex необходимы и заданы функцией, поэтому вам надо самим задать их:: Код: Select all declare Boolean OnGround; declare Integer VariantIndex; • Bool PlaceBlock(CGameCtnBlock BlockModel, Int3 Coord, enum Dir): Размещяет блок, возвращает, была ли операция успешна или нет (нет, без ошибок, если это не сработало). • Integer GetBlockGroundHeight(CGameCtnBlock BlockModel, int CoordX, int CoordZ, enum Dir): Возвращает высоту блока относительно земли. • Bool RemoveBlock(Int3 Coord): Удаляет блок с данной позиции. Даже если блок больше, чем одна позиция для блока. • CanPlaceBlock_NoDestruction() • PlaceBlock_NoDestruction() • Bool CanPlaceTerrainBlocks(CGameCtnBlock TerrainBlockModel, CoordStart, CoordEnd): Returns whether terrain of the kind of terrain block model can be placed at the range between the coordinations or not. • Bool PlaceTerrainBlocks(CGameCtnBlock TerrainBlockModel, Int3 CoordStart, Int3 CoordEnd): Ставит рельеф. Даже на втором/третьем/.. уровне. RemoveTerrainBlocks(CoordStart, CoordEnd): Удаляет рельеф. • CanPlaceRoadBlocks() • PlaceRoadBlocks() • CanPlaceMacroblock() • PlaceMacroblock() • CanPlaceMacroblock_NoDestruction() • PlaceMacroblock_NoDestruction() • RemoveAllBlocks(): Удаляет все блоки, не удаляет рельеф. • RemoveAllBlocksAndTerrain(): Удаляет все блоки и рельеф. • CGameCtnBlock GetBlock(Int3 Coord): Возвращает (название?) блок с выбранной позиции. • CGameCtnBlock GetStartLineBlock(): Выбирает модель блока стартовой позиции. Иили что-то другое^^ • UpdateBlocksDisplay(): Применяет изменение в редакторе.
Режим редактирования и изменения. Place and Edit mode (объяснение ещё не до конца готово, я жду того, как работет enums( PlaceMode и EditMode)) • PlaceMode o Unknown, Terraform, Block, Macroblock, Skin, CopyPaste, Test, Plugin, CustomSelection • EditMode o Unknown, Place, FreeLook, Erase, Pick, SelectionAdd, SelectionRemove • UndergroundMode • CopyPaste_Copy(), CopyPaste_Cut(), CopyPaste_SelectAll(), CopyPaste_ResetSelection() • CopyPaste_AddOrSubSelection(uint3 StartCoord, uint3 EndCoord) • Boolean CopyPaste_Symmetrize()
Другие переменные и их функции. Other variables and functions • SaveMap(FileName, Directory): Сохраняет карту после подтверждения, директория начинается с Tracks\ • DialogDoMessage(Message): Показывает окошко с сообщением и кнопкой OK. () с Shows a window with a message and an OK button. (Кажется, что это больше не поддерживается) • ComputeShadows(): Делает практически то же самое, что и «просчёт теней», но не снимает необходимость просчитать тени перед сохранением карты. • Help(): Показывает окно помощи редактора. • Undo(): Отменяет последнее действие в редакторе. • Redo(): Возвращает последнее действие в редакторе. • Quit(): Выходит из редактора (и показывает подтверждение, если карта не была сохранена). • Real CameraHAngle and CameraVAngle: Возвращает угол камеры в радианах . Диапазон: H: -3/2π to 3/2π; V: 0 to 1/2π – изменяемы. • Real CameraToTargetDistance: Расстояние до цели (на которое сфокусирована камера) изменяема. • Int3 CursorCoord: Координаты, на чём сфокусирован курсор (камера?) Enum CursorDir: Может принимать значения ::CardinalDirections (блока рельефа всегда направлены на север). • Integer Now: Эквивалентно Manialink CurrentTime
Hj-s's blog "inmania forever" ёба, каменты излишне © Dangerserg
|
|
| |