raddimus Опубликовано 7 декабря, 2015 Жалоба Поделиться Опубликовано 7 декабря, 2015 Для тех, кто ещё не видел, оставлю это здесь. Сам до конца не вник, но звучит тревожно для любителей скриптинга чисто в КС и MWSE-ненавистников.Хрнчамд сказал:The script compiler in the CS has similar expression related bugs, but not as severe. This time, the CS compiler has copied garbage bytes onto the end of an If expression. In the expression: If ( "AA_Laurenna"->GetMysticism > ( Random 100 ) ) The Random 100 is correctly compiled into an opcode + argument, but the last two characters '00' have also been copied into the compiled data. This was only permissible by coincidence, the engine still mangles the high byte of the Random argument. You can see in the script that the branch body is commented out, probably because it never worked right. This is going to be a real pain to work around.There is already a better compiler available in the form of MWEdit. Realistically, very few authors or players will recompile scripts on the many existing mods. It's better to figure what checks can be added to ignore those few junk bytes. I may still have made a mistake in the patch too. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 7 декабря, 2015 Жалоба Поделиться Опубликовано 7 декабря, 2015 Для тех, кто ещё не видел, оставлю это здесь. Сам до конца не вник, но звучит тревожно для любителей скриптинга чисто в КС и MWSE-ненавистников.Хрнчамд сказал:Чёт не до конца понимаю, что тут написано. Но сама конструкция никаких затруднений не вызывает, всегда можно присвоить одной переменной значение мистицизма, другой дать рандом 100 и их уже сравнить.Может ли кто еще подсказать, как сделать, допустим, что-то вроде сторожевого кричера? Есть библиотека, дверной проем там открытый в общий зал, где есть NPС, но форма комнаты такая, что большая ее часть не просматривается. NPC ставить не хочу туда, но сигналку какую-то стоит поставить, чтобы безнаказанно тырить книги нельзя было... Во первых нужно бы знать какой функционал этот охранник несёт. Если он охраняет от игрока, то можно ставить любого кричура. Если он охраняет для игрока, то вопрос в том будут ли воры, если нет, то меняется AI fight, если воры будут, то уже скриптовать кричура надо. Ссылка на комментарий Поделиться на другие сайты Поделиться
usolo Опубликовано 7 декабря, 2015 Жалоба Поделиться Опубликовано 7 декабря, 2015 Чёт не до конца понимаю, что тут написано. Но сама конструкция никаких затруднений не вызываетдело не в конструкции, а в копировании лишней инфы в скрипт.Автор советует МВЭдит, в общем Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 20 июля, 2016 Жалоба Поделиться Опубликовано 20 июля, 2016 (изменено) Здравствуйте, мастера, прошу вашего совета. Такая проблема: есть плагин с NPC компаньоном, и он должен реагировать на определенный список локаций. Список столь велик, что банальным перебором с GetPCCell это не решаемо. "Частичное совпадение" названия локации тоже исключается. Хотелось бы выслушать ваше мнение по поводу решения данной задачи, т.к. мое решение - тот еще индусский код. И да, реакция используется не в диалоге. Изначально была идея повесить компаньону скрипт с "GetDistance" до метки (если объект вне текущего interior, то он возвращет 0), но к сожалению он определяет расстояние только для уникального объекта - либо для последнего добавленного в CS объекта, NPC или кричера. Пришлось отказаться. Вот, собсвенно то, до чего я додумался: в каждую локацию, в пустоту на карте помещается объект "метка" со скриптом, который раз в секунду изменяет на +1 определенную глоб. переменную. А NPC каждые 2 секунды проверяет, изменилась ли переменная (значит локация помечена) или нет (значит реакция не нужна). Изменено 20 июля, 2016 пользователем DlinnyiAl Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 8 августа, 2016 Жалоба Поделиться Опубликовано 8 августа, 2016 if callchanged == 1startscript ID_lockendifв id_lock проверяем нужные нам локации, при совпадении стартуем ещё один скрипт с реакцией на локацию, либо выставляем глобальную переменную, которая отслеживается в локальном скрипте на нпк и задаёт его реакцию, а ещё в любом случае завершаем id_lock. Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 9 августа, 2016 Жалоба Поделиться Опубликовано 9 августа, 2016 в id_lock проверяем нужные нам локацииСпасибо, но как я уже писал выше, список столь велик, что перебором это не решить. Да и есть мнение, хоть и недоказанное, что cellchanged не сработает при телепортации. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 10 августа, 2016 Жалоба Поделиться Опубликовано 10 августа, 2016 Спасибо, но как я уже писал выше, список столь велик, что перебором это не решить. Да и есть мнение, хоть и недоказанное, что cellchanged не сработает при телепортации.внушительный список меньше тысячи локаций? Тогда строчек вам хватит. Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 10 августа, 2016 Жалоба Поделиться Опубликовано 10 августа, 2016 > ...есть мнение, хоть и недоказанное, что cellchanged не сработает при телепортации.это из Morrowind_Scripting_for_Dummies_8.1, а вот в 9.0: CellChanged returns 1 for one frame when player changes cells. It doesn’t return 1 for scripted teleporting or magic teleporting. CellChanged returns true almost immediately after the player changes cells. This means a local script running in an interior cell won't fire when the user leaves a cell, but rather when the player enters the cell. Scripted teleporting may trigger CellChanged if the script is global or targeted (local scripts will not trigger it). (Forum info / Zennorious, Tamandra) Note: CellChanged doesn't always trigger, even if the player enters the cell via a normal teleport door. Possibly scripts running in the cell can have some effect on this, somehow. ForceGreeting seems to muck it up in particular (and no there wasn't a menumode return in that script). > ...список столь велик, что перебором это не решить. да хоть все что есть... только нужно помнить об ограничениях в скриптах:вложенность elseif - что-то около не более 10размер скрипта - до 30 кб в конце проверки из первого вызывается второй и т.д... Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 12 августа, 2016 Жалоба Поделиться Опубликовано 12 августа, 2016 > ...есть мнение, хоть и недоказанное, что cellchanged не сработает при телепортации.это из Morrowind_Scripting_for_Dummies_8.1, а вот в 9.0: > ...список столь велик, что перебором это не решить. да хоть все что есть... только нужно помнить об ограничениях в скриптах:вложенность elseif - что-то около не более 10размер скрипта - до 30 кб в конце проверки из первого вызывается второй и т.д...Забыли упомянуть ограничение в символах и строках Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 Ув. olol, простите мне мой английский, но на мой взгляд, в вашей цитате из девятой редакции MSD приведено ровно тоже самое, что я написал. Что cellchanged не сработает при телепортации:It doesn’t return 1 for scripted teleporting or magic teleporting.И что хуже, есть уточнение, что CellChanged может не сработать даже при обычном перемещении через дверь:CellChanged doesn't always trigger, even if the player enters the cell via a normal teleport door.Однако, вы разумеется правы, не стоит плодить лишние сущности. Уже сделал список локаций, постараюсь разбить их поэффективнее на малые части и проверить через массив скриптов. Спасибо за ваши с mortuus советы насчет скриптов. От себя добавлю, что не стоит забывать и про максимальное количество возможных условий if-elseif в одном скрипте (127). С учетом множественных проверок это даже более важно, чем максимальный размер скрипта.____P.S.:внушительный список меньше тысячи локаций? Тогда строчек вам хватит.Больше. Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 Больше.Stopscript AStartscript BНо если бы вы точнее объяснили чего хотите, то, возможно, вам что-то более дельное посоветовали. Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 mortuusДа, спасибо, olol уже это предлагал, действительно гораздо более "чистый" способ с точки зрения загрязнения игрового мира. Гораздо более трудоемкий, чем предложенный мной, но чистый.Но если бы вы точнее объяснили чего хотите, то, возможно, вам что-то более дельное посоветовали.По сути, если вкратце - прикручиваю озвучку Вильи из Скайрима к компаньону в Морр. Как это выглядит с точки зрения моего вопроса: по таймеру компаньон говорит фразу из заготовленного списка + в зависимости от местности + при наличии определенных условий расы/пола/здоровья/погоды/времени суток и т.д. Как-то так.При использовании описанных мной меток, было бы достаточно раскидать их по локациям. А так, нужно over1000 локаций прописывать в скриптах. И по сути, что-то более дельное сложно предложить, все-таки скриптовый язык Морра весьма скуден, а MWSE я не буду использовать исходя из его некоторой глюковатости. Но это уже не проблема, гораздо сложнее будет найти способ, чтобы враги не нападали на компаньона в драке (нечего у меня прокачку отбирать). Конечно, можно сделать компаньона трусом, чтобы он сразу убегал, но в таком случае враги иногда начинают его преследовать, а такой паровоз это уже ни в какие ворота... Самое обидное, что та же Emma явно пыталась решить эту проблему в своих плагинах, но ни один из её способов не работает. Пока что не придумал ничего умнее, чем дать каждому зверю\изначально_агрессивному_npc скрипт, либо встроить в его скрипт, если он есть: if DontAttackCompanion == 1 if GetTarget id_Companion == 1 StopCombat StartCombat, Player endif endif Но затронуть столько npc - это индусский код чистой пробы. Думаю, что сделаю две версии: с возможностью режима пацифиста и без.Ну вот как-то так, объяснил поточнее все свои текущие трудности, с которыми столкнулся, спасибо за внимание и за прошлые и будущие советы) Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 > Scripted teleporting may trigger CellChanged if the script is global or targeted (local scripts will not trigger it). (Forum info / Zennorious, Tamandra)разве это не говорит о том, что работает, но только в глобальных и направленных скриптах ? > CellChanged может не сработать даже при обычном перемещении через дверь... & ForceGreeting...это имеет значение, когда nps говорит фразу добавляющую игроку квестовые топики.и при случайном несрабатывании которых может испортиться сюжет. а при обычных приветствиях - без разницы (типа: вздохнул, почесался...) ну, даже если и не сказал и что ? Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 21 августа, 2016 Жалоба Поделиться Опубликовано 21 августа, 2016 разве это не говорит о том, что работает, но только в глобальных и направленных скриптах ?Ну как сказать, "may trigger" еще можно перевести, как "может сработать, а может и не сработать, как повезет". В общем, как и с дверьми. Привносит в рандом еще больший рандом, но работать с этим можно, конечно. Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 22 августа, 2016 Жалоба Поделиться Опубликовано 22 августа, 2016 я не знаток анГельского... ситуация, когда что-то не срабатывает, связана именно с многократными запусками других скриптов.в этом случае меняется порядок их обработки и часть скриптов может запуститься в следующем фрейме т.е. CellChanged (как впрочем и другая одноразовая проверка) может не сработать в последующих скриптах,но если она будет только в первом, то проблемы быть не должно. Ссылка на комментарий Поделиться на другие сайты Поделиться
DlinnyiAl Опубликовано 22 августа, 2016 Жалоба Поделиться Опубликовано 22 августа, 2016 ololОоо, это уже действительно интересно, большое спасибо за такую информацию! Ссылка на комментарий Поделиться на другие сайты Поделиться
aL☢ Опубликовано 22 декабря, 2016 Жалоба Поделиться Опубликовано 22 декабря, 2016 Скриптом можно добавить один левельный список в другой левельный список? Ссылка на комментарий Поделиться на другие сайты Поделиться
aL☢ Опубликовано 23 декабря, 2016 Жалоба Поделиться Опубликовано 23 декабря, 2016 Все еще актуальный вопрос. Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 23 декабря, 2016 Жалоба Поделиться Опубликовано 23 декабря, 2016 По идее, если в уровневых списках есть вложенные другие списки, то почему бы они не добавлялись ?Все ID объектов в морке уникальны и ошибок быть не должно. Ссылка на комментарий Поделиться на другие сайты Поделиться
aL☢ Опубликовано 23 декабря, 2016 Жалоба Поделиться Опубликовано 23 декабря, 2016 По идее, если в уровневых списках есть вложенные другие списки, то почему бы они не добавлялись ?Все ID объектов в морке уникальны и ошибок быть не должно. Понятно. Значит будем тестить. Спасибо за ответ, Олол! Ссылка на комментарий Поделиться на другие сайты Поделиться
raddimus Опубликовано 6 января, 2017 Жалоба Поделиться Опубликовано 6 января, 2017 Есть у меня два вопроса. 1) Работает довольно длинный глобальный скрипт, в котором много проверок на предметы и сложение количества найденных. Если сначале его поставить "Return" при условии "If ( MenuMode == 0 )", он будет меньше грузить игру вне инвентаря, чем без такого разворота? Обратная проверка часто используется в скриптах только потому, что просто нет смысла их выполнять в статичном инвентаре или же они могут заметно замедлить работу с интерфейсом? 2) Функция Menumode == 1 сработает в любом меню или только в собственно инвентаре? Конкретно интересуют интерфесы контейнеров и инициализация диалога с НИП. Ссылка на комментарий Поделиться на другие сайты Поделиться
usolo Опубликовано 6 января, 2017 Жалоба Поделиться Опубликовано 6 января, 2017 1. Да, это поможет.2. В любом, кажется Ссылка на комментарий Поделиться на другие сайты Поделиться
SlowPoke Опубликовано 6 января, 2017 Жалоба Поделиться Опубликовано 6 января, 2017 Есть у меня два вопроса. 1) Работает довольно длинный глобальный скрипт, в котором много проверок на предметы и сложение количества найденных. Если сначале его поставить "Return" при условии "If ( MenuMode == 0 )", он будет меньше грузить игру вне инвентаря, чем без такого разворота? Обратная проверка часто используется в скриптах только потому, что просто нет смысла их выполнять в статичном инвентаре или же они могут заметно замедлить работу с интерфейсом? 2) Функция Menumode == 1 сработает в любом меню или только в собственно инвентаре? Конкретно интересуют интерфесы контейнеров и инициализация диалога с НИП. Возможен вариант, когда скрипт должен отрабатывать в конкретном меню инвентаря (например, открыв конкретный контейнер), тогда можно использовать запуск глобального скрипта из локального. Таким образом я делал проверку на забор аппаратуры в контейнерной алхимии. Сами локальные скрипты на аппаратуре работают только во время активации и запускают нужный глобальный скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 6 января, 2017 Жалоба Поделиться Опубликовано 6 января, 2017 режим меню-моде - сам по себе тормозной до ужаса.именно по этому и стараются его не нагружать лишним. любой интерфейс и диалог - это меню-моде (с книгами из-за этого есть проблемы). Ссылка на комментарий Поделиться на другие сайты Поделиться
mortuus Опубликовано 6 января, 2017 Жалоба Поделиться Опубликовано 6 января, 2017 Если бы задача была описана более явно, то можно было бы получить более детальный ответ, а может быть и альтернативное решение задачи. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти