Varang Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 begin AI_USING_POTION float timerHealth5 if ( GetEffect, sEffectRestoreHealth ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания StopScript AI_USING_POTION set timerHealth5 to ( timerHealth5 + getsecondspassed ) if ( timerHealth5 >= 3 ) ; 3 секунд откат return set timerHealth5 to 0 endif endif elseif ( GetItemCount "p_restore_health_e" > 0 ) endif set timerHealth5 to 0 Equip "p_restore_health_e" 1 return endif endif Скрипт почти заработал как надо. Паузы в выпивании зелья уже есть. Но блин, теперь зелья стали у НПС, походу, бесконечными - команда Equip отрабатывается без конца, давая НПС-ам новое и новое зелье, даже после окончания тех, что в запасе (у этой команды есть такая штука, еще в MCP это писалось, что если инвентарь пуст, зелье берется из "неоткуда". Походу, у меня косяк в установке на проверку таймера, в результате этой ошибки каким-то образом отменилась проверка на обязательное наличие зелья в интвентаре, без чего Equip работать не должно... Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 (изменено) StopScript AI_USING_POTIONЭто лишнее вообще. У вас скрипт будет постоянно выключаться, когда таймер еще не отработал.elseif ( GetItemCount "p_restore_health_e" > 0 )endifset timerHealth5 to 0Equip "p_restore_health_e" 1returnendifendifЗачем set timerHealth5 to 0? И почему Equip находится не в блоке с GetItemCount, а за его пределами? Изменено 19 марта, 2019 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 20 марта, 2019 Жалоба Поделиться Опубликовано 20 марта, 2019 Это лишнее вообще. У вас скрипт будет постоянно выключаться, когда таймер еще не отработал. Зачем set timerHealth5 to 0? И почему Equip находится не в блоке с GetItemCount, а за его пределами? а как остановить, return-ом? И set timerHealth5 to 1 получается, перед ним Equip, да? Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 20 марта, 2019 Жалоба Поделиться Опубликовано 20 марта, 2019 А зачем останавливать и зачем менять таймер в данном случае? Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 20 марта, 2019 Жалоба Поделиться Опубликовано 20 марта, 2019 Ну а как бы вы сделали? Таймер в разделе питья вообще не нужен что ли? Надо же чтобы нпс перестал пить зелье на 3 сек Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 20 марта, 2019 Жалоба Поделиться Опубликовано 20 марта, 2019 Ну а как бы вы сделали? Таймер в разделе питья вообще не нужен что ли? Надо же чтобы нпс перестал пить зелье на 3 секЯ выше уже объяснял, как бы я сделал, не? Не пить зелье, если таймер на него больше нуля. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 20 марта, 2019 Жалоба Поделиться Опубликовано 20 марта, 2019 Скрипт почти заработал как надо. Паузы в выпивании зелья уже есть. Но блин, теперь зелья стали у НПС, походу, бесконечными - команда Equip отрабатывается без конца, давая НПС-ам новое и новое зелье, даже после окончания тех, что в запасе (у этой команды есть такая штука, еще в MCP это писалось, что если инвентарь пуст, зелье берется из "неоткуда". Походу, у меня косяк в установке на проверку таймера, в результате этой ошибки каким-то образом отменилась проверка на обязательное наличие зелья в интвентаре, без чего Equip работать не должно... Дык проверка ничего не делает у вас, должно быть так:if ( GetItemCount "p_restore_health_e" > 0 )Equip "p_restore_health_e" 1endif Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 21 марта, 2019 Жалоба Поделиться Опубликовано 21 марта, 2019 (изменено) Это очень важные скрипты которые заражают повторно если было вылечено, и dontsave чтоб кучу места в чейве не занимать. Но ведь болезни прописаны изначально у всех заражённых, и если вылечить одного, то логично что он исцелится и будет прописан в сейве без болезней, в то время как все новые заспавненные копии этого существа будут по-прежнему с болезнями. Ведь так? _________________________________ В игре есть куча заклинаний, которые по всем признакам должны были быть покупаемы ГГ, но их никто не продаёт. Что если вместо сотни разбросанных по миру активаторов сделать 1 стартовый глобальный скрипт, который разом добавит все недостающие спеллы указанным торговцам? Если применять AddSpell, то придутся хотябы раз загрузиться в локации с торговцем чтобы скрипт отработал своё. Но что если применить аналогичную МВСЕ-команду? begin newspellslong pcRefshort done if (done == 1)Stopscript "newspells"returnendifSetx pcRef to xGetRef "Marayn Dren"pcRef->xAddSpell "frost bolt" 1set done to 1 Stopscript "newspells"End Такое будет работать? Описание команды на вики крайне скудное. Запустится 1 раз при старте новой игры, раздаст спеллы и всё. Останутся ли эти спеллы у учителей в сохраении? ____________Хотя погодите, с простым AddSpell это ж будет тоже глобальный скрипт, так что и ограничения на присутствие в одной ячейке не будет? Изменено 21 марта, 2019 пользователем Dagot_Prolaps Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 21 марта, 2019 Жалоба Поделиться Опубликовано 21 марта, 2019 Ребят, я уже пробовал несколько раз, и ввиду того, что скрипты не писал особо никогда, плюхаюсь и не могу сделать как надо. Помогите, пожалуйста, на 1м варианте, а дальше я сам по шаблону... begin AI_USING_POTION float timerHealth5 if ( GetEffect, sEffectRestoreHealth ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияStopScript AI_USING_POTIONset timerHealth5 to ( timerHealth5 + getsecondspassed )if ( timerHealth5 >= 3 ) ; 3 секунд откатreturnset timerHealth5 to 0endifendif elseif ( GetItemCount "p_restore_health_e" > 0 )Equip "p_restore_health_e" 1endifset timerHealth5 to 1returnendifendifВот последний вариант... Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 @ Dagot_Prolapsесли один вылечится, то вылечатся все копии и наоборот.У болезней и по моему еще у проклятий такая фишка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 Varang, я же написал скрипт на предыдущей странице. Замени там выпивку на зелья лечения, addspell на equip, getweappondrawn на gethealtgetratio<40. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 если один вылечится, то вылечатся все копии и наоборот. Ок, а что если совместить этот скрипт с рандомизатором статов, прикрутив и к нему рандомизацию и поставив сразу после блока с рандомизатором статов? Вот пример для моровиков: short doneshort varfloat statfloat coef if ( done == 1 )returnendif set stat to GetStrengthset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetStrength stat set stat to GetEnduranceset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetEndurance stat set stat to GetIntelligenceset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetIntelligence stat set stat to GetWillpowerset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetWillpower stat set stat to GetAgilityset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetAgility stat set stat to GetSpeedset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetSpeed stat set stat to GetLuckset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetLuck stat set stat to GetMagickaset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetMagicka stat set stat to GetFatigueset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetFatigue stat set stat to GetHealthset coef to Random 41set coef to ( coef + 80 )set coef to ( coef / 100 )set stat to ( stat * coef )SetHealth stat set stat to GetScaleset coef to ( coef - 1 )set coef to ( coef * 0.75 )set coef to ( coef + 1 ) set stat to ( stat * coef )setScale stat if ( GetBlightDisease == 0 )set var to Random 4if ( var == 0 )AddSpell "ash woe blight"elseif ( var == 1 )AddSpell "black-heart blight"elseif ( var == 2 )AddSpell "chanthrax blight"elseAddSpell "ash-chancre"endifendif set done to 1 End Такое нормально сработает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 (изменено) Varang, я же написал скрипт на предыдущей странице. Замени там выпивку на зелья лечения, addspell на equip, getweappondrawn на gethealtgetratio<40.А причем там проверка на глюк? В моем-то скрипте нет "глюка" Неужели сложно показать отдельным цветом в одном блоке, как, что и куда нужно вставить в мой конкретный скрипт, чтобы я сделал по аналогии, тем более, если вы знаете. А не задавать наводящие вопросы нубу "а что тут делает таймер" или кидать фразы вроде "сделай как я вон там, где ты все равно ни шиша не понимаешь"? Вот последняя РАБОЧАЯ версия скрипта, где благодаря предыдущей вашей помощи работает все, кроме тайминга - зелья пьются залпом зараз. Помогите уже доделать, пожалуйста, я уже устал что-то делать неправильно, дошло до того, что у меня НПС пьют зелья сразу, как я входу в локацию...дайте уже возможность человеку поиграть, а не сидеть 3й день в кс и тупо тестя 1 приевшуюся локацию по 15 разу! Спасибо.begin AI_USING_POTION float timerHealth5 if ( GetEffect, sEffectRestoreHealth ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияStopScript AI_USING_POTIONset timerHealth5 to ( timerHealth5 + getsecondspassed )if ( timerHealth5 >= 3 ) ; 3 секунд откатreturnset timerHealth5 to 0endifendif elseif ( GetItemCount "p_restore_health_e" > 0 )endifset timerHealth5 to 0Equip "p_restore_health_e" 1returnendifendif Изменено 22 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 if ( GetBlightDisease == 0 ) set var to Random 4 if ( var == 0 ) AddSpell "ash woe blight" elseif ( var == 1 ) AddSpell "black-heart blight" elseif ( var == 2 ) AddSpell "chanthrax blight" else AddSpell "ash-chancre" endif endifА зачем этот рандом?А причем там проверка на глюк? В моем-то скрипте нет "глюка"Это локальная переменная Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 А зачем этот рандом?Для универсальности, чтобы не плодить скрипты заражённых. Кстати, как думаете, если специально для поднявшихся спящих сделать особый скрипт, с блоком Ауры Мора сразу перед стандартным блоком рандомизации статов: if ( GetDisabled != 1 )if ( GetDistance Player <= 1000 )set timer to ( timer + GetSecondsPassed )if timer > 3set var to Random 4if ( var == 0 )player->addspell "ash woe blight"elseif ( var == 1 )player->addspell "black-heart blight"elseif ( var == 2 )player->addspell "chanthrax blight"elseplayer->addspell "ash-chancre"endifset timer to 0endifendifendif Это устроит ад и израиль неподготовленному игроку, решившему полезть на спящего, который ещё не стал Нереварином. Пока ГГ вблизи спящего, каждые 3 секунды он будет заражаться рандомной моровой болезнью. Подводные камни? Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 if ( GetBlightDisease == 0 ) set var to Random 4 if ( var == 0 ) AddSpell "ash woe blight" elseif ( var == 1 ) AddSpell "black-heart blight" elseif ( var == 2 ) AddSpell "chanthrax blight" else AddSpell "ash-chancre" endif endif if ( var == 0 ) player->addspell "ash woe blight" elseif ( var == 1 ) player->addspell "black-heart blight" elseif ( var == 2 ) player->addspell "chanthrax blight" else player->addspell "ash-chancre" endif set timer to 0Ты собрался Морта по укуренности скриптов переплюнуть? Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 А в чём укуренность? В мооре нет аур, хотя это такой элементарный типовой скрипт. Я лишь хочу узнать, не упустил ли чего-то важного, что может сказаться на работоспособности игры.В частности, как на ней скажется отсутствиеDontSaveObject? Ссылка на комментарий Поделиться на другие сайты Поделиться
Ao3 Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 (изменено) Это устроит ад и израиль неподготовленному игроку, решившему полезть на спящего, который ещё не стал Нереварином. Пока ГГ вблизи спящего, каждые 3 секунды он будет заражаться рандомной моровой болезнью. Подводные камни? Пусть он лучше кастует спелл с большой площадью поражения, и если игрок попадается в него - то по GetSpellEffect вешается мор. Изменено 22 марта, 2019 пользователем Ao3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 А вот это уже лишний глобальный стартовый скрипт, который будет работать и нагружать игру вечно. Я правильно понял, что если мы вешаем на кричура рандомизатор статов в том или ином виде, то строчка DontSaveObject противопоказана? Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 В первом случае это не заразит как надо, для существ с одним id один набор болезней. Там всё продумано, и работает как надо. Вот ты взял и забаговал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 (изменено) А для больных существ того же блудмуна вообще нет ни скрипта, ни DontSaveObjectОни тоже забагованы? Если не брать в счёт "бага" разнообразие болезней у существ с одним ИД, то в чём принципиальная разница между стандартным скриптом заражения и тем же скриптом, но без DontSaveObject ? Если уж повторно заразил скриптом - наоборот надо сохранять эти данные, а не запрещать сохранение. Изменено 22 марта, 2019 пользователем Dagot_Prolaps Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 Да, для бладмуна возможен потенциальный баг, но скорей всего фиксить никто не будет, игрок все равно не узнает из игры забаговали существа или нет.Ну писали же уже про DontSaveObject ,а из названия не ясно? НеСохранятьОбъект Ссылка на комментарий Поделиться на другие сайты Поделиться
olol Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 (изменено) @Varangу тебя написана чушь в скрипте потому и лень разбираться...endif на 3 больше чем if, скрипт не рабочий... если смысл его в том, чтобы выпивалось зелье восстановления при окончании действия и при наличии бутылька то попробуй так: begin AI_USING_POTION float timerHealth5 if ( timerHealth5 > 0 ) set timerHealth5 to ( timerHealth5 - getsecondspassed )elseif ( GetEffect, sEffectRestoreHealth )elseif ( GetItemCount "p_restore_health_e" > 0 ) Equip "p_restore_health_e" 1 set timerHealth5 to 3endif end скрипт должен висеть на соответствующем нпс (направленный)условия запуска и останова его должен управлять другой @Dagot_ProlapsDontSaveObjectИспользуя DontSaveObject, можно избежать раздражающего сообщения "save game data has changed".это когда ты вылечил тварь, вышел в другую ячейку, там она опять стала зараженной, а потом вернулся обратно. BM_bear_brown Чумной медведьBM_wolf_red Чумной волк они исправлены в GFM 6хх и 7хх Изменено 22 марта, 2019 пользователем olol Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 (изменено) @Varangу тебя написана чушь в скрипте потому и лень разбираться...endif на 3 больше чем if, скрипт не рабочий... если смысл его в том, чтобы выпивалось зелье восстановления при окончании действия и при наличии бутылька то попробуй так: begin AI_USING_POTION float timerHealth5 if ( timerHealth5 > 0 ) set timerHealth5 to ( timerHealth5 - getsecondspassed ) returnelseif ( GetEffect, sEffectRestoreHealth ) returnelseif ( GetItemCount "p_restore_health_e" > 0 ) Equip "p_restore_health_e" 1 set timerHealth5 to 3endif end скрипт должен висеть на соответствующем нпс (направленный)условия запуска и останова его должен управлять другой То есть условие elseif ( GetHealthGetRatio < 0.5) мне в этот же скрипт не засунуть? Эффект от вашего варианта скрипта сейчас таков, что как только я захожу в локацию, НПС выпивает зелье через 3 сек, потом автоматом еще зелье, и еще зелье. Неужели сюда нельзя сразу привязать elseif ( GetHealthGetRatio < 0.5)? А схема должна быть - снесли 50% хитов - выпил зелье - ждет 3 сек (либо ждет, когда кончится эффект от предыдущего) - пьет новое, и так, пока не сдохнет или зелья не кончатся. Изменено 22 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Dagot_Prolaps Опубликовано 22 марта, 2019 Жалоба Поделиться Опубликовано 22 марта, 2019 Я сделал скрипт на ауру мора - в игре работает хорошо. Олол, а если прикрутить DontSaveObject в начале комбинированного скрипта рандомизации статов и заражения. Наткнулся на такое существо, статы и размер рассчитались, но из битвы мы не вышли а сохранились прям так. При следующей загрузке сейва эта же копия существа снова пересчитает свои статы и сменит размер? Ведь переменная done == 1 не запишется в сейв. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти