00091. Создания собственных классов и кейвордов
Создания собственных классов и кейвордов|Всем привет! Сегодня мы попытаемся сделать несколько классов, таких как player, actor и добавить ключевые слова.|wmysterio|wmysterio||||
× ВАЖНО: делайте резевную копию редактируемых файлов
Начнём с простого. Ключевые слова очень легко добавить. Для начала откроем любым текстовым редактором файл:
X:\...\Sanny Builder\Data\SA\keywords.txt
Как видите, структура файла очень проста:
номер опкода | знак равенства | ключевое слово |
---|---|---|
0001 | = | wait |
По-аналогии, добавим в конец файла новый опкод. Например, опкод заканчивающий cleo-поток: 0A93: end_custom_thread. Давайте запишем краткий вариант, так, что бы его можно было быстро запомнить и легко писать. Я, например, использую кейворд - end_cleo. Таким образом нужно добавить в наш файл строчку:
Как показала практика - быстрота написания скрипта резко увеличилась, так как нет необходимости постоянно искать этот опкод в поиске. Особое внимание нужно обратить на количество параметров ( тип данных ) в кейворде, они должны быть в том же порядке, что и в опкоде, например:
Кейворд: | fade **0 1000** |
---|---|
Опкод: | 016A: fade **0** time **1000** |
× **Примечание:** старайтесь избегать кириллических символ, используйте только латинские
Я собрал самое необходимое, на мой взгляд:
Но я был бы рад, что бы Вы сами для себя собрали такой список, можно и подлиннее =)
× **Примечание:** учитывайте, что при использовании новых классов и кейвордов на разных сайтах может привести к тому, что код у других пользователей работать не будет. Поэтому редактируйте файлы только в личный целях, а на сайтах используйте только те команды, которые предоставляются изначально компилятором.
Теперь рассмотрим более сложный процесс оптимизации написания кода под скриптеров, а именно - создание и дополнение классов. Для начала рассмотрим структуру файла:
X:\...\Sanny Builder\data\sa\classes.db
Он открывается любым текстовым редактором. Первое, что попадается в глаза - это строчка "#CLASSESLIST". После неё идёт перечень всех классов, которые использует санник. После строчки "#CLASSES" идут перечень классов и методов, свойственны им. Все методы закреплены в блоке $BEGIN ... $END. Ну и завершается файл строкой "#EOF".
Давайте создадим класс Animation. Для этого добавить его название в список классов:
После этого переходим вниз файла и добавим блок $BEGIN ... $END для нашего класса:
Итак, класс мы создали! Теперь он отображается в нашем списке:
И на этом все возможности и кончились. Возникает вопрос: Как добавить функции? Здесь уже посложнее. Но общий вид такой:
Название функции, опкод, тип, вспомогательной код,("Список параметров")
Название функции - здесь ( без пробелов ) нужно указать название. Так как класс у нас будет об анимациях, то первой функцией будет загрузка нужного IFP-файла, а название - LOAD. Название своё, но для удобства назовём так, как в опкоде. Опкод - так, как мы загружаем анимацию, нам нужно указать опкод. Естественно наш вариант - "04ED" ( от опкода 04ED: load_animation "LOWRIDER" ) Тип функции - собственно чем будет являться наш метод. Есть 3 типа ( таких, как и в опкодов ):
0 | Regular ( обычный метод или процедура ) |
---|---|
1 | Conditional ( условие ) |
2 | Property ( свойство ) |
Если наш метод будет загружать анимацию, мы будем использовать тип "0", так как опкод является методом. Вспомогательной код - это как бы регулировка где будет размещаться переменные:
Номер | Опсиание | Пример |
---|---|---|
0 | в скобках, по списку | actor.SetImmunities(**$Actor,** 1, 1 ,1 ,1 ,1 ) |
1 | смещение влево | **$Actor** = actor.create(6, #WMYDRUG, 0.0, 0.0, 0.0) |
2 | смещение вправо | Object.KeepInMemory(0@) = **true** |
В нашем случаи нет необходимости смещать параметр влево или вправо, поэтому оставляем "0". "Список параметров" - собственно перечисление передающихся параметров. Каждый параметр имеет свой тип данных. Всего их шесть. Вот таблица:
Тип | Описание |
---|---|
%h | указатель на субъект |
%v | строка ( Long String ) |
%b | булево ( false или true ) |
%s | строка ( Short String ) |
%f | дробное число |
%i | целое число |
В нашем случае это строка ( LongString ). Поэтому в скобках мы должны указать этот параметр: ( "%v" ). Между этими параметрами мы можем писать комментарии, что бы у нас была подсказка. Вышла такая строка:
Load,04ED,0,0,("Animation%v")
Сохраняем наш файл и проверяем созданную функцию в SB:
Так как в нас есть ещё проверка и выгрузка анимации, то, по примеру, создадим соответствующие функции для класса "Animation":
Available,04EE,1,0,("Animation%v") Release,04EF,0,0,("Animation%v")
Класс "Animation" вышел очень похожем на класс "Model". Проверим на примере наш класс:
Проверка не выдала никаких ошибок как в SB, так и в GTA:
Советы для тех, кто делает классы для своего удобства:
Старайтесь что бы названия максимально отличались, но не меняли смысла;
Старайтесь делать функции, которые максимально относятся к планируемому классу;
Проверяйте новый опкод с уже существующими. Во многих случаях возможно дублирование, что конечно нам не нужно;
На этом всё. Этот урок будет полезно изучить уже опытным скриптерам, так как это сократит время написание скрипта до минимального. Минус такого подхода - ваш код не скомпиллируется на других машинах, что влияет на некоторые возможности, таких как помощь с кодом от опытных скриптеров или его предоставление новичкам.|1200|1|0|44166367jpg
405109
400107``\|36444738
png497
142400
114\|00797942`png`500`300`400`240
||sozdanija_sobstvennykh_klassov_i_kejvordov|1504423261
Last updated