Просмотр темы
неизвестный (21.05.08 15:57) отв цит
Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)
Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)
неизвестный (13.06.08 07:54) отв цит
[quote:7295691c56="RaDiAtIoN_dEn"]Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)[/quote:7295691c56]Ой если ты в этом ничего не шариш то лучше не лезть,потому что все эти скрипты это одна большая ошибка,я сколько раз ставил и все поровну,их все править надо.
[quote:7295691c56="RaDiAtIoN_dEn"]Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)[/quote:7295691c56]Ой если ты в этом ничего не шариш то лучше не лезть,потому что все эти скрипты это одна большая ошибка,я сколько раз ставил и все поровну,их все править надо.
неизвестный (13.06.08 07:55) отв цит
Ну если есть желание попытать счастье пиши:k-olega@mail.ru я тебе объясню,а то тут много писать
Ну если есть желание попытать счастье пиши:k-olega@mail.ru я тебе объясню,а то тут много писать
Florida! (02.07.08 11:15) отв цит
[quote:39c24e6461="~Viper~"][quote:39c24e6461="RaDiAtIoN_dEn"]Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)[/quote:39c24e6461]Ой если ты в этом ничего не шариш то лучше не лезть,потому что все эти скрипты это одна большая ошибка,я сколько раз ставил и все поровну,их все править надо.[/quote:39c24e6461].Если ты в скриптах ни нашишь тогда нечего тут говорить шо это заморочка,легче скрипта ничего нет
[quote:39c24e6461="~Viper~"][quote:39c24e6461="RaDiAtIoN_dEn"]Объясните как пользоваться скриптами?Например хочу на сайт чат поставить,тока поподробней:)[/quote:39c24e6461]Ой если ты в этом ничего не шариш то лучше не лезть,потому что все эти скрипты это одна большая ошибка,я сколько раз ставил и все поровну,их все править надо.[/quote:39c24e6461].Если ты в скриптах ни нашишь тогда нечего тут говорить шо это заморочка,легче скрипта ничего нет
неизвестный (10.07.08 05:01) отв цит
Скрипты-это части кода, записанного на специальном языке скриптов (здесь мы будем его называть TES Script). Эти маленькие "программы" будут работать в игре и могут управлять определенными вещеми в игре, на самом деле массой вещей: скрипты инициируют события, управляют временем и пространством, создают вещи и скрывают монстров, добавляют или перемещают, делают сообщения игроку, изменяют статистику, даже изменяют возможности погоды-все невозможное возможно.
TES Script является скриптовым языком, но не используется за пределами TES Construction Set. Хотя язык скриптов имеет определенные ограничения по сравнению с "настоящими" языками программирования, наподобие C++:
Область TES Script ограничена; не ожидайте, что он способен запрограммировать что-нибудь, чего нет в игре. Это не останавливает Вас в создании с помощью скриптов новых и уникальных вещей! Но Вы не можете использовать TES Script, скажем, чтобы создать текстовый редактор.
TES Script - не ПКР (программный комплект разработки), который позволяет Вам действительно работать с исходным кодом Oblivion. Также Вы не можете использовать TES Script, например, для добавления новых погодных эфектов. Это делается где-то в другом месте, и Вы должны обладать дополнительными знаниями, чтобы делать это.
TES Script не регистрозависим. Это означает, что команда "player.getpos z" работает точно так же как и команда "Player.GetPos z", так же как и "PlAyEr.GeTpOs Z", так же как и любая из подобных вариаций. Большинство людей (включая автора), используют второй формат, поскольку он наиболее понятен; остальные предпочитают первый формат, поскольку он использует только нижний регистр.
Что может делать скрипт?
Скрипты Oblivion - позволяют игре динамически реагировать на действия игрока. Вы можете использовать скрипты для управления сложными квестами. Вы можете использовать скрипты, чтобы создавать ловушки. Вы можете использовать сценарии, чтобы изменять поведение NPC или монстров. Помните создание персонажей в Oblivion? Им в основном управляет множество сценариев. Выполняли квесты? Они тоже сделаны скриптами. Вот и короткий ответ на поставленный ранее вопрос: многое.
Если Вы новичок в программировании и скриптовании, и даже если Вы прочли статью "Мой первый Скрипт", продуманное использование TES Script могло вызвать небольшой испуг. Вот для чего создана эта статья, она научит вас создавать другие, более сложные, скрипты. Как Вы уже догадались здесь будут описаны основные элементы языка скриптов.
Запускаем окно редакторов скриптов: Запустите TES Construction Set, открывайте мастер-файл Oblivion.esm затем выберите Edit Scripts из меню Gameplay, чтобы открыть окно редактора скриптов.
Окно редактора скриптов
Вы выводите редактор скриптов выбирая Gameplay -> Edit Scripts из меню; щелкая кнопку "Edit Scripts"(карандаш) справа на панели задач; или щелкая кнопку [...] около области "Script", находящуюся в окне редактирования NPC.
Давайте бегло ознакомимся с кнопками на панели задач, слева направо: "Open" позволяет Вам выбрать скрипт из списка, чтобы редактировать. "Save" сохраняет, проверяя скрипт и выдавая сообщения об ошибках по результатам проверки. Примечание: на самом деле плагин еще не сохранен на диске. При написании больших скриптов чаще сохраняйтесь в главном окне программы после сохранения в редакторе, это на случай вылета TES CS. Также, если Вы просто закроете окно редактора, это не означает, что скрипт будет сохранен. Вы должны позаботиться об этом сами.
Стрелки Влево и Вправо открывают последующий или предыдущий скрипт соответственно (в алфавитном порядке). Если давать своим сценариям имя с общей пометкой, это поможет вам легче переходить между ними. Например, мой ник - Fatal1ty, и я начинаю каждый скрипт с "FT_Script_", так скрипты будут объединены в аккуратные группы. Compile all скомпилировать все. Она также добавляет все скрипты Oblivion в ваш плагин, так что esp-файл даже пустого плагина будет весить около 2 Мб. Старайтесь реже пользоваться этой кнопкой. Наконец, кнопка Delete удаляет скрипт, и последняя кнопка в виде стрелки вниз закрывает окно Редактора.
Далее справа Вы увидите выпадающий список "Script Type". Он позволяет Вам выбрать один из трех типов, Под который Ваш скрипт подходит: Object, Quest и Magic Effect. Посредством скриптов Object управляются объекты мира(например, NPC), скрипты Quest управляют квестами (как например генерация персонажа), и скрипты Magic Effect управляют специальными волшебными эффектами.
Что мы хотим?
Прежде чем писать скрипт выясним, что мы от него хотим? В этой статье мы напишем скрипт, который создаст Буфет-Загадку: буфет спросит загадку и только правильный ответ откроет его. Если игрок ответит неправильно - сработает ловушка, ранящая игрока, а останется закрытым. Это довольно сложный скрипт но постепенно мы его напишем.
Написание скрипта
Когда открыто окно Script Edit, кликните Script -> New.... Script Type сейчас "Object", что нам и нужно. Кликните на основную часть окна, которая изменила цвет с серого на белый. Это то место где пишутся скрипты.
Обучение скриптованию: первые строки
Имя скрипта
Прежде всего мы должны дать нашему скрипту имя. Каждый скрипт должен начинаться с указания имени. В редактироемой области наберите:
ScriptName RiddleChestScriptNote
Заметьте, что в имени скрипта нет никаких пробелов и подчеркиваний. Имя сценария долно писаться одним словом, так что Вы не можете использовать пробелы. Также, Oblivion игнорирует подчеркивания в алфавитном списке сценариев; Вы можете использовать подчеркивания, чтобы делать названием более ясным для себя, но Вы не увидите их когда будете открывать сценарий позже. (Заметка: Oblivion допускает сокращения в TES Script, когда вы заменяете полное имя команды более короткой версией. Например, "ScriptName" можно заменить на "scn", или "ForceActorValue" на "ForceAV". Мы не сокращения в этой статье, но не удивляйся когда увидите скрипты, которые используют их. Помните, что TES Script не регистрозависим; Вы можете записать "scriptname" как "ScriptnamE", и это будет тоже правильный вариант.
Попытайтесь сохранить ваш скрипт используя кнопку "Save" на панели задач. С виду ничего не произошло, но если Вы нажмете кнопку "Open", здесь вы должны найти имя вашего скрипта в списке. Кликните X в правом верхнем углу окна Select Form, чтобы закрыть это окно и вернуться в окно Script Edit. RiddleChestScript - это самый короткий скрипт в Oblivion, но ведь и Москва не сразу строилась. Давайте исправим это.
Begin и End
Команды Begin и End определяют начало и конец кода, который будут выполнен при определенных условиях. Для наших целей, мы хотим использовать условие OnActivate: скрипт будет активирован когда игрок активирует что-либо(в нашем случае попытается открыть ящик).
ScriptName RiddleChestScript
Begin OnActivate
; Здесь мы введем код, выполняющийся когда ящик открыт.
End
Нажмите кнопку "Save". Скрипт еще ничего не делает, но по крайней мере теперь мы определили при каком условии он будет работать. Есть пара моментов которые стоит разъяснить. Уведомление - точка с запятой ";" в строке 4. Точка с запятой выделяет остальную часть строки как комментарий. Все, что Вы напишите после точки с запятой будет проигнорировано когда скрипт будет скомпилирован. Для того, чтобы написать две и более строки комментариев ставьте точку с запятой на каждой строке .
Написание текста и запрос решений игрока
Теперь мы напишем код, при котором Буфет задает игроку загадку. Для этого мы используем функцию MessageBox, с которой Вы уже ознакомились в статье "Мой первый скрипт". MessageBox отображает на экране текст и также несколько вариантов выбора. К несчастью Oblivion (так же как и до этого Morrowind), не имеет функции, при которой игроку дается возможность заносить свой вариант ответа, значит мы должны сделать несколько вариантов. Строка кода:
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Текст между первой парой кавычек, - текст отображаемый в сообщении; все остальные слова, разделенные запятыми, выводятся в виде кнопок с возможностью выбора.
Как оформляются Объектные скрипты
Каждый скрипт, который приложен к объекту или NPC (сценарий Объекта), выполняется каждый раз, когда локация с этим объектом активна (в помещениях активна только локация с определенным интерьером, а на открытом воздухе активны все смежные локации). Следовательно эти скрипты выполняются 10-60 раз в секунду, это зависит только от скорости вашего компьютера! Это все равно что зациклить скрипт:
while (Object is in active Cell)
[Your script code]
Endwhile
В этом случае скрипт будет выполнен всего один раз, а в противном случае скрипт будет выполнятся непрерывным потоком. Если не верите попробуйте это:
ScriptName HorribleMessageScript
Begin GameMode
MessageBox “Тысячи бесполезных сообщений!”
End
Это сравнительно безвредный скрипт добавляющий сообщение, но представьте себе, если бы этот скрипт добавлял вещ в инвентарь или чудовище около игрока!
Давайте продолжим работу с нашим скриптом к: нам нужно объявить переменную и использовать ее, чтобы убедится что скрипт выполняется единожды. Измените скрипт:
ScriptName RiddleChestScript
Short controlvar
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
EndIf
End
и сохранитесь снова. Заметьте, что команда MessageBox записывается в одну строку! Не прерывайте ее!
И снова нужно отметить несколько вещей. Команда "If" проверяет выполняется ли условие зписанное в скобках, если выполняется, то будет выполнен код записанный до команды"EndIf". "==" означает, что выражение слева (в нашем случае переменная controlvar), приравневается к выражению справа (в нашем случае 0). Если Вы забудите "EndIf" после "If" , редактор пожалуется на ошибку когда Вы пытаетесь сохранить.
"Short controlvar" объявляет новую переменную, которую мы назовем "controlvar". На данный момент достаточно будет знать, что переменная типа "Short"-переменная, содержащая целые (положительные или отрицательные) числа. Команда Set также новая, она присваевает переменной, которая имела величину 0 (все переменные в начале приравниваются к нулю), значение 1. Так как код выполняется с "If ( controlvar == 0 )", а после выполнения условия переменной присваевается значение 1, следовательно условие выполняется только единажды и сообщение не отобразится снова.
Обучение скриптованию: первый тест
Сохранение и подготавление плагина
Теперь наш скрипт уже способный работать, так что его можно тестировать:
Сохраните скрипт и закройте окно Script Editor.
Обратите внимание на Object Window и найдите в WorldObjects > Container > Clutter объект с ID "CupboardFoodLower".
Теперь кликните по нему дважды и из выпадающего списка "Script" выберите скрипт, который мы только что сделали "RiddleChestScript".
Нажмите OK, сохраняйте плагин и закрывайте TESCS.
Скрипт в игре
Теперь активизирйте свой плагин, запускайте игру и загружайте Ваш сейв.
В игре откройте консоль (обычно "~"(тильда)) и наберите:
player.coc "AleswellInn"
Вы появитесь в локации Aleswell Inn, с вами поздороваются невидимые люди, это не имеет отношения к плагину -- эта локация -выбор автора. Слева от себя вы увидите буфет подойдите к нему и активируйте его.
Когда Вы активизируете шкаф, Вы должны увидеть, как наше сообщение появилось на экране.
Щелчок на любом из ответов должен закрывать сообщение, при повторной активации Вы не увидите не какой реакции.
Покиньте Oblivion и откройте TESCS, загрузите наш плагин. Те бедные люди в Aleswell Inn должны еще подождать, Вы восстановите их видимость в другой раз, ничего тут недоделаешь такова уж учесть NPC в видео игре.
Обучение скриптованию: выбор игрока, баги и исправления
Позволение игроку выбирать ответ
Теперь нам нужно отследить какой ответ выбрал игрок, и прописать реакцию на них. Функция, отслеживающая выбранный ответ - GetButtonPressed. Эта функция присваивает каждой кнопке свое число "0" для первой кнопки ("Ножик" в нашем случае) и 1, 2, 3, и т.п. для следующих кнопок, в заказе Вы указали им в команде MessageBox.
Отредактируйте скрипт, чтобы он был похож на следующее:
ScriptName RiddleChestScript
Short controlvar
Short button
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Begin GameMode
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox " Гордись, ты дал правильный ответ."
Activate
Set controlvar to 2
Else
MessageBox " Ответ неправильный."
Set controlvar to -1
EndIf
EndIf
End
Правильный ответ был "Вставную челюсть", который назначался на кнопку 2, и если эта кнопка была нажата, то буфет открывался. И если была нажата любая другая кнопка, то выводилось сообщение о неправильном ответе и буфет остается закрытым.
Теперь немного изменим скрипт:
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Это означает, что в будущем ящик будет открыт только в случае если controlvar больше, чем 1. Учитывая это условие, игрок никогда не сможет открыть ящик, если он даст неправильный ответ. Но при правильном ответе переменной controlvar будет присвоено значение 2, значит, игрок сможет спокойно открывать ящик, когда ему это заблагорассудится, но только при правильном ответе. Сохраняйте и тестируйте ваш плагин.
Ваши первые баги, и исправления
Если вы протестировали плагин, то заметили, что не все идет, как запланировано. Неправильный ответ закрывает буфет навсегда, а если ответ правильный сообщение возникает снова. Сообщение должно быть убрано, а буфет открыт!
Давайте попробуем следующее (измените соответствующую секцию скрипта):
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox "Гордись, ты дал правильный ответ."
Set controlvar to 2
Else
MessageBox "Ответ неправильный."
Set controlvar to -1
EndIf
ElseIf ( controlvar == 2 )
Activate
EndIf
Мы разместили активационную команду, которая срабатывает при controlvar == 2, а при правильном ответе controlvar приравнивается к 2! Сохраняем, запускаем, тестируем.
Отлично, теперь буфет открыт как мы и хотели, но что это? Мы не можем его закрыть! Посмотрите выше: controlvar был установлен на 2 и остается с таким значением. Следовательно, игра теперь получает непрерывные команды "Активизации" всякий раз, когда скрипт обработан! Значит, мы должны сделать так, чтобы буфет мог закрываться. Измените следующую часть скрипта:
ElseIf ( controlvar == 2 )
Activate
Set controlvar to 3
EndIf
Тестируем плагин снова: теперь все работает, как мы хотели.
Что делать теперь? Ловушку, конечно!
Обучение скриптованию: добавление ловушек
Наш буфет теперь должен насылать проклятия на игрока, если он неправильно отвечает на загадку. Теперь нам нужно выбрать из списка спеллов заклинание. В Oblivion довольно большой выбор, но в нашей статье мы используем спелл Mg05FingerSpell15.
Теперь нужно, чтобы игроку наносился урон при неправильном ответе. Отредактируйте скрипт:
Else
MessageBox "Ответ неправильный."
Cast Mg05FingerSpell15 Player
Set controlvar to -1
EndIf
Здесь мы использовали функцию Cast. Эта функция позволяет выстрелить заклинанием в указанного человека синтаксис Cast Id спелла Id персонажа (Player для игрока)
Теперь Ваш скрипт должен быть похож на это:
ScriptName RiddleChestScript
Short controlvar
Short button
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Begin GameMode
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox «Гордись, ты дал правильный ответ."
Set controlvar to 2
Else
MessageBox "Ответ неправильный."
Cast Mg05FingerSpell15 Player
Set controlvar to -1
EndIf
ElseIf ( controlvar == 2 )
Activate
Set controlvar to 3
EndIf
End
Поздравляю, мы закончили наш скрипт! Поэкспериментируйте с ним, используя разные функции TES Script.
Как узнать больше
После того, как Вы проработали эту статью, у Вас может появится вопрос: как узнать о скриптовании больше? Отличный способ - рассматривание готовых скриптов (из самой игры или из плагинов). Используйте этот сценарий, изменяя его под свои потребности. Прочитайте список функций, чтобы найти те функции, которые Вам нужны. Форумы также являются очень хорошим местом для получения информации. Ну и, наконец, практикуйтесь, практикуйтесь, практикуйтесь.
Последние заметки
Учтите, что круглые скобки вокруг условий не необходимы. Я включил их в эту статью, поскольку я думаю, что они помогут более аккуратно оформить скрипт, чтобы его можно было легче понять.
Скрипты-это части кода, записанного на специальном языке скриптов (здесь мы будем его называть TES Script). Эти маленькие "программы" будут работать в игре и могут управлять определенными вещеми в игре, на самом деле массой вещей: скрипты инициируют события, управляют временем и пространством, создают вещи и скрывают монстров, добавляют или перемещают, делают сообщения игроку, изменяют статистику, даже изменяют возможности погоды-все невозможное возможно.
TES Script является скриптовым языком, но не используется за пределами TES Construction Set. Хотя язык скриптов имеет определенные ограничения по сравнению с "настоящими" языками программирования, наподобие C++:
Область TES Script ограничена; не ожидайте, что он способен запрограммировать что-нибудь, чего нет в игре. Это не останавливает Вас в создании с помощью скриптов новых и уникальных вещей! Но Вы не можете использовать TES Script, скажем, чтобы создать текстовый редактор.
TES Script - не ПКР (программный комплект разработки), который позволяет Вам действительно работать с исходным кодом Oblivion. Также Вы не можете использовать TES Script, например, для добавления новых погодных эфектов. Это делается где-то в другом месте, и Вы должны обладать дополнительными знаниями, чтобы делать это.
TES Script не регистрозависим. Это означает, что команда "player.getpos z" работает точно так же как и команда "Player.GetPos z", так же как и "PlAyEr.GeTpOs Z", так же как и любая из подобных вариаций. Большинство людей (включая автора), используют второй формат, поскольку он наиболее понятен; остальные предпочитают первый формат, поскольку он использует только нижний регистр.
Что может делать скрипт?
Скрипты Oblivion - позволяют игре динамически реагировать на действия игрока. Вы можете использовать скрипты для управления сложными квестами. Вы можете использовать скрипты, чтобы создавать ловушки. Вы можете использовать сценарии, чтобы изменять поведение NPC или монстров. Помните создание персонажей в Oblivion? Им в основном управляет множество сценариев. Выполняли квесты? Они тоже сделаны скриптами. Вот и короткий ответ на поставленный ранее вопрос: многое.
Если Вы новичок в программировании и скриптовании, и даже если Вы прочли статью "Мой первый Скрипт", продуманное использование TES Script могло вызвать небольшой испуг. Вот для чего создана эта статья, она научит вас создавать другие, более сложные, скрипты. Как Вы уже догадались здесь будут описаны основные элементы языка скриптов.
Запускаем окно редакторов скриптов: Запустите TES Construction Set, открывайте мастер-файл Oblivion.esm затем выберите Edit Scripts из меню Gameplay, чтобы открыть окно редактора скриптов.
Окно редактора скриптов
Вы выводите редактор скриптов выбирая Gameplay -> Edit Scripts из меню; щелкая кнопку "Edit Scripts"(карандаш) справа на панели задач; или щелкая кнопку [...] около области "Script", находящуюся в окне редактирования NPC.
Давайте бегло ознакомимся с кнопками на панели задач, слева направо: "Open" позволяет Вам выбрать скрипт из списка, чтобы редактировать. "Save" сохраняет, проверяя скрипт и выдавая сообщения об ошибках по результатам проверки. Примечание: на самом деле плагин еще не сохранен на диске. При написании больших скриптов чаще сохраняйтесь в главном окне программы после сохранения в редакторе, это на случай вылета TES CS. Также, если Вы просто закроете окно редактора, это не означает, что скрипт будет сохранен. Вы должны позаботиться об этом сами.
Стрелки Влево и Вправо открывают последующий или предыдущий скрипт соответственно (в алфавитном порядке). Если давать своим сценариям имя с общей пометкой, это поможет вам легче переходить между ними. Например, мой ник - Fatal1ty, и я начинаю каждый скрипт с "FT_Script_", так скрипты будут объединены в аккуратные группы. Compile all скомпилировать все. Она также добавляет все скрипты Oblivion в ваш плагин, так что esp-файл даже пустого плагина будет весить около 2 Мб. Старайтесь реже пользоваться этой кнопкой. Наконец, кнопка Delete удаляет скрипт, и последняя кнопка в виде стрелки вниз закрывает окно Редактора.
Далее справа Вы увидите выпадающий список "Script Type". Он позволяет Вам выбрать один из трех типов, Под который Ваш скрипт подходит: Object, Quest и Magic Effect. Посредством скриптов Object управляются объекты мира(например, NPC), скрипты Quest управляют квестами (как например генерация персонажа), и скрипты Magic Effect управляют специальными волшебными эффектами.
Что мы хотим?
Прежде чем писать скрипт выясним, что мы от него хотим? В этой статье мы напишем скрипт, который создаст Буфет-Загадку: буфет спросит загадку и только правильный ответ откроет его. Если игрок ответит неправильно - сработает ловушка, ранящая игрока, а останется закрытым. Это довольно сложный скрипт но постепенно мы его напишем.
Написание скрипта
Когда открыто окно Script Edit, кликните Script -> New.... Script Type сейчас "Object", что нам и нужно. Кликните на основную часть окна, которая изменила цвет с серого на белый. Это то место где пишутся скрипты.
Обучение скриптованию: первые строки
Имя скрипта
Прежде всего мы должны дать нашему скрипту имя. Каждый скрипт должен начинаться с указания имени. В редактироемой области наберите:
ScriptName RiddleChestScriptNote
Заметьте, что в имени скрипта нет никаких пробелов и подчеркиваний. Имя сценария долно писаться одним словом, так что Вы не можете использовать пробелы. Также, Oblivion игнорирует подчеркивания в алфавитном списке сценариев; Вы можете использовать подчеркивания, чтобы делать названием более ясным для себя, но Вы не увидите их когда будете открывать сценарий позже. (Заметка: Oblivion допускает сокращения в TES Script, когда вы заменяете полное имя команды более короткой версией. Например, "ScriptName" можно заменить на "scn", или "ForceActorValue" на "ForceAV". Мы не сокращения в этой статье, но не удивляйся когда увидите скрипты, которые используют их. Помните, что TES Script не регистрозависим; Вы можете записать "scriptname" как "ScriptnamE", и это будет тоже правильный вариант.
Попытайтесь сохранить ваш скрипт используя кнопку "Save" на панели задач. С виду ничего не произошло, но если Вы нажмете кнопку "Open", здесь вы должны найти имя вашего скрипта в списке. Кликните X в правом верхнем углу окна Select Form, чтобы закрыть это окно и вернуться в окно Script Edit. RiddleChestScript - это самый короткий скрипт в Oblivion, но ведь и Москва не сразу строилась. Давайте исправим это.
Begin и End
Команды Begin и End определяют начало и конец кода, который будут выполнен при определенных условиях. Для наших целей, мы хотим использовать условие OnActivate: скрипт будет активирован когда игрок активирует что-либо(в нашем случае попытается открыть ящик).
ScriptName RiddleChestScript
Begin OnActivate
; Здесь мы введем код, выполняющийся когда ящик открыт.
End
Нажмите кнопку "Save". Скрипт еще ничего не делает, но по крайней мере теперь мы определили при каком условии он будет работать. Есть пара моментов которые стоит разъяснить. Уведомление - точка с запятой ";" в строке 4. Точка с запятой выделяет остальную часть строки как комментарий. Все, что Вы напишите после точки с запятой будет проигнорировано когда скрипт будет скомпилирован. Для того, чтобы написать две и более строки комментариев ставьте точку с запятой на каждой строке .
Написание текста и запрос решений игрока
Теперь мы напишем код, при котором Буфет задает игроку загадку. Для этого мы используем функцию MessageBox, с которой Вы уже ознакомились в статье "Мой первый скрипт". MessageBox отображает на экране текст и также несколько вариантов выбора. К несчастью Oblivion (так же как и до этого Morrowind), не имеет функции, при которой игроку дается возможность заносить свой вариант ответа, значит мы должны сделать несколько вариантов. Строка кода:
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Текст между первой парой кавычек, - текст отображаемый в сообщении; все остальные слова, разделенные запятыми, выводятся в виде кнопок с возможностью выбора.
Как оформляются Объектные скрипты
Каждый скрипт, который приложен к объекту или NPC (сценарий Объекта), выполняется каждый раз, когда локация с этим объектом активна (в помещениях активна только локация с определенным интерьером, а на открытом воздухе активны все смежные локации). Следовательно эти скрипты выполняются 10-60 раз в секунду, это зависит только от скорости вашего компьютера! Это все равно что зациклить скрипт:
while (Object is in active Cell)
[Your script code]
Endwhile
В этом случае скрипт будет выполнен всего один раз, а в противном случае скрипт будет выполнятся непрерывным потоком. Если не верите попробуйте это:
ScriptName HorribleMessageScript
Begin GameMode
MessageBox “Тысячи бесполезных сообщений!”
End
Это сравнительно безвредный скрипт добавляющий сообщение, но представьте себе, если бы этот скрипт добавлял вещ в инвентарь или чудовище около игрока!
Давайте продолжим работу с нашим скриптом к: нам нужно объявить переменную и использовать ее, чтобы убедится что скрипт выполняется единожды. Измените скрипт:
ScriptName RiddleChestScript
Short controlvar
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
EndIf
End
и сохранитесь снова. Заметьте, что команда MessageBox записывается в одну строку! Не прерывайте ее!
И снова нужно отметить несколько вещей. Команда "If" проверяет выполняется ли условие зписанное в скобках, если выполняется, то будет выполнен код записанный до команды"EndIf". "==" означает, что выражение слева (в нашем случае переменная controlvar), приравневается к выражению справа (в нашем случае 0). Если Вы забудите "EndIf" после "If" , редактор пожалуется на ошибку когда Вы пытаетесь сохранить.
"Short controlvar" объявляет новую переменную, которую мы назовем "controlvar". На данный момент достаточно будет знать, что переменная типа "Short"-переменная, содержащая целые (положительные или отрицательные) числа. Команда Set также новая, она присваевает переменной, которая имела величину 0 (все переменные в начале приравниваются к нулю), значение 1. Так как код выполняется с "If ( controlvar == 0 )", а после выполнения условия переменной присваевается значение 1, следовательно условие выполняется только единажды и сообщение не отобразится снова.
Обучение скриптованию: первый тест
Сохранение и подготавление плагина
Теперь наш скрипт уже способный работать, так что его можно тестировать:
Сохраните скрипт и закройте окно Script Editor.
Обратите внимание на Object Window и найдите в WorldObjects > Container > Clutter объект с ID "CupboardFoodLower".
Теперь кликните по нему дважды и из выпадающего списка "Script" выберите скрипт, который мы только что сделали "RiddleChestScript".
Нажмите OK, сохраняйте плагин и закрывайте TESCS.
Скрипт в игре
Теперь активизирйте свой плагин, запускайте игру и загружайте Ваш сейв.
В игре откройте консоль (обычно "~"(тильда)) и наберите:
player.coc "AleswellInn"
Вы появитесь в локации Aleswell Inn, с вами поздороваются невидимые люди, это не имеет отношения к плагину -- эта локация -выбор автора. Слева от себя вы увидите буфет подойдите к нему и активируйте его.
Когда Вы активизируете шкаф, Вы должны увидеть, как наше сообщение появилось на экране.
Щелчок на любом из ответов должен закрывать сообщение, при повторной активации Вы не увидите не какой реакции.
Покиньте Oblivion и откройте TESCS, загрузите наш плагин. Те бедные люди в Aleswell Inn должны еще подождать, Вы восстановите их видимость в другой раз, ничего тут недоделаешь такова уж учесть NPC в видео игре.
Обучение скриптованию: выбор игрока, баги и исправления
Позволение игроку выбирать ответ
Теперь нам нужно отследить какой ответ выбрал игрок, и прописать реакцию на них. Функция, отслеживающая выбранный ответ - GetButtonPressed. Эта функция присваивает каждой кнопке свое число "0" для первой кнопки ("Ножик" в нашем случае) и 1, 2, 3, и т.п. для следующих кнопок, в заказе Вы указали им в команде MessageBox.
Отредактируйте скрипт, чтобы он был похож на следующее:
ScriptName RiddleChestScript
Short controlvar
Short button
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Begin GameMode
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox " Гордись, ты дал правильный ответ."
Activate
Set controlvar to 2
Else
MessageBox " Ответ неправильный."
Set controlvar to -1
EndIf
EndIf
End
Правильный ответ был "Вставную челюсть", который назначался на кнопку 2, и если эта кнопка была нажата, то буфет открывался. И если была нажата любая другая кнопка, то выводилось сообщение о неправильном ответе и буфет остается закрытым.
Теперь немного изменим скрипт:
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Это означает, что в будущем ящик будет открыт только в случае если controlvar больше, чем 1. Учитывая это условие, игрок никогда не сможет открыть ящик, если он даст неправильный ответ. Но при правильном ответе переменной controlvar будет присвоено значение 2, значит, игрок сможет спокойно открывать ящик, когда ему это заблагорассудится, но только при правильном ответе. Сохраняйте и тестируйте ваш плагин.
Ваши первые баги, и исправления
Если вы протестировали плагин, то заметили, что не все идет, как запланировано. Неправильный ответ закрывает буфет навсегда, а если ответ правильный сообщение возникает снова. Сообщение должно быть убрано, а буфет открыт!
Давайте попробуем следующее (измените соответствующую секцию скрипта):
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox "Гордись, ты дал правильный ответ."
Set controlvar to 2
Else
MessageBox "Ответ неправильный."
Set controlvar to -1
EndIf
ElseIf ( controlvar == 2 )
Activate
EndIf
Мы разместили активационную команду, которая срабатывает при controlvar == 2, а при правильном ответе controlvar приравнивается к 2! Сохраняем, запускаем, тестируем.
Отлично, теперь буфет открыт как мы и хотели, но что это? Мы не можем его закрыть! Посмотрите выше: controlvar был установлен на 2 и остается с таким значением. Следовательно, игра теперь получает непрерывные команды "Активизации" всякий раз, когда скрипт обработан! Значит, мы должны сделать так, чтобы буфет мог закрываться. Измените следующую часть скрипта:
ElseIf ( controlvar == 2 )
Activate
Set controlvar to 3
EndIf
Тестируем плагин снова: теперь все работает, как мы хотели.
Что делать теперь? Ловушку, конечно!
Обучение скриптованию: добавление ловушек
Наш буфет теперь должен насылать проклятия на игрока, если он неправильно отвечает на загадку. Теперь нам нужно выбрать из списка спеллов заклинание. В Oblivion довольно большой выбор, но в нашей статье мы используем спелл Mg05FingerSpell15.
Теперь нужно, чтобы игроку наносился урон при неправильном ответе. Отредактируйте скрипт:
Else
MessageBox "Ответ неправильный."
Cast Mg05FingerSpell15 Player
Set controlvar to -1
EndIf
Здесь мы использовали функцию Cast. Эта функция позволяет выстрелить заклинанием в указанного человека синтаксис Cast Id спелла Id персонажа (Player для игрока)
Теперь Ваш скрипт должен быть похож на это:
ScriptName RiddleChestScript
Short controlvar
Short button
Begin OnActivate
If ( controlvar == 0 )
MessageBox "Наша Таня громко плачет, уронила в речку...", "Ножик", "Мячик", "Вставную челюсть", "Сашу"
Set controlvar to 1
ElseIf ( controlvar > 1 )
Activate
EndIf
End
Begin GameMode
If ( controlvar == 1 )
Set button to GetButtonPressed
If ( button == -1 )
Return
ElseIf ( button == 2)
MessageBox «Гордись, ты дал правильный ответ."
Set controlvar to 2
Else
MessageBox "Ответ неправильный."
Cast Mg05FingerSpell15 Player
Set controlvar to -1
EndIf
ElseIf ( controlvar == 2 )
Activate
Set controlvar to 3
EndIf
End
Поздравляю, мы закончили наш скрипт! Поэкспериментируйте с ним, используя разные функции TES Script.
Как узнать больше
После того, как Вы проработали эту статью, у Вас может появится вопрос: как узнать о скриптовании больше? Отличный способ - рассматривание готовых скриптов (из самой игры или из плагинов). Используйте этот сценарий, изменяя его под свои потребности. Прочитайте список функций, чтобы найти те функции, которые Вам нужны. Форумы также являются очень хорошим местом для получения информации. Ну и, наконец, практикуйтесь, практикуйтесь, практикуйтесь.
Последние заметки
Учтите, что круглые скобки вокруг условий не необходимы. Я включил их в эту статью, поскольку я думаю, что они помогут более аккуратно оформить скрипт, чтобы его можно было легче понять.
неизвестный (10.07.08 05:04) отв цит
От Elder Scrolls Construction set WIKI
Это короткая обучающая программа, которая даст вам бысрый экскурс для того, чтобы сделать ваш первый скрипт.
Она постепенно раскроет Вам создание скрипта и займет у Вас приблизительно 5-10 минут.
Ну что, давайте начнём:
1. Откройте конструктор.
2. Откройте File --> Data.В появившемся окне кликните двойным щелчком на Oblivion.esm ,жмите ОК и ждите пока загрузится.
3. В окне объектов(Object Window) найдите отмычку(lockpick).Вы найдёте её в пункте Items --> Misc Item (Если не нашли отмычку, подойдёт любой другой предмет, например яблоко).Дважды кликните на предмете.
4. Откроется окно свойств предмета.Там где написано Script: NONE , кликните на кнопку с 3 точками расположенную рядом.Откроется редактор скриптов.
5. Откройте Script --> New, чтобы начать новый скрипт.
6. Напишите следующее:
ScriptName HelloWorld
Begin OnAdd
Message "Hello World!", 10
end
Информация о скрипте:
-Первая строка это имя вашего скрипта.Проверьте чтобы оно было уникально.
-"Begin OnAdd" означает что скрипт сработает после того как вы подберёте этот предмет.Команда "end" заканчивает секwию скрипта, начатую командой "OnAdd"
-И, наконец строка "Message" управляет тем, что будет показано, "10"-время которое надпись будет видна на экране.
7. Сохраните скрипт, закройте редактор скриптов и редактор свойств предмета, но после этого ваш скрипт ещё не появится.
8. Вернитесь в окно свойств предмета и "HelloWorld" должен появться в меню для скриптов(Вам вероятно придётся закрывать окно свойств предмета и повторно открывать его, чтобы ваш скрпт появился в списке)
9. Жмите кнопку Save и закрывайте окно.
10. Откройте File --> Save, назовите файл "HelloWorld"(получится .esp файл с именем HelloWorld)
11. Откройте стартовое меню Oblivion и нажмите Data Files.
12. Двойной щелчок не файле HelloWorld.esp
13. Войдите в игру, выбросите отмычку и подберите её.Вам должно выскочить сообщение "HelloWorld"!
От Elder Scrolls Construction set WIKI
Это короткая обучающая программа, которая даст вам бысрый экскурс для того, чтобы сделать ваш первый скрипт.
Она постепенно раскроет Вам создание скрипта и займет у Вас приблизительно 5-10 минут.
Ну что, давайте начнём:
1. Откройте конструктор.
2. Откройте File --> Data.В появившемся окне кликните двойным щелчком на Oblivion.esm ,жмите ОК и ждите пока загрузится.
3. В окне объектов(Object Window) найдите отмычку(lockpick).Вы найдёте её в пункте Items --> Misc Item (Если не нашли отмычку, подойдёт любой другой предмет, например яблоко).Дважды кликните на предмете.
4. Откроется окно свойств предмета.Там где написано Script: NONE , кликните на кнопку с 3 точками расположенную рядом.Откроется редактор скриптов.
5. Откройте Script --> New, чтобы начать новый скрипт.
6. Напишите следующее:
ScriptName HelloWorld
Begin OnAdd
Message "Hello World!", 10
end
Информация о скрипте:
-Первая строка это имя вашего скрипта.Проверьте чтобы оно было уникально.
-"Begin OnAdd" означает что скрипт сработает после того как вы подберёте этот предмет.Команда "end" заканчивает секwию скрипта, начатую командой "OnAdd"
-И, наконец строка "Message" управляет тем, что будет показано, "10"-время которое надпись будет видна на экране.
7. Сохраните скрипт, закройте редактор скриптов и редактор свойств предмета, но после этого ваш скрипт ещё не появится.
8. Вернитесь в окно свойств предмета и "HelloWorld" должен появться в меню для скриптов(Вам вероятно придётся закрывать окно свойств предмета и повторно открывать его, чтобы ваш скрпт появился в списке)
9. Жмите кнопку Save и закрывайте окно.
10. Откройте File --> Save, назовите файл "HelloWorld"(получится .esp файл с именем HelloWorld)
11. Откройте стартовое меню Oblivion и нажмите Data Files.
12. Двойной щелчок не файле HelloWorld.esp
13. Войдите в игру, выбросите отмычку и подберите её.Вам должно выскочить сообщение "HelloWorld"!
© 2003-2024 Didrov.Ru