-
Публикаций
1 550 -
Зарегистрирован
-
Посещение
-
Победитель дней
67
Тип контента
Профили
Новости
База знаний
Форумы
Файлы
Галерея
Блоги
Весь контент Вис691
-
В принципе должно работать, проверяй. Естественно, скрипт вешается на квест. Но всё равно одна вещь меня не устраивает. Пока что, есть случай, когда скрипт будет работать в GameMode постоянно. Исправить нетрудно, подумай над этим.
-
Ну смотри. Ситуация следующая. Игрок скрафтил какую-то вещь, счётчик показывает значение 100. Как только он вышел из меню крафта это значение записалось в нашу переменную (ибо мы так скрипт построили). Теперь при следующем входе в меню игрок скрафтил ещё 5 предметов. Пока он в меню, в нашей переменной всё ещё значение 100. Как только он выходит, начинает работать блок GameMode. Скрипт выполняется построчно, т.е. когда он дойдёт до строки Let iCurrentValue := (GetPCMiscStat "Items Crafted"), значение в переменной поменяется. Что это значит? Это значит, что нужно поменять структуру скрипта: вначале в предыдущее значение записываем текущее (Let iPreviousValue := iCurrentValue), затем уже в текущее записываем значение из функции (Let iCurrentValue := (GetPCMiscStat "Items Crafted")). Надеюсь, теперь стало понятнее. Вообще, я бы ещё некоторые элементы в скрипте переставил, но об этом позже. Вот как правильно должен быть оформлен твой текущий кусок кода. Сравни его со своим оформлением. scn CraftingRewardXP Int iFlag; переменная флаг Int iPreviousValue; предыдущее значение Int iCurrentValue; текущее значение Int iCraftXP Begin MenuMode 1077 Let iFlag := 1 End Begin GameMode If iFlag ; <- вообще, лично я выношу всё, что в блоке Begin/End, хотя это и необязательно Let iCurrentValue := (GetPCMiscStat "Items Crafted") Let iPreviousValue := ? Let iCraftXP:= (iCurrentValue - iPreviousValue) If iCurrentValue > iPreviousValue ; <- само новое условие не нужно табулировать, только его содержимое Player.RewardXP iCraftXP Let iFlag := 0 ; <- у тебя тут не совпадал отступ с предыдущей строкой Endif Endif End
-
Не надо каждую новую строчку табулировать. Это делается только, когда новый блок появляется. Например, if/endif. А всё что внутри него должно быть с одинаковым отступом. If ... Команда 1 Команда 2 If ... Команда 3 Endif Endif Как можно видеть каждый Endif находится ровно под своим If'ом. Удобно, не правда ли? Она как раз таки текущее и показывает. Но ведь наша переменная не поменяется, пока строка на изменение переменной вновь не выполнится, правильно?
-
Ой, ой, ой, так нельзя. Он же даже не сохранится. Я специально про 2 блока написал. Begin MenuMode 1077 Let iFlag := 1 End Begin GameMode If iFlag ... Let iFlag := 0 Endif End
-
А что конкретно не понятно? Делаешь 2 блока в скрипте. В одном переменную увеличиваешь на 1, в другом делаешь проверку, а потом понижаешь.
-
Цитата из первого поста
-
Я бы весь функционал в GameMode вынес. А в MenuMode просто бы флаг менял. А дальше уже сверяем наше предыдущее количество предметов с текущим. Если они разнятся, значит игрок что-то скрафтил. Обновляем предыдущее значение и начисляем опыт. Ну и флаг сбрасываем, когда закончили.
-
Эх, мне кажется проблема в том, что ты думаешь немного не в том направлении. Мне почему-то кажется, что ты пытаешься представить ситуацию сразу в виде скрипта. Тут же всегда нужен другой подход, т.е. генерация самой идеи, а потом уже её перенос в код. Вот как бы я поступил, и как я пришёл к этому: нам нужно ловить выход из меню, так? А что это за меню такое вообще, дайте-ка глянем. Ага, "1077 = Recipe (New Vegas)", значит вход в него мы сможем отследить конструкцией Begin MenuMode 1077 ... End. Так, стоп, нам же выход нужен. Хм, что же происходит, когда мы выходим из меню крафта? Ой, точно, режим же меняется на GameMode, ибо больше никуда не выйти для продолжения игры! И что же нам делать? Заведём переменную-флаг. При входе в меню крафта будем менять её значение на 1. А в том же скрипте, но уже в блоке Begin GameMode сделаем проверку на [Наша переменная] == 1. Так мы точно можем сказать, что игрок был в меню и уже вышел из него. Можно работать с опытом и прочим. Достаточно понятно то, что я рассказал? Или ещё какие-то вопросы?
-
Да, именно
-
Ну вот, а кто-то про бездарность говорил. Итого, что мы имеем: 2 переменные для хранения количества скрафченных предметов: текущее значение и предыдущее значение. Скрипт должен запускать начисление опыта после выхода из меню крафта. Собственно, не вижу проблем начинать, всё вроде обсудили. Разве что как нам отловить момент выхода из меню? Для этого советую взглянуть на MenuMode и предложить мне идею Ну и конечно, перед началом советую задать все возникшие вопросы.
-
Раз уж такая тема появилась. В общем, мне нужно что-то в виде следующей фигурки: игральный кубик (а лучше сразу 2) на небольшой плоской платформе-подставке. Неплохо было бы, если они не просто лежали, а, грубо говоря, касались подставки и друг друга рёбрами. Т.е. если представить стол, мысленно кинуть на него кубики, и пока они перекатываются, как бы остановить время, то должно получиться нечто, что мне хотелось бы увидеть. Не знаю, как понятнее объяснить. Фигурка-статуэтка вся (или только кубики) должна быть золотая. Ну и с заделом на будущее, задам такой вопрос. Допустим я захочу, чтобы на подставке снизу были выгравированы какие-нибудь символы. Это нужно будет модель менять или можно реализовать при помощи карты нормали?
-
Да, идея с верстаком здравая, только лично я предложу делать все сразу после выхода из меню крафтинга. Таким образом мы сможем прогнать наш скрипт всего один раз. Теперь по поводу чисел. У нас в любой момент всегда есть доступ к общему числу скрафченных предметов, верно? Ситуация получается следующая: до активации игроком верстака там хранится, допустим, 100. Наш ГГ крафтит 5 предметов, и после выхода мы уже имеем 105. И казалось бы, что сложного? Берем 105 - 100 = 5 и работаем с этим числом. Только вот 100 исчезнет сразу же после крафта. Что нужно сделать, чтобы исправить эту проблему?
-
Окей, вот есть у нас количество скрафченных предметов за всё время. Как нам выудить число скрафченных в последний раз? И когда это стоит делать? Я в целом про начисление опыта. Придумать формулу нужно только, если соотношение не 1 exp за 1 предмет.
-
Не, совсем не то. Искомая функция - GetPCMiscStat, с нужным параметром, конечно. Что ж, теперь хотелось бы услышать идею в целом. Как вообще вам видится работа плагина? Что нужно учесть, когда нужно учесть? В общих чертах, без всяких скриптовых особенностей.
-
Что ж, первым делом очень простое задание: найти ту самую функцию. Подсказка: она находится в базовых, т.е. без всяких НВСЕ. Ну и вторая подсказка: она отвечает за кучу параметров, не только за скрафченные предметы.
-
Вообще эта тема немного не о том была, но т.к. она заброшена, то не особо важно. Не, это совсем не так. В скрипте чётко выведена некая формула, которая и на странице мода есть: Так что соотношение не 1 к 1. А теперь к теме. По 1 единице опыта за 1 крафт, хм. Должно быть более чем реально. А если учесть, что в игре аж испытание есть, то шансы повышаются в разы, т.к. игра всё-таки считает количество скрафченных предметов. Вопрос лишь в том, как там всё устроено? Если какая-то переменная глобальная или ещё что-нибудь? В идеале, конечно, найти бы какую-нибудь функцию, верно? И, да, действительно, искать не пришлось совсем. Она попалась мне буквально за первые 15 секунд. Вот только не скажу я вам её . Предлагаю следующую схему, раз уж вы тут написали: тот, кто хочет этим заняться сейчас мне ответит, а хочет ли он попытаться сделать этот мод самостоятельно? Пока что в моей голове всё выглядит достаточно просто, поэтому это будет неплохая тренировка, которая позволит вам разобраться с основами скриптинга (и даже немного с продвинутым уровнем). Как я вижу, минимум 2 человека хотят увидеть такое нововведение в игре, поэтому я всё же надеюсь, что кто-то вызовется добровольцем (а ещё лучше, если сразу оба ). А т.к. это школа, то с моей стороны будет обеспечена любая помощь по любым вопросом, подсказки и проверка сделанного. Ну а если никто не хочет и пальцем о палец бить, или ни у кого катастрофически не хватает времени (как у меня например), то пишите в тему "Вопросы по моддингу", как найду время, так постараюсь что-то сделать.
-
А меня всё устраивает
-
От всей души поздравляю победителя. Пускай и не было борьбы, но видно, что автор постарался на славу. Оформить сюжет в виде записок - очень интересный ход, кстати. Возьму на заметку.
-
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
А, ты в том смысле, что скрипт работает всегда. Ну а тут никак ничего не сделать. Однако у нас он видит условие, понимает, что оно не выполняется, и идёт себе дальше. И вся эта куча строк кода с волшебным циклом из Label и GoTo просто скипается. Что, естественно, положительно сказывается на производительности) -
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
А, чтобы айдишники убрать, удали команды Print и Printc. Я их для теста использовал) -
Не фанат их нового творчества и Danny в целом, но эта чем-то зацепила.
-
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
Вот это Let rCurCell := Player.GPC printc "%i" rCurCell If ListGetFormIndex aaHookUpAllowedCells rCurCell > -1 Вытащить в самое начало. И если внимательно посмотреть, то можно заметить, что проверка идёт до блока проверок. Касаемо задержки - там в самом начале set subLoops to 5 set loopDelay to 300 / subLoops Т.е. получаем 60 секунд. Вообще можно в тупую строку set fDelay to loopDelay заменить на set fDelay to [Задержка в секундах] -
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
Вроде так не будет работать. Эти условия отвечают за другое Так что, могу предложить уменьшить кулдаун, а строку с проверкой ячейки повесить на весь скрипт, т.е. в самое начало поднять те строки. -
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
Окей, давай. Как этот скрипт вызывается? Он висит на квесте или что? Но проблема всё-таки в определении ячейки значит. Я бы вначале с ней разобрался. Замени If rCurCell.IsInList aaHookUpAllowedCells на ListGetFormIndex aaHookUpAllowedCells rCurCell > -1 -
Вопросы по моддингу Fallout 3 и New Vegas
Вис691 ответил в теме Fallout 3 / NV - Мастерская по созданию модов
Так, ID верный (это ай ди ячейки), значит мы на верном пути. Докинь теперь после if (scanIndex == scanChance) строку printc "%n" scan И в блок if scan.IsInList aaHookUpsBannedNPC строку print "1" Сейчас мы проверим условие на НПС.