00091. Создания собственных классов и кейвордов

Создания собственных классов и кейвордов|Всем привет! Сегодня мы попытаемся сделать несколько классов, таких как player, actor и добавить ключевые слова.|wmysterio|wmysterio||||

× ВАЖНО: делайте резевную копию редактируемых файлов

Начнём с простого. Ключевые слова очень легко добавить. Для начала откроем любым текстовым редактором файл:

X:\...\Sanny Builder\Data\SA\keywords.txt

Как видите, структура файла очень проста:

номер опкодазнак равенстваключевое слово

0001

=

wait

По-аналогии, добавим в конец файла новый опкод. Например, опкод заканчивающий cleo-поток: 0A93: end_custom_thread. Давайте запишем краткий вариант, так, что бы его можно было быстро запомнить и легко писать. Я, например, использую кейворд - end_cleo. Таким образом нужно добавить в наш файл строчку:

ini
0A93=end_cleo

Как показала практика - быстрота написания скрипта резко увеличилась, так как нет необходимости постоянно искать этот опкод в поиске. Особое внимание нужно обратить на количество параметров ( тип данных ) в кейворде, они должны быть в том же порядке, что и в опкоде, например:

Кейворд:fade **0 1000**

Опкод:

016A: fade **0** time **1000**

× **Примечание:** старайтесь избегать кириллических символ, используйте только латинские

Я собрал самое необходимое, на мой взгляд:

ini
0A93=end_cleo
0AB1=function
0AB2=f_ret
0A92=run_cleo_thread
0A94=run_cleo_mission
0169=fade_color
0209=random_int
0208=random_float
0707=goto_scene
0701=end_scene
038B=loading
04E4=renderer

Но я был бы рад, что бы Вы сами для себя собрали такой список, можно и подлиннее =)

× **Примечание:** учитывайте, что при использовании новых классов и кейвордов на разных сайтах может привести к тому, что код у других пользователей работать не будет. Поэтому редактируйте файлы только в личный целях, а на сайтах используйте только те команды, которые предоставляются изначально компилятором.

Теперь рассмотрим более сложный процесс оптимизации написания кода под скриптеров, а именно - создание и дополнение классов. Для начала рассмотрим структуру файла:

X:\...\Sanny Builder\data\sa\classes.db

Он открывается любым текстовым редактором. Первое, что попадается в глаза - это строчка "#CLASSESLIST". После неё идёт перечень всех классов, которые использует санник. После строчки "#CLASSES" идут перечень классов и методов, свойственны им. Все методы закреплены в блоке $BEGIN ... $END. Ну и завершается файл строкой "#EOF".

Давайте создадим класс Animation. Для этого добавить его название в список классов:

ini
#CLASSESLIST
Actor
Camera
...
Garage
File
Audiostream

Animation

...

После этого переходим вниз файла и добавим блок $BEGIN ... $END для нашего класса:

ini
$Animation
$begin
; здесь будут условия и методы
$end

#EOF

Итак, класс мы создали! Теперь он отображается в нашем списке:

И на этом все возможности и кончились. Возникает вопрос: Как добавить функции? Здесь уже посложнее. Но общий вид такой:

Название функции, опкод, тип, вспомогательной код,("Список параметров")

Название функции - здесь ( без пробелов ) нужно указать название. Так как класс у нас будет об анимациях, то первой функцией будет загрузка нужного IFP-файла, а название - LOAD. Название своё, но для удобства назовём так, как в опкоде. Опкод - так, как мы загружаем анимацию, нам нужно указать опкод. Естественно наш вариант - "04ED" ( от опкода 04ED: load_animation "LOWRIDER" ) Тип функции - собственно чем будет являться наш метод. Есть 3 типа ( таких, как и в опкодов ):

0Regular ( обычный метод или процедура )

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". Проверим на примере наш класс:

{$CLEO}
0000:

:NAME
thread 'NAME'
wait 0
Animation.Load("GANGS")

while not Animation.Available("GANGS")
wait 0
end

wait 5000
0812: AS_actor $PLAYER_ACTOR perform_animation "hndshkfa" IFP_file "GANGS" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 4700
wait 4700
Animation.Release("GANGS")
end_cleo

Проверка не выдала никаких ошибок как в SB, так и в GTA:

Советы для тех, кто делает классы для своего удобства:

  • Старайтесь что бы названия максимально отличались, но не меняли смысла;

  • Старайтесь делать функции, которые максимально относятся к планируемому классу;

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

На этом всё. Этот урок будет полезно изучить уже опытным скриптерам, так как это сократит время написание скрипта до минимального. Минус такого подхода - ваш код не скомпиллируется на других машинах, что влияет на некоторые возможности, таких как помощь с кодом от опытных скриптеров или его предоставление новичкам.|1200|1|0|44166367jpg405109400107``\|36444738png497142400114\|00797942`png`500`300`400`240||sozdanija_sobstvennykh_klassov_i_kejvordov|1504423261

Last updated