Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум » Общий форум » Моддинг GTA » [Туториал] Написание скрипта...
[Туториал] Написание скрипта...
DK22PacДата: Воскресенье, 26.06.2011, 00:45 | Сообщение # 1
Подполковник
Группа: Друзья
Сообщений: 56
Награды: 2
Репутация: 5
Статус: Оффлайн
Скрипт - это последовальность действий. Задача скриптера - выложить эти действия в код.
CLEO-скрипт - это скомпилированный код, который понимает игра благодаря библиотеке CLEO.
Заготовки скриптов
Скрипт линейный
Code
{$CLEO .cs}

05DC: end_custom_thread

Скрипт-цикл
Code
{$CLEO .cs}
wait 0
while true
     wait 0

end

Слова, заключённые в {}, называются директивами. Директива CLEO даёт понять компилятору, что надо скомпилировать ваше творение в CLEO-скрипт. А приставка .cs даёт понять компилятору, в какой формат компилировать скрипт.
Примечания
Запись {$CLEO} равнозначна записи {$CLEO .cs}, то есть, дефолтное значение формата, в который компилируем - .cs.
Компилятор - программа, которая преобразовывает ваше творение в понятный для компьютера язык. В нашем случае компилятор - SannyBuilder by Seeman.
Можно использовать и другие директивы, которые расширяют функции юзера SB, но я ими не часто пользуюсь.
Например, директива {INCLUDE}, или просто {I} крепит к скрипту .txt-файл и компилирует код в нём вместе с кодом в SB. Используется она так: {I mycode.txt}. При этом сам файл ьнсщвуюече можно положить в папку Sanny Builder\data\sa.
Опкоды и кейворды. Классы и методы
Для написания скриптового кода мы используем команды. Эти команды называют опкодами. Формат опкода:
Code
0XXX: параметры

Добавлено (26.06.2011, 00:44)
---------------------------------------------
Например, опкод

Code
015D: set_gamespeed 0.25

015D - это ID опкода. 0.25 - параметр. set_gamespeed - вспомогательные слова, подсказка. Можно писать и так:
Code
015D: 0.25

Компилятор работает с ID опкодов и параметрами, а не со словами.
Ещё один пример опкода
Code
00BE: text_clear_all

Как видите, в нём есть только вспомогательные слова. Параметров нет. Значит, мы могли написать и так:
Code
00BE:

Каждый опкод мы пишем в новой строке. Таким образом, ставя эти опкоды друг за другом, мы и формируем скрипт.
Для того, чтобы посмотреть на доступные опкоды (хотя они там не все описаны, но большинство там можно заметить) - зайдите Сервис-Инструменты-Поиск опкодов...
И сразу увидите опкод
Code
0001: wait 0

О его назначении поговорим позже.
Для удобства написания скриптов, некоторым опкодам присвоены кейворды. Команду
Code
0001: wait 0
,
В которой, как видим, один параметр...
Лирическое отсупление.
Параметром для опкода может быть:
1) число
-целое - 255
-дробное - 3.14
--записанное в десятичной системе счисления (decimal) - 255
--записанное в 16-ричной системе счисления (hexadecimal) - 0xFF. Для чисел в этой системе ставим приставку 0x перед числом.
2) строка
-короткая строка (string, short string) - 'blabla'. Максимум - 7 символов между ' '.
-длинная строка (она в 2 раза больше короткой) - "blablablabla". Максимум - 15 символов между " ".
______________________________________________________________________________________

Добавлено (26.06.2011, 00:45)
---------------------------------------------
можно записать и так:

Code
wait 0

Слово wait - кейворд, и в SB оно выделяется жирным шрифтом. Кейворд сам подставит нужный нам опкод. О них мы ещё поговорим потом.
Классы и методы. Некоторые опкоды могут быть записанны в класово-методовом виде, например
Code
player.Defined(0)

Слово Player - это класс, а Defined - метод. В дужках записываем параметр, в данном случае, 0 - это индекс (ID) игрока.
Если бы перевели на русский, то было бы:
Code
Игрок.Существует(0)
,
То есть, эта команда расшифровывается как: А игрок с индексом 0 существует?
И если игра выполнит эту команду, она даст нам ответ. А ответ может быть - либо "да", либо "нет".
Все опкоды делятся на выполняющие опкоды и проверки. Проверка - проверяет что-то... Например, мы провреяли, существует ли игрок... Но оставим это на потом... Сейчас мы напишем небольшой скрипт.
В начале пишем
Code
{$CLEO}

Далее пишем команду
Code
wait 3000

Эта команда делает "остановку" скрипта на указанное время (параметр, в нашем случае -3000). Это милисекунды. 3000 милисекунд - это 3 секунды. Мы пишем эту команду, и теперь знаем, что после загрузки игры в нашем скрипте будет 3 секунды простоя, то есть, скрипт не пойдёт дальше команды wait 3000, пока не пройдут эти милисекунды. Позже я расскажу, как именно это организовано.
После этих 3ёх секунд, мы включим режим "широкий экран", как в кат-сценах. Включим мы его командой:
Code
02A3: toggle_widescreen 1

Параметр в этом опкоде означает статус "широкого экрана".
1 - включить,
0 - выключить.
Мы помним, что toggle_widescreen - это вспомогательные слова (чтобы мы могли понять, что именно делает опкод), 02A3 - это ID опкода, отвечающего за эту команду, а 1 - это параметр, целое число.

Добавлено (26.06.2011, 00:45)
---------------------------------------------
Далее мы опять напишем команду:

Code
wait 3000

То есть, опять будем ждать 3 секунды. Ну а за ней напишем команду отключения "широкого экрана":
Code
02A3: toggle_widescreen 0/code]
Видим, что единичку (параметр) мы сменили на "0".
После этого мы завершим скрипт. Завершается он командой:
[code]05DC: end_custom_thread

Так как в этом опкоде мы не видим параметров, то можно было и просто написать
Code
05DC:

Вспоминаем то, что прочитали...
Итак, получили такой скрипт, целый алгоритм smile
Code
{$CLEO}
wait 3000
02A3: toggle_widescreen 1
wait 3000
02A3: toggle_widescreen 0
05DC: end_custom_thread

Можете уже его скомпилировать. Нажмите F6.
Кстати...
Жиректива в SB выделяется зелёным цветом. Параметры - тёмно-красным. Слова-кейворды - жирным шрифтом.
Можете поигратся с параметрами, поставить больше или меньше аремя для "задержки". Дам вам ещё один интересный опкод для работы с камерой:
Code
0003: shake_camera 300

Трусит камеру с интенисвность 300. Камера потрясётся, и успокоится.
Написал не сильно много... Буду рад, если кто-то вчитается.
Домашнее задание:
Напишите скрипт с такой последовностью действий:
Задержка в 2,5 секунды -> Включение "широкого экрана" -> Задержка в 1 секунду -> Тряска камеры с интенсивностью 500 -> задержка в 4 секунды -> отключение "широкого экрана". И не забудьте команду завершения скрипта!
Ответы писать сюда.

PS Мне продолжать??


Сообщение отредактировал DK22Pac - Воскресенье, 26.06.2011, 00:44
 
tladgta3Дата: Воскресенье, 26.06.2011, 20:38 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
ДА ПРОДОЛЖАЙ!А то как раз летом хотел скриптинг освоить.)
 
tladgta3Дата: Воскресенье, 26.06.2011, 20:39 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
На счет домашнего-хз когда смогу)Но надо будет попробовать)
 
DK22PacДата: Воскресенье, 26.06.2011, 23:12 | Сообщение # 4
Подполковник
Группа: Друзья
Сообщений: 56
Награды: 2
Репутация: 5
Статус: Оффлайн
Хорошо, спасибо.
Небольшое продолжение.
Переменные и константы
Итак, вы уже знаете, что опкоды работают с параметрами. Отдельный опкод может иметь один, два, три и больше параметров, а может и не иметь их вовсе. Обчно, это такие опкоды, где эти параметры и не нужны.
Параметры могут быть константными и переменными.
Константа - это постоянное значение... Например: 0, 255, 3.14.
Переменные - это значения, которые могут изменяться, во время выполнения скрипта.
В SB переменные обозначаются как X@, где X - номер переменной. Номера начинаются с 0. Например:
0@ 1@ 2@ 14@
Переменнная обозначает определённое место в памяти (ОЗУ), в которой хранится какое-то значение.
С самого начала скрипта значение всех переменных - 0.
Инициализация переменных
Это жуткое слово обозначает записывание в переменные каких-либо значений. Например
Code
0@ = 1

Это означает, что в переменную 0@ мы записываем число 1.
Переменные могут использоваться в опкодах так же, как и константы.
Помните сей опкод?
Code
wait 3000

А вот его использование с переменной:
Code
0@ = 3000
wait 0@

Итак, сначала мы записали в переменную 0@ число 3000. Далее мы выполняем команду-задержку с параметром 0@. Т.е, выполняем задуржку в 3000 милисекунд.
Переменные могут быть локальными и глобальными.
Локальная переменная
0@ 1@ 2@ 14@
Глобальная переменная
$ONMISSION $PLAYER_CHAR $PLAYER_ACTOR $10
Чем они отличаются, напишу позже.
 
RuslanmiracleДата: Понедельник, 27.06.2011, 18:48 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Награды: 5
Репутация: 500
Статус: Оффлайн
Quote (tladgta3)
PS Мне продолжать??

Определенно да!


 
DK22PacДата: Пятница, 29.07.2011, 12:14 | Сообщение # 6
Подполковник
Группа: Друзья
Сообщений: 56
Награды: 2
Репутация: 5
Статус: Оффлайн
Тему закрыть/удалить.
 
tladgta3Дата: Суббота, 30.07.2011, 14:09 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
Опять.Непонятно.Или решил перенести все кудато-и там сделать уникальным?
 
DK22PacДата: Воскресенье, 31.07.2011, 23:14 | Сообщение # 8
Подполковник
Группа: Друзья
Сообщений: 56
Награды: 2
Репутация: 5
Статус: Оффлайн
Спроса нет.
 
tladgta3Дата: Понедельник, 01.08.2011, 14:00 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
И всего то?И зачем сразу закрывать...переместил бы на альтер чтоли?А то закрывать да закрывать...Я б свое закрыть не смог бы.
 
DK22PacДата: Вторник, 02.08.2011, 01:37 | Сообщение # 10
Подполковник
Группа: Друзья
Сообщений: 56
Награды: 2
Репутация: 5
Статус: Оффлайн
Нет спроса - нет желания.
 
RuslanmiracleДата: Воскресенье, 14.08.2011, 04:05 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Награды: 5
Репутация: 500
Статус: Оффлайн
Да пусть будет господи.

 
tladgta3Дата: Вторник, 16.08.2011, 14:31 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
И то верно.
 
RuslanmiracleДата: Воскресенье, 02.10.2011, 11:41 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Награды: 5
Репутация: 500
Статус: Оффлайн
Что то ДК больше нас не чем не радует.

 
tladgta3Дата: Воскресенье, 02.10.2011, 14:19 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 686
Награды: 2
Репутация: 500
Статус: Оффлайн
Дак он сам сказал-"ухожу на сайт димзета и больше нигде не появлюсь"-интересно сдержит ли слово.
 
RuslanmiracleДата: Воскресенье, 02.10.2011, 15:59 | Сообщение # 15
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Награды: 5
Репутация: 500
Статус: Оффлайн
Они все так говорят но потом все ровно бегут на свой пГ.

 
Форум » Общий форум » Моддинг GTA » [Туториал] Написание скрипта...
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

Copyright GTA3.uCoz.COM © 2024
Бесплатный конструктор сайтов - uCoz