[Туториал] Написание скрипта...
| |
DK22Pac | Дата: Воскресенье, 26.06.2011, 00:45 | Сообщение # 1 |
Подполковник
Группа: Друзья
Сообщений: 56
Статус: Оффлайн
| Скрипт - это последовальность действий. Задача скриптера - выложить эти действия в код. 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. Опкоды и кейворды. Классы и методы Для написания скриптового кода мы используем команды. Эти команды называют опкодами. Формат опкода: Добавлено (26.06.2011, 00:44) --------------------------------------------- Например, опкод Code 015D: set_gamespeed 0.25 015D - это ID опкода. 0.25 - параметр. set_gamespeed - вспомогательные слова, подсказка. Можно писать и так: Компилятор работает с ID опкодов и параметрами, а не со словами. Ещё один пример опкода Как видите, в нём есть только вспомогательные слова. Параметров нет. Значит, мы могли написать и так: Каждый опкод мы пишем в новой строке. Таким образом, ставя эти опкоды друг за другом, мы и формируем скрипт. Для того, чтобы посмотреть на доступные опкоды (хотя они там не все описаны, но большинство там можно заметить) - зайдите Сервис-Инструменты-Поиск опкодов... И сразу увидите опкод О его назначении поговорим позже. Для удобства написания скриптов, некоторым опкодам присвоены кейворды. Команду , В которой, как видим, один параметр... Лирическое отсупление. Параметром для опкода может быть: 1) число -целое - 255 -дробное - 3.14 --записанное в десятичной системе счисления (decimal) - 255 --записанное в 16-ричной системе счисления (hexadecimal) - 0xFF. Для чисел в этой системе ставим приставку 0x перед числом. 2) строка -короткая строка (string, short string) - 'blabla'. Максимум - 7 символов между ' '. -длинная строка (она в 2 раза больше короткой) - "blablablabla". Максимум - 15 символов между " ". ______________________________________________________________________________________Добавлено (26.06.2011, 00:45) --------------------------------------------- можно записать и так: Слово wait - кейворд, и в SB оно выделяется жирным шрифтом. Кейворд сам подставит нужный нам опкод. О них мы ещё поговорим потом. Классы и методы. Некоторые опкоды могут быть записанны в класово-методовом виде, например Слово Player - это класс, а Defined - метод. В дужках записываем параметр, в данном случае, 0 - это индекс (ID) игрока. Если бы перевели на русский, то было бы: , То есть, эта команда расшифровывается как: А игрок с индексом 0 существует? И если игра выполнит эту команду, она даст нам ответ. А ответ может быть - либо "да", либо "нет". Все опкоды делятся на выполняющие опкоды и проверки. Проверка - проверяет что-то... Например, мы провреяли, существует ли игрок... Но оставим это на потом... Сейчас мы напишем небольшой скрипт. В начале пишем Далее пишем команду Эта команда делает "остановку" скрипта на указанное время (параметр, в нашем случае -3000). Это милисекунды. 3000 милисекунд - это 3 секунды. Мы пишем эту команду, и теперь знаем, что после загрузки игры в нашем скрипте будет 3 секунды простоя, то есть, скрипт не пойдёт дальше команды wait 3000, пока не пройдут эти милисекунды. Позже я расскажу, как именно это организовано. После этих 3ёх секунд, мы включим режим "широкий экран", как в кат-сценах. Включим мы его командой: Code 02A3: toggle_widescreen 1 Параметр в этом опкоде означает статус "широкого экрана". 1 - включить, 0 - выключить. Мы помним, что toggle_widescreen - это вспомогательные слова (чтобы мы могли понять, что именно делает опкод), 02A3 - это ID опкода, отвечающего за эту команду, а 1 - это параметр, целое число.Добавлено (26.06.2011, 00:45) --------------------------------------------- Далее мы опять напишем команду: То есть, опять будем ждать 3 секунды. Ну а за ней напишем команду отключения "широкого экрана": Code 02A3: toggle_widescreen 0/code] Видим, что единичку (параметр) мы сменили на "0". После этого мы завершим скрипт. Завершается он командой: [code]05DC: end_custom_thread Так как в этом опкоде мы не видим параметров, то можно было и просто написать Вспоминаем то, что прочитали... Итак, получили такой скрипт, целый алгоритм 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
Статус: Оффлайн
| ДА ПРОДОЛЖАЙ!А то как раз летом хотел скриптинг освоить.)
|
|
| |
tladgta3 | Дата: Воскресенье, 26.06.2011, 20:39 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 686
Статус: Оффлайн
| На счет домашнего-хз когда смогу)Но надо будет попробовать)
|
|
| |
DK22Pac | Дата: Воскресенье, 26.06.2011, 23:12 | Сообщение # 4 |
Подполковник
Группа: Друзья
Сообщений: 56
Статус: Оффлайн
| Хорошо, спасибо. Небольшое продолжение. Переменные и константы Итак, вы уже знаете, что опкоды работают с параметрами. Отдельный опкод может иметь один, два, три и больше параметров, а может и не иметь их вовсе. Обчно, это такие опкоды, где эти параметры и не нужны. Параметры могут быть константными и переменными. Константа - это постоянное значение... Например: 0, 255, 3.14. Переменные - это значения, которые могут изменяться, во время выполнения скрипта. В SB переменные обозначаются как X@, где X - номер переменной. Номера начинаются с 0. Например: 0@ 1@ 2@ 14@ Переменнная обозначает определённое место в памяти (ОЗУ), в которой хранится какое-то значение. С самого начала скрипта значение всех переменных - 0. Инициализация переменных Это жуткое слово обозначает записывание в переменные каких-либо значений. Например Это означает, что в переменную 0@ мы записываем число 1. Переменные могут использоваться в опкодах так же, как и константы. Помните сей опкод? А вот его использование с переменной: Итак, сначала мы записали в переменную 0@ число 3000. Далее мы выполняем команду-задержку с параметром 0@. Т.е, выполняем задуржку в 3000 милисекунд. Переменные могут быть локальными и глобальными. Локальная переменная 0@ 1@ 2@ 14@ Глобальная переменная $ONMISSION $PLAYER_CHAR $PLAYER_ACTOR $10 Чем они отличаются, напишу позже.
|
|
| |
Ruslanmiracle | Дата: Понедельник, 27.06.2011, 18:48 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Статус: Оффлайн
| Quote (tladgta3) PS Мне продолжать?? Определенно да!
|
|
| |
DK22Pac | Дата: Пятница, 29.07.2011, 12:14 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 56
Статус: Оффлайн
| Тему закрыть/удалить.
|
|
| |
tladgta3 | Дата: Суббота, 30.07.2011, 14:09 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 686
Статус: Оффлайн
| Опять.Непонятно.Или решил перенести все кудато-и там сделать уникальным?
|
|
| |
DK22Pac | Дата: Воскресенье, 31.07.2011, 23:14 | Сообщение # 8 |
Подполковник
Группа: Друзья
Сообщений: 56
Статус: Оффлайн
| Спроса нет.
|
|
| |
tladgta3 | Дата: Понедельник, 01.08.2011, 14:00 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 686
Статус: Оффлайн
| И всего то?И зачем сразу закрывать...переместил бы на альтер чтоли?А то закрывать да закрывать...Я б свое закрыть не смог бы.
|
|
| |
DK22Pac | Дата: Вторник, 02.08.2011, 01:37 | Сообщение # 10 |
Подполковник
Группа: Друзья
Сообщений: 56
Статус: Оффлайн
| Нет спроса - нет желания.
|
|
| |
Ruslanmiracle | Дата: Воскресенье, 14.08.2011, 04:05 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Статус: Оффлайн
| Да пусть будет господи.
|
|
| |
tladgta3 | Дата: Вторник, 16.08.2011, 14:31 | Сообщение # 12 |
Генералиссимус
Группа: Администраторы
Сообщений: 686
Статус: Оффлайн
| И то верно.
|
|
| |
Ruslanmiracle | Дата: Воскресенье, 02.10.2011, 11:41 | Сообщение # 13 |
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Статус: Оффлайн
| Что то ДК больше нас не чем не радует.
|
|
| |
tladgta3 | Дата: Воскресенье, 02.10.2011, 14:19 | Сообщение # 14 |
Генералиссимус
Группа: Администраторы
Сообщений: 686
Статус: Оффлайн
| Дак он сам сказал-"ухожу на сайт димзета и больше нигде не появлюсь"-интересно сдержит ли слово.
|
|
| |
Ruslanmiracle | Дата: Воскресенье, 02.10.2011, 15:59 | Сообщение # 15 |
Генералиссимус
Группа: Администраторы
Сообщений: 2100
Статус: Оффлайн
| Они все так говорят но потом все ровно бегут на свой пГ.
|
|
| |
|