Redoran_Warrior Опубликовано 20 апреля, 2009 Жалоба Поделиться Опубликовано 20 апреля, 2009 (изменено) Я работаю над переводом мануала по скриптам МВСЕ . Некоторую часть уже перевел. Буду сюда класть частями .Писание скриптов под 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 )раздел для 5elseраздел , если не равно 5endif Новая версия скриптаset temp to ( state - 5 )ifx ( temp )раздел если не равно 5Elseраздел Если равно 5endifЕсли оставить только первый кусок , то будет так Старая версияif ( state == 5 )раздел если равно 5endif Новая версияset temp to ( state - 5 )ifx ( temp )elseраздел если равно 5endifФункцииТипы названые STRING и REF на самом деле поддерживаются , как переменные типа ‘long’ . Функции перечисленные с операцией REF-> на какой-то предмет , поддерживаются через оператор -> , также поддерживаются через функцию xSetRefReferences ( Полномочия )xSetRef, xRefType, xGetRef, xGetCombat, xGetPCTargetxFirstNPC, xFirstItem, xFirstStatic, xNextRefMath ( Математические функции )xDistance, xSqrt, xHypot, xDegRad, xRadDegxCos, xSin, xTan, xArcCos, xArcSin, xArcTanAI and Movement ( Программирование ИИ и движения )xAITravel, xPlace, xPosition, xPositionCell, xStartCombatInventory ( Инвентарь )xInventory, xNextStack, xContentListxAddItem, xRemoveItem, xHasItemEquippedAttributes ( Атрибуты )xGetBaseStr, xGetBaseInt, xGetBaseWil, xGetBaseAgixGetBaseSpe, xGetBaseEnd, xGetBasePer, xGetBaseLucNPC Properties ( Параметры у NPC(non-playing character ) )xIsFemale, xIsTrader, xIsTrainer, xIsProviderxGetService, xSetService, xModServicexGetBaseGold, xGetGold, xSetBaseGold, xSetGoldItem Properties ( Параметры у итемов )xGetValue, xGetOwner, xGetWeight, xGetEncumb, xGetQualityxGetCondition, xGetMaxCondition, xGetCharge, xGetMaxChargeKeyboard Input ( Раскладка клавиатуры )xKeyPressed, xTextInput, xTextInputAltFile I/OxFileRewind, xFileSeek, xFileReadText, xFileWriteTextxFileReadShort, xFileReadLong, xFileReadFloat, xFileReadStringxFileWriteShort, xFileWriteLong, xFileWriteFloat, xFileWriteStringStrings( Ограничения )xPCCellID, xRefID, xMyCellID, xGetName, xGetBaseIDxStringCompare, xStringLength, xStringParsexStringBuild, xLogMessage, xMessageFixxSetRef REF_referenceэта функция позволяет называть функции обьектов там , где стандыртный синтаксис не позволяетset myalchemyskill to myobject->GetAlchemy не работает , потому что стандартная ‘set’ не позволяет использовать переменные , как обьекты , поэтому мы будем писать так :xSetRef myobjectset myalchemyskill to GetAlchemyLONG REF->xRefTypeВидит тип полномочий обьекта и переводит тип обьекта в цифры1230259009 = ACTI (Активатор)1212369985 = ALCH (Алхимия(выпивка и т.п.))1095782465 = APPA (Аппарат для деланья зелий)1330467393 = ARMO (Армор )1263488834 = BOOK (Книжка)1414483011 = CLOT (Одежда)1414418243 = CONT (Контейнер)1095062083 = CREA (Кричер)1380929348 = DOOR (Дверь)1380404809 = INGR (Ингридиент)1129727308 = LEVC (Уровневый кричер)1230390604 = LEVI (Уровневый итем)1212631372 = LIGH (светильник)1262702412 = LOCK (Отмычка)1129531725 = MISC (Миск итем)1598246990 = NPC_ (Непись)1112494672 = PROB (Щуп)1095779666 = REPA (Чинилки)1414546259 = SCPT (Скрипт)1195658835 = SNDG (Генератор звука)1413567571 = STAT (Статик)1346454871 = WEAP (Оружие)REF REF->xGetRef STRING_objectidВозвращает значение к одному активным обьектам , распределяя по ID , или 0 , если не находит активных обьектов. Очень полезно для размещения Неписей и уникальных обьектов.REF REF->xGetCombatВозвращает значение к цели, на которую была совершена атака , или же 0 , если атака совершена не была .REF xGetPCTargetВозвращает значение обьекту , на который направлен прицел игрока , или же 0 , если игрок не смотрит ни на что , что могло бы по отношению к нему быть использованоREF xFirstNPCВозвращает значение определенному неписю или кричеру , который находится с игроком в одной ячейке , или же 0 , если там никого нет .REF xFirstItemВозвращает такое же значение , как и xFirstNPC , отличие в том , что теперь подразумеваются обьекты.REF xFirstStaticТо же самое , теперь со статиками.REF xNextRef REF_currentВозвращает значение 'next' одному из трех типов обьектов (NPC, Item, и Static) которые находятся с игроком в одной ячейке . Изменено 12 января, 2019 пользователем morrow Ссылка на комментарий Поделиться на другие сайты Поделиться
Redoran_Warrior Опубликовано 20 апреля, 2009 Автор Жалоба Поделиться Опубликовано 20 апреля, 2009 (изменено) Функции (продолжение) FLOAT REF->xDistance REF_targetПодобно оригинальному GetDistance , но берет значения переменной , несмотря на ограничение objected . Использует систему координат из ТЕС КС.FLOAT xSqrt FLOAT_valueВозвращает квадратный корень значения ( аналогично с GetSquareRoot из трибунала )FLOAT xHypot FLOAT_a, FLOAT_bВозвращает гипотенузу для сторон а,б и сFLOAT xDegRad FLOAT_degreesКонтвертит значение из градусов в радианы.FLOAT xRadDeg FLOAT_radiansИз радианов в градусыFLOAT xCos FLOAT_angleВозвращает косинус угла( угол дается в радианах )FLOAT xSin FLOAT_angleВозвращает синус угла ( угол дается в радианах )FLOAT xTan FLOAT_angleВозвращает тангенс угла( угол дается в радианах )FLOAT xArcCos FLOAT_valueВозвращает косинус дуги ( в радианах )FLOAT xArcSin FLOAT_valueСинус дуги ( в радианах )FLOAT xArcTan FLOAT_valueТангенс дуги ( в радианах )REF->xAITravel FLOAT_x, FLOAT_y, FLOAT_zАналог AITravel , чтобы согласовать переменные.REF xPlace STRING_objectidСтавит обьект objectID за игроком.REF->xPosition FLOAT_x, FLOAT_y, FLOAT_z, FLOAT_zRotАналог оригинальной функции Position.REF->xPositionCell FLOAT_x, FLOAT_y, FLOAT_z, FLOAT_zRot, STRING_cellnameАналог оригинальной PositionCellREF->xStartCombat REF_targetАналог оригинальной StartCombatSTRING, LONG, REF REF->xInventoryВозвращает три значения , которые основаны на инвентаре определенного контейнера , непися или кричера . Первое – ID итема в инвентаре. Второе – номер итема который найден . Третье – то ,полномочие , которое мы имеем относительно этого итема . Все три значения будут равны 0 ,если ничего в инвентаре нетSTRING, LONG, REF xNextStack REF_nextВозвращает значение следующего итема в инвентаре. Параметром этой функции является результат предыдущей функции xInventory . Попытки привязать другой вид значений этой функции приведет к ошибкам , и , возможно , краху игры. Если инвентарь непися , кричера или контейнера изменен , то полученное значение этой функции бесполезно, потому , что надополучить новое значение с измененным инвентарем .STRING, LONG, LONG, LONG, FLOAT, STRING, REF REF->xContentList REF_nextАльтернатива как для функции xInventory , так и для функции xNextStack , которая возвращает 7 значений основанных на состоянии определенного контейнера , непися или кричера . Если входной параметр равен 0 , то первый итем контейнера , непися или кричера возвращенаПример : set id count type value weight name next to container->xContentList nextПервый параметр – id – это ИД обьекта . Второй – который он по счету . Третий – тип по кодам , использованным в функции xRefType . Остальные три – цена , вес , имя .REF->xAddItem STRING_idstring, LONG_countАналог стандартной AddItem .REF->xRemoveItem STRING_idstring, LONG_countАналог стандартной RemoveItem .LONG REF->xHasItemEquipped STRING_objectidВозвращает 1 если непись или кричер чтото еквипнул ( меч и т.п ) , 0 – если ничего не еквипнул .FLOAT REF->xGetBaseStrВозвращает значение силы непися.FLOAT REF->xGetBaseIntВозвращает значение интеллекта непися .FLOAT REF->xGetBaseWilВозвращает значение воли непися.FLOAT REF->xGetBaseAgiВозвращает значение ловкости непися.FLOAT REF->xGetBaseSpeВозвращает значение скорости неписяFLOAT REF->xGetBaseEndВозвращает значение выносливости непися.FLOAT REF->xGetBasePerВозвращает значение привлекательности непися .FLOAT REF->xGetBaseLucВозвращает значение удачи непися.LONG REF->xIsFemaleВозвращает 1 если непись – женщина , 0 – если нет.LONG REF->xIsTraderВозвращает 0 , если непись или кричер не торговец , остальные значения – это сколько типов предметов он будет покупать .LONG REF->xIsTrainerВозвращает 1 , если непись тренирует навыки , 0 – если нет .LONG REF->xIsProviderВозвращает значения выше 0 ,если непись делает заклинания , учит заклинаниям , чинит предметы или зачаровывает. Возвращает 0 , если нет .LONG REF->xGetService LONG_maskКомбинация функций xIsTrader, xIsTrainer, и xIsProvider .Значение Занятие1 Торгует оружием2 Торгует арморами4 Торгует одеждой8 Торгует книжками16 Торгует ингредиентами32 Торгует отмычками64 Торгует щупами128 Торгует светильниками256 Торгует аппаратурой для деланья зелий512 Торгует чинилками1024 Торгует misc итемами2048 Учит заклинаниям4096 Торгует зачарованными предметами8192 Торгует зельями16384 Тренирует32768 Делает заклинания.65536 Зачаровывает предметы131072 Чинит арморы и оружиеREF->xSetService LONG_valueИспользуется для перемены параметров непися , через значение цифр . Например , Используя значение 8 мы сделаем , чтобы непись торговал книжками .REF->xModService LONG_valueМодифицирует уже выбранные значения занятий непися.LONG REF->xGetBaseGoldВозвращает значение , сколько золота есть у непися ( или кричера ).LONG REF->xGetGoldВозвращает значение количества золота , которым сейчас обладает непись для проведенияторговли.REF->xSetBaseGold LONG_amountИзменяет основное количество золота у непися ( или кричера )REF->xSetGold LONG_amountАналогично , но количество золота- которое есть сейчас.LONG REF->xGetValueВозвращает значение цены обьекта .STRING REF->xGetOwnerВозвращает 0 если обьект никому не принадлежит , ID владельца , если кому –то принадлежит , или ”unknown” если он принадлежит какой-то фракции .FLOAT REF->xGetWeightВозвращает значение веса обьекта.FLOAT REF->xGetEncumbВозвращает полный вес всех обьектов у непися , кричера или у контейнера .FLOAT REF->xGetQualityВозвращает значение качества аппаратов для деланья зелий , отмычек и щупов , чинилок.LONG REF->xGetConditionВозвращает текущее значение для армора , оружия , отмычек , щупов.LONG REF->xGetMaxConditionВозвращает максимальное условие оружию , отмычкам, чинилкам .FLOAT REF->xGetChargeВозвращает текущее использование , типа ”когда заклинание использовано” . Постоянный эффект и незачарованые вещи – возвращает 0.FLOAT REF->xGetMaxChargeПоказывает максимальный эффект заклинания.LONG REF->xKeyPressed LONG_codeПоказывает статус клавиатуры ( и кнопок мыши ) . Что-то похожее на GetPCSneaking , но вообще-то отслеживает , какая кнопка была нажата .Если входной параметр – цифровое значение клавиши ( между 1 и 254 ) будет остлеживать состояние заданной клавиши , если входной параметр 0 – отслеживать нажатие любой клавиши.LONG, STRING REF->xTextInput STRING_message, LONG_endcodeЭто позволяет сразу считать входной сигнал клавиатуры и результаты будут возвращены как ограничение Функция ждет ключа , который нужно набрать , и после этого предпримет одно из 3 действий. Если ключ подходит , то все возвращается. Если код соответствует стандартам ASCII , то возвращается цифра 0 . Если RETURN или BACKSPACE то ничаинается новая линия , или стирается старая .Примерlong endchar long message long length ifx ( endchar ) else DisablePlayerControls set endchar to 13 setx message to xStringBuild "" set length to 0 return endif ifx ( length ) else setx length message to xTextInput message endchar . MessageBox "" xMessageFix "%s %" message MessageBox " " MessageBox "Enter a message and press ENTER when it is complete." return endif EnablePlayerControls ; The message is complete nowLONG, STRING REF->xTextInputAlt STRING_message, LONG_endcodeФункция , идентичная функции xTextInput .xFileRewind STRING_filenameДвигает текущее положение чтения к началу скрипта.xFileSeek STRING_filename, LONG_offsetСдвигает позицию считывания в определенное место файла.LONG, ... xFileReadText STRING_filename, STRING_patternСчитывает текст с файла с определенной позиции считывания. Текущая позиция должна быть потом выбрана .xFileWriteText STRING_filename, STRING_format, ...Вписывает строку в файл в определенную позицию .LONG, SHORT, ... xFileReadShort STRING_filename, LONG_NumToReadСчитывает значение и число переменных типа SHORT ( 2 байта ) .LONG, LONG, ... xFileReadLong STRING_filename, LONG_NumToReadАналогично с xFileReadShort , но считывает переменные типа LONG .(4 байта)LONG, FLOAT, ... xFileReadFloat STRING_filename, LONG_NumToReadАналогично , но считывает переменные типа FLOAT.xFileWriteShort STRING_filename, SHORT_valueВписывает значение типа SHORT (2 байта) в файл в определенное местоxFileWriteLong STRING_filename, LONG_valueАналогично , тип LONGxFileWriteFloat STRING_filename, FLOAT_valueАналогично , тип floatSTRING xPCCellIDВозвращает строку с названием ячейки , в которой игрок.STRING REF->xMyCellIDВозвращает значение , в котором имя ячейки , в которой определенный обьект .STRING REF->xGetNameВозвращает имя обьекта , или 0 , если у обьекта нет имени ( не ID , а имя )STRING REF->xGetBaseIDВозвращает значение основного ID обьекта .LONG xStringCompare STRING_str1, STRING_str2Сравнивает 2 строки( обьекта ) в алфавитном порядке , и возвращает 0 , если они идентичны.LONG xStringLength STRING_stringВозвращает число character’зов во входной строке.xLogMessage STRING_format, ...вписывает отформатированные строки коды в файл – лог . ((MWScriptExtender.log) )xMessageFix STRING_message, ...Эта функция позволяет вам использовать переменные STRING вместе с функцией MessageBox. Во – первых , команда MessageBox должна сразу следовать после командыxMessageFix. Во – вторых , число строк для этой функции должно соответствовать числу строк в функции MessageBox. В – третьих , MessageBox имеет кнопки , но не может использовать переменные . И , в конце – концов , значения строк используемых на MessageBox будут заменены значениями xMessageFix .пример long thiscell setx thiscell to fid->xPCCellID xMessageFix "куда телепортнуть Фаргота ?" thiscell "Сейда Нин" "Красная Гора" MessageBox "Отправить Фаргота в локацию" "Моя ячейка" "Де он был" "Вос"Если вы в Кальдере , Арене Вивека или Альдруне , вам выдасткуда телепортнуть ФарготаКальдераСейда НинКрасная Гора куда телепортнуть ФарготаВивек, Округ АреныСейда НинКрасная Гора куда телепортнуть ФарготаАльдрунСейда НинКрасная гораПримеры скриптовЭтот скрипт отслеживает и выводит массу предмета , на который направлен прицел игрока begin getweight_of_pctarget long pctarget float weight StopScript getweight_of_pctarget setx pctarget to xGetPCTarget ; Возвращает 0 если нету цели if ( pctarget == 0 ) ; Нет цели , поэтому массу не показывает MessageBox "Вы не нашли предмета для вычисления массы." return endif ; гм, теперь если направил setx weight to pctarget->xGetWeight MessageBox "The item had weight %f" weight EndСкрипт , который заставит всех неписей мужиков , кроме Фаргота , бежать на место , на котором сейчас находится игрокbegin siren_call short call long prospectref long prospectid long temp float px float py float pz ; только для одного фрейма stopscript siren_call set px to player->GetPos X set py to player->GetPos Y set pz to player->GetPos Z ; проверяем , что за НПС или кричеры в ячейке setx prospectref to xFirstNPC whilex ( prospectref ) set call to 1 ; проверяем тип , так как мы не хотим , чтобы кричеры тоже шли на это место setx temp to prospectref->xRefType if ( temp != 1598246990 ) ; it's not an NPC set call to 0 endif ; проверяем , мужчина ли это setx temp to prospect->xIsFemale if ( temp != 0 ) ; it's not a male set call to 0 endif ; считываем ID этого НПС , Фаргот ли это setx prospectid to prospect->xGetBaseID setx temp to xStringCompare prospectid "fargoth" if ( temp == 0 ) ; it's Fargoth set call to 0 endif ; ifx ( call ) xSetRef prospect ForceRun prospect->xAITravel px py pz endif setx prospect to xNextRef prospect endwhile endУдачного скриптинга ! http://fullrest.ru/forum/public/style_emoticons/default/17.gifRedoran_Warrior Изменено 12 января, 2019 пользователем morrow Ссылка на комментарий Поделиться на другие сайты Поделиться
Redoran_Warrior Опубликовано 20 апреля, 2009 Автор Жалоба Поделиться Опубликовано 20 апреля, 2009 (изменено) Скачать версию как документ Microsoft Word _____________________MWSE.rarСкачать MWEditSE MWSE0.9.2_editor.zipСкачать МВСЕ http://www.fullrest.ru/load/mwse.html О функциях подробнее:xsetEffectInfoxGetClass Изменено 12 января, 2019 пользователем morrow Ссылка на комментарий Поделиться на другие сайты Поделиться
Майк Опубликовано 20 апреля, 2009 Жалоба Поделиться Опубликовано 20 апреля, 2009 есть такой тег, крайний справа в панельке под форматированием, для читабельности кусков кода стоило бы применить Ссылка на комментарий Поделиться на другие сайты Поделиться
Владимир Опубликовано 20 апреля, 2009 Жалоба Поделиться Опубликовано 20 апреля, 2009 Скриптование под МВСЕ это конечно хорошее и полезное дело, молодец что взялся за перевод мануала, но переводить надо качественно и вдумчиво, и не только текст перевести, но и опробовать и проверить все что там написано, и если чтото есть то добавить от себя. А так основная ценность твоей работы это примеры скриптов, которые помогут новичкам желающим разобраться, для остальных будет прочще читать оригинальное руководство.Самый суровый ляп - "reference" это ссылка, указатель на обьект, но никак не какие-то полномочия. И вообще перечитай внимательно все что ты написал, читаешь свой перевод описания функции и думай понятно ли тебе что эта функция делает и как её использовать в скрипте. Если непонятно - разбираешься, описываешь нормально, приводишь примеры скриптов. Без этого толку мало будет. Если знаешь/разберешься неплохо бы написать про функции работы с файлами, сходу и по твоим описаниям там ничего не понятно Ссылка на комментарий Поделиться на другие сайты Поделиться
Elderanon Опубликовано 12 мая, 2010 Жалоба Поделиться Опубликовано 12 мая, 2010 Какие-нибудь апдейты были уже/будут ? По этому мануалу сложновато учиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
raddimus Опубликовано 15 января, 2014 Жалоба Поделиться Опубликовано 15 января, 2014 При редактировании MWSE-плагинов в MWEdit не забывайте загружать мастер-файлы! По крайней мере, скрипты точно без этого не компилируются. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 Закрепите пожалуйста, чтоб не убегала тема, а то много полезного справочного материала, чтоб не искать каждый раз. Ссылка на комментарий Поделиться на другие сайты Поделиться
Scarab-Phoenix Опубликовано 18 января, 2016 Жалоба Поделиться Опубликовано 18 января, 2016 чтоб не искать каждый разДобавь в закладки браузера, два клика мышкой всего-то нужно сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 22 апреля, 2016 Жалоба Поделиться Опубликовано 22 апреля, 2016 xSetRef ужасно работает с функциями звука, так и не удалось заставить нормально скрипт сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 19 июля, 2016 Жалоба Поделиться Опубликовано 19 июля, 2016 Люди, ну ёлы палы! Руководство лежит на форуме уже семь лет, и хоть кто нибудь бы сказал, что в нем есть ошибки в скрипте Фаргота:1. В некоторых местах вместо "prospectref" написана необъявленная переменная "prospect"2. строчку "stopscript siren_call" нужно вынести в самый конец, после endwhileИспользовал его как тест для редактора скриптов, столько времени потерял... Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 8 августа, 2016 Жалоба Поделиться Опубликовано 8 августа, 2016 Люди, ну ёлы палы! Руководство лежит на форуме уже семь лет, и хоть кто нибудь бы сказал, что в нем есть ошибки в скрипте Фаргота:1. В некоторых местах вместо "prospectref" написана необъявленная переменная "prospect"2. строчку "stopscript siren_call" нужно вынести в самый конец, после endwhileИспользовал его как тест для редактора скриптов, столько времени потерял... Обычно не копируют эти скрипты, а пишут свои, по сути тут важно новый принцип работы понять, а использование функций лучше смотреть тут, тем более расписано в каких ситуациях может быть баг, к примеру есть функция xsettrap, ей можно выставить ловушки, либо снять их ( xsettrap 0 ), но написано, что ловушки нельзя выставить или снять с "не закрытых" объектов. Казалось бы мелочь, а можно багов кучи избежать, траты нервов и времени. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 23 декабря, 2018 Жалоба Поделиться Опубликовано 23 декабря, 2018 (изменено) xsetEffectInfo Не очень удобный формат уроков, хрен что найдешь. есть предложение в шапке закрепить ссылки на рассмотренные функции.Вот по просьбе Эла кой чего рассмотрел в новом мвсе, наверное можно поделиться, так как информации практически не найти, только методом проб и ошибок.Функция xsetEffectInfo - редактирует характеристики имеющихся эффектов заклинаний. Функция очень перспективная в геймплейных модах. Рассмотрим пример:Begin alshort resultsetx result to xseteffectinfo 1279610963 "blind" 1 47 31 1 15 60 5 100If (result == 1 ) Messagebox "Заклинание изменено"elseMessagebox "Что-то пошло не так"endifstopscript Alend Значение 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, т.е. не соответствующий действительности, то в игре получим error2 Если эффект, в нашем случае 47 не соответствует эффекту заклинания, то в игре получим errorИ ещё добавлю для ясности, что и откуда брать - вот ссылкаid spell/enchant ищем в разделе 6.7ID заклинания берем из редактораНомер эффекта в списке варьируется от 1 до 8id эффекта берем в разделе 6.5Остальное должно быть и так понятно.P.S. не разбирался с флагами заклинаний, типа автоподсчета стоимости, скорее всего значения, указанные в пункте 6.6 должны суммироваться с 1279610963 Изменено 23 декабря, 2018 пользователем mortuus Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 2 января, 2019 Жалоба Поделиться Опубликовано 2 января, 2019 Рассмотрим функцию xGetClassФункция определяет ряд параметров выбранного нами класса, либо класса нпк, имеет три маски(т.е. фильтр по заданным параметрам)Рассмотрим следующий скрипт, определяющий главные, важные и второстепенные навыки игрока: Begin Mort_DSshort state long refPlayerlong attributesMasklong majorMasklong minorMasklong classIDlong namelong playablelong specializationlong attributeslong majorSkillslong minorSkillsif ( chargenstate >= 0 )returnendif If ( state == 0 )setx refPlayer to xGetRef "Player"setx classID name playable specialization attributes majorSkills minorSkills to refPlayer->xGetClass attributesMask majorMask minorMask set state to 1endif if (state == 1 )if ( majorSkills >=67108864 )set majorSkills to majorSkills - 67108864set mort_PCHandToHand to 1endifif ( majorSkills >=33554432 )set majorSkills to majorSkills - 33554432set mort_PCSpeechcraft to 1messagebox "Красноречие главный навык"endifif ( majorSkills >=16777216 )set majorSkills to majorSkills - 16777216set mort_PCMercantile to 1endifif ( majorSkills >=8388608 )set majorSkills to majorSkills - 8388608set mort_PCMarksman to 1endifif ( majorSkills >=4194304 )set majorSkills to majorSkills - 4194304set mort_PCShortBlade to 1endifif ( majorSkills >=2097152 )set majorSkills to majorSkills - 2097152set mort_PCLightArmor to 1endifif ( majorSkills >=1048576 )set majorSkills to majorSkills - 1048576 set mort_PCAcrobatics to 1endifif ( majorSkills >=524288 )set majorSkills to majorSkills - 524288 set mort_PCSneak to 1endifif ( majorSkills >=262144 )set majorSkills to majorSkills - 262144 set mort_PCSecurity to 1endifif ( majorSkills >=131072 )set majorSkills to majorSkills - 131072set mort_PCUnarmored to 1endifif ( majorSkills >=65536 )set majorSkills to majorSkills - 65536set mort_PCAlchemy to 1endifif ( majorSkills >=32768 )set majorSkills to majorSkills - 32768 set mort_PCRestoration to 1endifif ( majorSkills >=16384 )set majorSkills to majorSkills - 16384set mort_PCMysticism to 1endifif ( majorSkills >=8192 )set majorSkills to majorSkills - 8192 set mort_PCConjuration to 1endifif ( majorSkills >=4096 )set majorSkills to majorSkills - 4096set mort_PCIllusion to 1endifif ( majorSkills >=2048 )set majorSkills to majorSkills - 2048 set mort_PCAlteration to 1endifif ( majorSkills >=1024 )set majorSkills to majorSkills - 1024set mort_PCDestruction to 1endifif ( majorSkills >=512)set majorSkills to majorSkills - 512set mort_PCEnchant to 1endifif ( majorSkills >=256 )set majorSkills to majorSkills - 256set mort_PCAthletics to 1endifif ( majorSkills >=128 )set majorSkills to majorSkills - 128set mort_PCSpear to 1endifif ( majorSkills >=64 )set majorSkills to majorSkills - 64set mort_PCAxe to 1endifif ( majorSkills >=32 )set majorSkills to majorSkills - 32set mort_PCLongBlade to 1endifif ( majorSkills >=16 )set majorSkills to majorSkills - 16set mort_PCBluntWeapon to 1endifif ( majorSkills >=8 )set majorSkills to majorSkills - 8set mort_PCHeavyArmor to 1endifif ( majorSkills >=4 )set majorSkills to majorSkills - 4set mort_PCMediumArmor to 1endifif ( majorSkills >=2 )set majorSkills to majorSkills - 2set mort_PCArmorer to 1endifif ( majorSkills >=1 )set majorSkills to majorSkills - 1set mort_PCBlock to 1endifset state to 2endifif (state == 2 )if ( minorSkills >=67108864 )set minorSkills to minorSkills - 67108864set mort_PCHandToHand to 2endifif ( minorSkills >=33554432 )set minorSkills to minorSkills - 33554432set mort_PCSpeechcraft to 2endifif ( minorSkills >=16777216 )set minorSkills to minorSkills - 16777216set mort_PCMercantile to 2endifif ( minorSkills >=8388608 )set minorSkills to minorSkills - 8388608set mort_PCMarksman to 2endifif ( minorSkills >=4194304 )set minorSkills to minorSkills - 4194304set mort_PCShortBlade to 2endifif ( minorSkills >=2097152 )set minorSkills to minorSkills - 2097152set mort_PCLightArmor to 2endifif ( minorSkills >=1048576 )set minorSkills to minorSkills - 1048576 set mort_PCAcrobatics to 2endifif ( minorSkills >=524288 )set minorSkills to minorSkills - 524288 set mort_PCSneak to 2endifif ( minorSkills >=262144 )set minorSkills to minorSkills - 262144 set mort_PCSecurity to 2endifif ( minorSkills >=131072 )set minorSkills to minorSkills - 131072set mort_PCUnarmored to 2endifif ( minorSkills >=65536 )set minorSkills to minorSkills - 65536set mort_PCAlchemy to 2endifif ( minorSkills >=32768 )set minorSkills to minorSkills - 32768 set mort_PCRestoration to 2endifif ( minorSkills >=16384 )set minorSkills to minorSkills - 16384set mort_PCMysticism to 2endifif ( minorSkills >=8192 )set minorSkills to minorSkills - 8192 set mort_PCConjuration to 2endifif ( minorSkills >=4096 )set minorSkills to minorSkills - 4096messagebox "Иллюзии второстепенный навык навык"set mort_PCIllusion to 2endifif ( minorSkills >=2048 )set minorSkills to minorSkills - 2048 set mort_PCAlteration to 2endifif ( minorSkills >=1024 )set minorSkills to minorSkills - 1024set mort_PCDestruction to 2endifif ( minorSkills >=512)set minorSkills to minorSkills - 512set mort_PCEnchant to 2endifif ( minorSkills >=256 )set minorSkills to minorSkills - 256set mort_PCAthletics to 2endifif ( minorSkills >=128 )set minorSkills to minorSkills - 128set mort_PCSpear to 2endifif ( minorSkills >=64 )set minorSkills to minorSkills - 64set mort_PCAxe to 2endifif ( minorSkills >=32 )set minorSkills to minorSkills - 32set mort_PCLongBlade to 2endifif ( minorSkills >=16 )set minorSkills to minorSkills - 16set mort_PCBluntWeapon to 2endifif ( minorSkills >=8 )set minorSkills to minorSkills - 8set mort_PCHeavyArmor to 2endifif ( minorSkills >=4 )set minorSkills to minorSkills - 4set mort_PCMediumArmor to 2endifif ( minorSkills >=2 )set minorSkills to minorSkills - 2set mort_PCArmorer to 2endifif ( minorSkills >=1 )set minorSkills to minorSkills - 1set mort_PCBlock to 2endifset state to 3endifendРазберем детальнее что мы делаем:setx refPlayer to xGetRef "Player" - эта строка обозначает то, что проверка класса будет выполнена для игрока.setx classID name playable specialization attributes majorSkills minorSkills to refPlayer->xGetClass attributesMask majorMask minorMask -данная строка считывает значения с нашего класса.classID -id классаname -имя класса, то как мы его назвали, либо название выбранного классаplayable - игровой или нет, для собственных классов значение будет 0specialization -специализация класса, воин, маг, вор. Для воина значение 0, для мага - 1, для вора - 2attributes -выбранные атрибуты класса, те два навыка, которые мы выбираем. Складывается из суммы id атрибутов, значения можно взять из пункта 8.53.1majorSkills -сумма id пяти главных навыков, значения можно взять из того же пункта мануалаminorSkills -сумма id пяти важных навыков, значения можно взять из того же пункта мануалаДалее идет подсчет суммы id главных и важных навыков, если значение подходит по условиям, то соответствующая глобальная переменная меняет своё значение на 1 для главных навыков и на 2 для важных, значение переменной для второстепенных навыков остается равным 0. Подытожим. В целом функция не вносит ничего нового, всё это можно было определить без mwse, но только после выхода из имперской канцелярии. Тут мы можем определить значения на любом этапе игры. Теоретически с этой функцией можно придумать какие-то интересные плагины, типа управления AI для разных классов, по факту же, никто этого делать не будет. Можно сделать так чтоб игрок получал информацию о классе встреченных нпк, но это также не очень интересно. Вообще функция не очень перспективная, на мой субъективный взгляд. Ссылка на комментарий Поделиться на другие сайты Поделиться
morrow Опубликовано 12 января, 2019 Жалоба Поделиться Опубликовано 12 января, 2019 Не очень удобный формат уроков, хрен что найдешь. есть предложение в шапке закрепить ссылки на рассмотренные функции.Сделал. Закинул под спойлер километры текста в постах топикстартера. Ссылка на комментарий Поделиться на другие сайты Поделиться
aL☢ Опубликовано 10 февраля, 2019 Жалоба Поделиться Опубликовано 10 февраля, 2019 (изменено) В копилку знаний, если у вас при старте мвсе-скрипта в игре вываливается ошибка: 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 Изменено 14 февраля, 2019 пользователем aL☢ Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 26 июля, 2019 Жалоба Поделиться Опубликовано 26 июля, 2019 С помощью каких функций можно узнать текущее значение силы магического эффекта, действующего на актёра? Например, сколько у него сейчас бонуса атаки или светоча? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти