Уроки моддинга
Основной раздел
Search…
⌃K
Links

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 типа ( таких, как и в опкодов ):
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([email protected]) = **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