Много времени прошло с момента написания моей первой статьи для быстрого старта в программировании под библиотеку CLEO4. Кому-то из вас она стала полезной, кому-то не очень, но все же если вы желаете изучить это не простое дело и не знаете с чего начать, то вам следует прочитать эту статью -
Пишем свой первый CLEO скрипт, она даст вам первое представление о скриптинге и работе с программой Sanny Builder.
Эта статья предназначена для тех, кто немного разобрался в построении скриптов и возможно уже что-то попробовал написать. И так, ближе к делу!
Для начала давайте разберемся что будет делать наш скрипт, перечисляю по пунктам:
1) Должен уметь менять скин
2) Должен уметь возвращать скин Карла по умолчанию.
3) Сохранять в настройках текущий скин
4) При старте игры загружать тип скина из настроек В данном примере я разбил весь код скрипта на 3 функции - загрузка при старте, сканирование клавиатуры и смена скина, обо всем по порядку:
В начале скрипта объявляем переменную (назовем ее - Флаг) которая будет указывать нам какой в данный момент установлен скин, если значение равно 1, то это стандартный скин Карла иначе какой либо ID скина(я выбрал Army или 287), далее сразу переходим к функции загрузки, вот так это выглядит в коде:
{$CLEO .cs}
2@ = 1
gosub @Load
Загрузка при старте игры(Load):
Здесь мы воспользуемся опкодом для чтения числа в формате INI файла.
Но для начала немного о формате,
ini файлы - это удобный способ хранения настроек для программ, он может хранить в себе числа, текст, числа с плавающей точкой и многое другое.
Простейший INI файл состоит из секции, название которой определяется в квадратных скобках,
в секции могут находится ключи у каждого из которых есть свое значение, значения отделяются знаком =. В одном ini файле могут находится несколько секций.
Например:
[секция1]
ключ1 = значение
ключ2 = значение
[секция2]
ключ1 = значение
ключ2 = значение
С форматом разобрались теперь рассмотрим нашу функцию Load.
Здесь мы должны сначала проверить существование нашего ini файла, делается это следующим опкодом:
0AAB: file_exists "cleo\skin.ini", если файл существует, то читаем значение которое хранится в нашем файле в переменную 2@, далее переходим к смене скина и после этого передаем управление функции сканирования клавиатуры.
Смотрим код:
:Load
wait 0
if 0AAB: file_exists "cleo\\skin.ini"
then
0AF0: 2@ = get_int_from_ini_file "cleo\\skin.ini" section "settings" key "skin"
gosub @SkinChange
end
jump @Scan
Смена скина! Вот и добрались наконец! Сразу смотрим код:
:SkinChange
wait 0
if and // проверяем если
player.Defined(0) // игрок создан и
not actor.Dead($PLAYER_ACTOR) // не умер
jf @SkinChange
// меняем скин
if 2@ == 1 // если флаг равен 1 то
then // возвращаем скин CJ-я
09C7: change_player $PLAYER_CHAR model_to 0
0AF1: write_int 2@ to_ini_file "cleo\\skin.ini" section "settings" key "skin" // сохраняем настройку
2@ = #ARMY // переключаем флаг
else
// если флаг не равен 1 то
Model.Load(2@) // загружаем модель нашего скина
038B: load_requested_models // используйте всегда эту функцию после загрузки моделей
if Model.Available(2@) // если наша модель доступна то
then
09C7: change_player $PLAYER_CHAR model_to 2@ // меняем скин
Model.Destroy(2@) // освобождаем память
0AF1: write_int 2@ to_ini_file "cleo\\skin.ini" section "settings" key "skin" // сохраняем настройки
2@ = 1 // переключаем флаг
end
end
return // возвращаемся туда откуда была вызвана функция
С виду функция выглядит страшно заметите вы, но поверьте это вам только кажется <!--smile:smile-->
<!--/smile-->, здесь я специально прокомментировал каждую строку кода, что-бы вам легче было ориентироваться. В двух словах: Проверяем все ли нормально с игроком, если да то проверяем флаг. Если наш флаг равен 1 то возвращаем истинный облик Карла, иначе в моем случае перевоплощаем в army. Сохраняем настройки и переключаем флаг, указывая тем самым какой скин загрузить в следующий раз при нажатии кнопки.
Меняем скин опкодом - 09C7: change_player $PLAYER_CHAR model_to 0, где 0 - ID скина. Но перед использованием обязательно загружаем модель и проверяем доступность.
Сканирование клавиатуры:Здесь все довольно просто, при нажатии клавиши P(англ) или З(рус.) переходим к функции смены скина:
:Scan
wait 0
if
0AB0: key_pressed 0x50
jf @Scan
gosub @SkinChange
wait 100
jump @Scan
Вот и всё, осталось посмотреть полный код скрипта и скомпилировать:
{$CLEO .cs}
2@ = 1
gosub @Load
:Load
wait 0
if 0AAB: file_exists "cleo\\skin.ini"
then
0AF0: 2@ = get_int_from_ini_file "cleo\\skin.ini" section "settings" key "skin"
gosub @SkinChange
end
jump @Scan
:SkinChange
wait 0
if and
player.Defined(0)
not actor.Dead($PLAYER_ACTOR)
jf @SkinChange
if 2@ == 1
then
09C7: change_player $PLAYER_CHAR model_to 0
0AF1: write_int 2@ to_ini_file "cleo\\skin.ini" section "settings" key "skin"
2@ = #ARMY
else
Model.Load(2@)
038B: load_requested_models
if Model.Available(2@)
then
09C7: change_player $PLAYER_CHAR model_to 2@
Model.Destroy(2@)
0AF1: write_int 2@ to_ini_file "cleo\\skin.ini" section "settings" key "skin"
2@ = 1
end
end
return
:Scan
wait 0
if
0AB0: key_pressed 0x50
jf @Scan
gosub @SkinChange
wait 100
jump @Scan
Ini файл вам создавать не нужно, он создастся при первом нажатии на клавишу P, и срабатывании опкода записи значения в ini.
Вам же хочу пожелать удачи в скриптинге, комментируйте, задавайте вопросы если что непонятно и предлагайте идеи по поводу будущих статей. Скачать готовый скрипт можно здесь -
ссылкаДля копирования материала следует указать ссылку на Gamemodding.net!
Комментарии (7)