Перейти к содержанию

Мануал по скриптам под MWSE


Рекомендуемые сообщения

Я работаю над переводом мануала по скриптам МВСЕ . Некоторую часть уже перевел. Буду сюда класть частями .

Писание скриптов под MWSE
Вступление
Ты хотел бы изучить функции MWSE ? Если ты еще не знаком с оригинальным скриптовым языком , советую прочитать учебник Ghаn-Buri-Ghan’а.
В целом , MWSE добавляет 80 новых функций , 2 новых типа .

Компилирование скриптов с расширенными функциями.

Чтобы скомпилировать скрипты с расширенными функциями , используйте такие программы ,как MWEditSE , либо MWEdit .
ТЕС КС не поддерживает скрипты под MWSE , но вы можете использовать КС для редактирования остальных вещей в вашем плагине, не относящимся к скриптам. Впрочем, вы можете использовать КС и для редактирования скриптов с расширенными функциями , но вам выдаст ошибку , когда вы попытаетесь скомпилировать скрипт в КС.
MWEditSE не проверяет скрипты на ошибки при компиляции , когда вы используете новые функции , поэтому – будьте бдительны и не допускайте ошибок.
Команду MenuTest 0 или ToggleMenus MWedit компилирует отлично от CS. Поэтому скрипты с этими командами можно компилировать только в CS, иначе отключаются Все меню. Более подробно это может разъяснить только автор MWedit.

Новые Ограничения и Полномочия в типах переменных.

Функции MWSE паботают с двумя типами переменных – STRING и REF . Оба обьявлены в скриптах ,использующих тип “long” . В обычных скриптах переменная типа “invitem” обрабатывается как STRING ( ограничение ) расширенными функциями . “invref” и “pcref” рассматриваются , как REF ( полномочие ) .

Значение новой команды “setx”

К сожалению , новые функции не могут быть простым способом объединены со стандартными функциями и командами. Команда “setx” используется , как заменитель стандартной команды “set” , когда вы используете новую функцию. Вы можете поставить значение только одной функции или ограничения по правую сторону от “”setx , но вы также можете ставить несколько значений по левую сторону , таких , как например “xInventory” , которая возвращает множественные значеня. .
Опять напомню вам, что компилятор не проверяет скрипты с расширенными функциями на ошибки, поэтому – будьте бдительны.

Подача контрольных блоков с 'ifx' и 'whilex'

Стандартные скриптовые команды ‘if’ и ‘while’ не работают , когда тело блока включает в себя расширенные команды , для их замены используем 'ifx' и 'whilex' . 'ifx' и 'whilex' еще не полностью поддерживают синтаксис , я пока что использую только одно значение для примера . 'ifx' и 'whilex' будут работать , только когда значение НЕ равно нулю . Также вы можете использовать ‘else’ вместе с 'ifx' , но ни в коем случае ‘elseif’ , а ‘elseufx’ также нету .
Смотрите пример
Старая версия скрипта

if ( state == 5 )
раздел для 5
else
раздел , если не равно 5
endif

Новая версия скрипта

set temp to ( state - 5 )
ifx ( temp )
раздел если не равно 5
Else
раздел Если равно 5
endif


Если оставить только первый кусок , то будет так

Старая версия

if ( state == 5 )
раздел если равно 5
endif


Новая версия
set temp to ( state - 5 )
ifx ( temp )
else
раздел если равно 5
endif


Функции

  Показать контент

 

Изменено пользователем morrow
Ссылка на комментарий
Поделиться на другие сайты

Функции (продолжение)

 

  Показать контент


Удачного скриптинга ! http://fullrest.ru/forum/public/style_emoticons/default/17.gif

Redoran_Warrior

Изменено пользователем morrow
Ссылка на комментарий
Поделиться на другие сайты

Скачать версию как документ Microsoft Word _____________________MWSE.rar
Скачать MWEditSE MWSE0.9.2_editor.zip
Скачать МВСЕ http://www.fullrest.ru/load/mwse.html

 

О функциях подробнее:

xsetEffectInfo

xGetClass

Изменено пользователем morrow
Ссылка на комментарий
Поделиться на другие сайты

есть такой тег, крайний справа в панельке под форматированием, для читабельности кусков кода стоило бы применить

Ссылка на комментарий
Поделиться на другие сайты

Скриптование под МВСЕ это конечно хорошее и полезное дело, молодец что взялся за перевод мануала, но переводить надо качественно и вдумчиво, и не только текст перевести, но и опробовать и проверить все что там написано, и если чтото есть то добавить от себя. А так основная ценность твоей работы это примеры скриптов, которые помогут новичкам желающим разобраться, для остальных будет прочще читать оригинальное руководство.

Самый суровый ляп - "reference" это ссылка, указатель на обьект, но никак не какие-то полномочия. И вообще перечитай внимательно все что ты написал, читаешь свой перевод описания функции и думай понятно ли тебе что эта функция делает и как её использовать в скрипте. Если непонятно - разбираешься, описываешь нормально, приводишь примеры скриптов. Без этого толку мало будет.

Если знаешь/разберешься неплохо бы написать про функции работы с файлами, сходу и по твоим описаниям там ничего не понятно

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
  • 3 года спустя...
При редактировании MWSE-плагинов в MWEdit не забывайте загружать мастер-файлы! По крайней мере, скрипты точно без этого не компилируются.
Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...
Закрепите пожалуйста, чтоб не убегала тема, а то много полезного справочного материала, чтоб не искать каждый раз.
Ссылка на комментарий
Поделиться на другие сайты

  В 1/18/2016 в 4:36 AM, mortuus сказал:

чтоб не искать каждый раз

Добавь в закладки браузера, два клика мышкой всего-то нужно сделать.
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...
  • 2 месяца спустя...

Люди, ну ёлы палы! Руководство лежит на форуме уже семь лет, и хоть кто нибудь бы сказал, что в нем есть ошибки в скрипте Фаргота:

1. В некоторых местах вместо "prospectref" написана необъявленная переменная "prospect"

2. строчку "stopscript siren_call" нужно вынести в самый конец, после endwhile

Использовал его как тест для редактора скриптов, столько времени потерял...

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...
  В 7/19/2016 в 9:30 PM, DlinnyiAl сказал:

Люди, ну ёлы палы! Руководство лежит на форуме уже семь лет, и хоть кто нибудь бы сказал, что в нем есть ошибки в скрипте Фаргота:

1. В некоторых местах вместо "prospectref" написана необъявленная переменная "prospect"

2. строчку "stopscript siren_call" нужно вынести в самый конец, после endwhile

Использовал его как тест для редактора скриптов, столько времени потерял...

Обычно не копируют эти скрипты, а пишут свои, по сути тут важно новый принцип работы понять, а использование функций лучше смотреть тут, тем более расписано в каких ситуациях может быть баг, к примеру есть функция xsettrap, ей можно выставить ловушки, либо снять их ( xsettrap 0 ), но написано, что ловушки нельзя выставить или снять с "не закрытых" объектов. Казалось бы мелочь, а можно багов кучи избежать, траты нервов и времени.
Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

   xsetEffectInfo

  Не очень удобный формат уроков, хрен что найдешь. есть предложение в шапке закрепить ссылки на рассмотренные функции.

Вот по просьбе Эла кой чего рассмотрел в новом мвсе, наверное можно поделиться, так как информации практически не найти, только методом проб и ошибок.

Функция xsetEffectInfo - редактирует характеристики имеющихся эффектов заклинаний. Функция очень перспективная в геймплейных модах. 

Рассмотрим пример:

  Цитата
Begin al
short result
setx result to xseteffectinfo 1279610963 "blind" 1 47 31 1 15 60 5 100
If (result == 1 ) 
Messagebox "Заклинание изменено"
else
Messagebox "Что-то пошло не так"
endif
stopscript Al
end

 

 

Значение result показывает на сколько удачно прошло изменение заклинания.

Теперь подробнее о значениях рассматриваемой функции:

  Цитата
setx result to xseteffectinfo 1279610963 "blind" 1 47 31 1 15 60 5 100

 

1279610963 -id spell, ещё есть id ингредиентов и зачарований,
"blind" -id заклинания
1 -номер эффекта в списке эффектов
47 -id эффекта слепоты
31 -для заклинаний влияющих на атрибут, тут скриптом просто пропускается значение
1 -касанием(0 -на себя, 2 - удаленная цель)
15-область
60 -длительность
5 -минимальное значение
100- максимальное значение эффекта
Всё вроде просто, но столкнулся со следующим:
1 Если номер эффекта в списке указать не равный 1, т.е. не соответствующий действительности, то в игре получим error
2 Если эффект, в нашем случае 47 не соответствует эффекту заклинания, то в игре получим error
И ещё добавлю для ясности, что и откуда брать - вот ссылка
id spell/enchant  ищем в разделе 6.7
ID заклинания берем из редактора
Номер эффекта в списке варьируется от 1 до 8
id эффекта берем в разделе  6.5
Остальное должно быть и так понятно.
P.S. не разбирался с флагами заклинаний, типа автоподсчета стоимости, скорее всего значения, указанные в пункте 6.6 должны суммироваться с 1279610963 
Изменено пользователем mortuus
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Рассмотрим функцию xGetClass

Функция определяет ряд параметров выбранного нами класса, либо класса нпк, имеет три маски(т.е. фильтр по заданным параметрам)

Рассмотрим следующий скрипт, определяющий главные, важные и второстепенные навыки игрока:

 

  Показать контент

Разберем детальнее что мы делаем:
setx refPlayer to xGetRef "Player" - эта строка обозначает то, что проверка класса будет выполнена для игрока.
setx classID name playable specialization attributes majorSkills minorSkills to refPlayer->xGetClass attributesMask majorMask minorMask -данная строка считывает значения с нашего класса.
classID -id класса
name -имя класса, то как мы его назвали, либо название выбранного класса
playable - игровой или нет, для собственных классов значение будет 0
specialization -специализация класса, воин, маг, вор. Для воина значение 0, для мага - 1, для вора - 2
attributes -выбранные атрибуты класса, те два навыка, которые мы выбираем. Складывается из суммы id атрибутов, значения можно взять из пункта 8.53.1
majorSkills -сумма id пяти главных навыков, значения можно взять из того же пункта мануала
minorSkills -сумма id пяти важных навыков, значения можно взять из того же пункта мануала
Далее идет подсчет суммы id главных и важных навыков, если значение подходит по условиям, то соответствующая глобальная переменная меняет своё значение на 1 для главных навыков и на 2 для важных, значение переменной для второстепенных навыков остается равным 0. 
 
Подытожим. В целом функция не вносит ничего нового, всё это можно было определить без mwse, но только после выхода из имперской канцелярии. Тут мы можем определить значения на любом этапе игры. Теоретически с этой функцией можно придумать какие-то интересные плагины, типа управления AI для разных классов, по факту же, никто этого делать не будет. Можно сделать так чтоб игрок получал информацию о классе встреченных нпк, но это также не очень интересно. Вообще функция не очень перспективная, на мой субъективный взгляд. 
 
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  В 12/23/2018 в 3:32 PM, mortuus сказал:

Не очень удобный формат уроков, хрен что найдешь. есть предложение в шапке закрепить ссылки на рассмотренные функции.

Сделал. Закинул под спойлер километры текста в постах топикстартера.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 недель спустя...

В копилку знаний, если у вас при старте мвсе-скрипта в игре вываливается ошибка:

Trying to RunFunction index greater than function count
The script will not run anymore.

Это значит, что вы внутри простых функций "if"-"elseif" вложили мвсе-команды, компилятор этого не любит.

 

Так же стоит отметить, что в таком случае надо использовать команду "ifx", причем обратной команды elseifx просто... не существует. Если вам она нужна, то иерархия функций должна быть просто вот такая:

else
    ifx ()
    endif
endif

Замечу что endif остается обычный.

 

Ну и да, еще эта патла не понимает булевые функции внутри ifx ( .. ), то есть:

set temp to ( al - 10)
ifx ( temp)
  ...
else ;как раз тут идет нужный нам блок
  ...
endif
Изменено пользователем aL☢
Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...

С помощью каких функций можно узнать текущее значение силы магического эффекта, действующего на актёра? Например, сколько у него сейчас бонуса атаки или светоча?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...