Муурн Шепард Опубликовано 17 марта, 2019 Жалоба Поделиться Опубликовано 17 марта, 2019 Вероятно, чтобы мор добавлялся им заново, если игрок их каким-то образом вылечит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 17 марта, 2019 Жалоба Поделиться Опубликовано 17 марта, 2019 (изменено) В общем, попробовал я последний вариант, убрал лишние endif...скрипт робит, но как-то со сбоями. Тестирую на орках Валенвариона. Скажем, целитель с 6 бутылками стандартного зелья умирает с трех ударов, при этом в отличие от прошлого теста, его здоровье не регенится вообще, но при этом все 6 пузырьков из снаряжения исчезают!!! Орк (для теста) с 6 бутылками качественного зелья не вопользовался ими вообще, но они из рюкзака ПРОПАЛИ! Внутри здания орки регенили, но лишь 1 раз, при этом все бутылки тоже пропали (разом, хотя были разнообразные их виды)!!! Т.е. ИИ каким-то образом либо проваливает данные переменные, либо прочитывает их все зараз, в результате чего не происходит динамичного выпивания зелий...все бутылки исчезают разом, при этом эффект одинаковых, естественное, не суммируется (закл же тот же самый)...как ввести тайминг между спеллами, т.е., например, потерял 100 хитов из 200 - "выпил эксклюзивное", ждешь 5 сек, здоровье не - прибавилось - выпил еще одно, снова проверка - выпил еще оставшееся качественное... ВОТ конечный вариант begin AI_USING_POTION float timerHealth1; таймер для уценненных зелийfloat timerHealth2; таймер для дешевых зелийfloat timerHealth3; таймер для стандартных зелийfloat timerHealth4; таймер для качественных зелийfloat timerHealth5; таймер для экслюзивных зелий if ( GetSpell "1_Potion_B" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth1 to ( timerHealth1 + getsecondspassed )if ( timerHealth1 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_B"set timerHealth1 to 0endifendif if ( GetSpell "1_Potion_C" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth2 to ( timerHealth2 + getsecondspassed )if ( timerHealth2 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_C"set timerHealth2 to 0endifendif if ( GetSpell "1_Potion_S" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth3 to ( timerHealth3 + getsecondspassed )if ( timerHealth3 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_S"set timerHealth3 to 0endifendif if ( GetSpell "1_Potion_Q" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth4 to ( timerHealth4 + getsecondspassed )if ( timerHealth4 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_Q"set timerHealth4 to 0endifendif if ( GetSpell "1_Potion_EK" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth5 to ( timerHealth5 + getsecondspassed )if ( timerHealth5 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_EK"set timerHealth5 to 0endifendif В прошлом вашем варианте реген срабатывал как часы, но там была ошибка в том, что он не исчезал. Теперь реген не появляется как по щелчку, хотя и пропадает стабильно... ПС Важно или нет, но иногда после быстрого боя, если быстро заглянуть в рюкзак врага, можно увидеть там зелья, но если тут же закрыть, и открыть снова - их там уже не будет. Изменено 17 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 17 марта, 2019 Жалоба Поделиться Опубликовано 17 марта, 2019 ПС Важно или нет, но иногда после быстрого боя, если быстро заглянуть в рюкзак врага, можно увидеть там зелья, но если тут же закрыть, и открыть снова - их там уже не будет.Кстати, важно. Добавьте в самое начало скрипта блок if ( GetHealth <= 0 ) StopScript AI_Using_Potion return endif ВОТ конечный вариантЭто точно конечный вариант? Можете скинуть скрипт целиком, засунув его под спойлер? Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 17 марта, 2019 Жалоба Поделиться Опубликовано 17 марта, 2019 (изменено) Вот. Кстати, вы же мне вариант некий с set counter предлагали для таки самого блокирования активации всех регенов в 1 момент, или в этой версии он не робит? begin AI_USING_POTIONif ( GetHealth <= 0 )StopScript AI_Using_Potionreturnendiffloat timerHealth1; таймер для уценненных зелийfloat timerHealth2; таймер для дешевых зелийfloat timerHealth3; таймер для стандартных зелийfloat timerHealth4; таймер для качественных зелийfloat timerHealth5; таймер для экслюзивных зелий if ( GetSpell "1_Potion_B" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth1 to ( timerHealth1 + getsecondspassed )if ( timerHealth1 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_B"set timerHealth1 to 0endifendif if ( GetSpell "1_Potion_C" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth2 to ( timerHealth2 + getsecondspassed )if ( timerHealth2 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_C"set timerHealth2 to 0endifendif if ( GetSpell "1_Potion_S" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth3 to ( timerHealth3 + getsecondspassed )if ( timerHealth3 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_S"set timerHealth3 to 0endifendif if ( GetSpell "1_Potion_Q" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth4 to ( timerHealth4 + getsecondspassed )if ( timerHealth4 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_Q"set timerHealth4 to 0endifendif if ( GetSpell "1_Potion_EK" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияset timerHealth5 to ( timerHealth5 + getsecondspassed )if ( timerHealth5 >= 5 ) ; 5 секунд откатRemoveSpell "1_Potion_EK"set timerHealth5 to 0endifendif; -----------------------------------------------------------------------if ( GetHealthGetRatio < 0.7) ; здоровье меньше 50%if ( GetItemCount p_restore_health_b > 0 )if ( GetSpell "1_Potion_B" == 0 )removeitem "p_restore_health_b" 1AddSpell "1_Potion_B"endifelseif ( GetItemCount p_restore_health_c > 0 )if ( GetSpell "1_Potion_C" == 0 )removeitem "p_restore_health_C" 1AddSpell "1_Potion_C"endifelseif ( GetItemCount p_restore_health_s > 0 )if ( GetSpell "1_Potion_S" == 0 )removeitem "p_restore_health_s" 1AddSpell "1_Potion_S"endifelseif ( GetItemCount p_restore_health_q > 0 )if ( GetSpell "1_Potion_Q" == 0 )removeitem "p_restore_health_q" 1AddSpell "1_Potion_Q"endifelseif ( GetItemCount p_restore_health_e > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_e" 1AddSpell "1_Potion_EK"endifendifendif Изменено 17 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 17 марта, 2019 Жалоба Поделиться Опубликовано 17 марта, 2019 Мда, действительно странно. Попробуйте вместо elseif подставить if, и добавить после каждого блока, кроме последнего, по endif'у. Прошу прощения, что запутал на прошлой странице. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Попробовал...работает, но все равно как-то с багами...я не понимаю, почему ИИ так тормозит с активацией регена, с момента удара и до регена проходят секунды, за которые я успеваю выбить из врага почти все здоровье...такое ощущение, что как и в ситуации с зельями, НПС как будто нужна какая-то "оперативная пауза" , чтобы активировать абилку, он тратит на это драгоценные секунды, за которые я вышибаю у него ХП...хотя, этот тайминг уже выше любых скриптов, наверное... В обучающей книге нашел такой раздел, где есть инфа по накладыванию\проверке на игроке\нпс эффекта заклинания...проблема в том, что я попробовал подключить GetSpellEffects, все равно не работает Begin Magictest short var_1short var_2short var_3 if ( Player -> GetSpell, "hearth heal" ) set var_1 to 1else set var_1 to 0endif if ( Player -> GetSpellEffects, "hearth heal" ) set var_2 to 1else set var_2 to 0endif if ( Player -> GetEffect, sEffectRestoreHealth ) Player -> RemoveEffects, 75 ; удалите эту строку, чтобы увидеть, что происходит; обычно set var_3 to 1else set var_3 to 0endif MessageBox "GetSpell: %.0f GetSpellEffects, %.0f GetEffect: %.0f ", var_1, var_2, var_3 EndBegin Magictest short var_1short var_2short var_3 if ( Player -> GetSpell, "hearth heal" ) set var_1 to 1else set var_1 to 0endif if ( Player -> GetSpellEffects, "hearth heal" ) set var_2 to 1else set var_2 to 0endif if ( Player -> GetEffect, sEffectRestoreHealth ) Player -> RemoveEffects, 75 ; удалите эту строку, чтобы увидеть, что происходит; обычно set var_3 to 1else set var_3 to 0endif MessageBox "GetSpell: %.0f GetSpellEffects, %.0f GetEffect: %.0f ", var_1, var_2, var_3 End МОЙ НЕРАБОЧИЙ СКРИПТ! begin AI_USING_POTION; -----------------------------------------------------------------------if ( GetHealthGetRatio < 0.7) ; здоровье меньше 50%if ( GetItemCount "p_restore_health_e" > 0 )removeitem "p_restore_health_e" 1GetSpellEffects, "1_Potion_EK" endifendifendif ЕЩЕ один нерабочий скрипт. Не пойму, что мешает игре на ИИ просто наложить заклинание излечивания? В чем отличие команды GetSpell от AddSpell? begin AI_USING_POTION if ( GetHealthGetRatio < 0.7) ; здоровье меньше 50%if ( GetItemCount p_restore_health_b > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_b" 1AddSpell "1_Potion_EK"endifendifif ( GetItemCount p_restore_health_c > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_C" 1AddSpell "1_Potion_EK"endifendifif ( GetItemCount p_restore_health_s > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_s" 1AddSpell "1_Potion_EK"endifendifif ( GetItemCount p_restore_health_q > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_q" 1AddSpell "1_Potion_EK"endifendifif ( GetItemCount p_restore_health_e > 0 )if ( GetSpell "1_Potion_EK" == 0 )removeitem "p_restore_health_e" 1AddSpell "1_Potion_EK"endifendifendif ; ----------------------------------------------------------------------- ; ------------------------------------------------------------------------- end Скрипт не работает, почему-то, от слова совсем - даже зелья не удаляются из рюкзака. Я бы еще понял, если тупо ээфект не сработал, но почему зелья не удаляются хотя бы??? Но есть еще инфа - я потестил наш с Вами старый вариант ( с Equip), и понял, что он не работал, убедившись в этом, прочитав книгу по скриптам...т.е. зелья магии и усталости как бы "надевались" ИИ, исчезали из инвентаря, но эффекта не было, мбо предмет почему-то считается в таком случае уничтоженным до того, как работает его скрипт лечения...там нужна какая-то особая функция SkipEquip для зелий, и запустить можно только через нее, но как, я пока не догнал.ЦИТАТА:"Зелья и ингредиенты могут устанавливать OnPCEquip, только если вы используете SkipEquip, иначе предмет «уничтожится» прежде, чем функция будет установлена! Предметы починки также страдают от этого, а алхимические реторты работают наоборот. Это единственные предметы, которые работают, если PCSkipEquip не установлена (Информация с форумов / ManaUser).Вообще книги (а может и другие типы предметов, которые ведут себя странно?) устанавливают SkipEquip, а не OnPCEquip! См раздел Советы и Трюки по этому вопросу." СТР 35 - 45, СТР153-154Morrowind_Scripting_for_Dummies_8.0_Rus.doc Изменено 18 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Сколько у вас неписей в бою, когда вы тестируете скрипт? Судя по всему, если неписей несколько, то один "целевой" скрипт не может адекватно отработать на всех. Вероятно, нужно будет создать целую кучу копий этого скрипта и потом запускать каждую для своего непися. Проверяя, соответственно, чтобы скрипт с одним и тем же названием не был уже запущен.мбо предмет почему-то считается в таком случае уничтоженным до того, как работает его скрипт лечения...там нужна какая-то особая функция SkipEquip для зелий, и запустить можно только через нее, но как, я пока не догнал.Это совсем другой момент. OnPCEquip отслеживает надетость предмета (и только на игрока). То есть длительный процесс. Если зелье выпито, то, соответственно, оно уничтожится и никогда не будет считаться надетым на игрока. И команда OnPCEquip будет работать с зельями не так, как работает с любыми другими вещами. Не пили зелья неписи явно по другой причине. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Сколько у вас неписей в бою, когда вы тестируете скрипт? Судя по всему, если неписей несколько, то один "целевой" скрипт не может адекватно отработать на всех. Вероятно, нужно будет создать целую кучу копий этого скрипта и потом запускать каждую для своего непися. Проверяя, соответственно, чтобы скрипт с одним и тем же названием не был уже запущен.Это совсем другой момент. OnPCEquip отслеживает надетость предмета (и только на игрока). То есть длительный процесс. Если зелье выпито, то, соответственно, оно уничтожится и никогда не будет считаться надетым на игрока. И команда OnPCEquip будет работать с зельями не так, как работает с любыми другими вещами. Не пили зелья неписи явно по другой причине.Я беру Валенварион, дерусь с несколькими НПС снаружи (вместе), потом зачищаю хижины, на них всех и отслеживаю выполнение скриптов. Если скрипт работает (как в случае последнего варианта с заклинанием с таймингом), значит он у меня работал на ВСЕХ, если не работал на одном - не работает и на остальных. Среди них есть целитель, бойцы, пара агентов. Скрипт изначально делался как глобальный по вашему совету, пришиваясь к топикам в боевых выкриках. Так и тестирую...Если кратко, у меня на данный момент 2 главных вопроса.1. И основной, почему функция Equip не работает для выпивания, что вообще тогда может в игре заставить НПС выпить зелье, кроме самого движка? 2. Если плясать от наших с вами "костылей" - можно или нет наложить скриптовой разовой командой обычное заклинание на НПС (AddSpell или GetSpell, или нечто др.), которое сработает визуально и физически, на программном уровне отображаясь скриптом, кастующим на НПС заклинание лечения\восстановления ч.-либо, а на атмосферном уровне для игрока будет все тем же "зельем"? Изменено 18 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 И основной, почему функция Equip не работает для выпивания, что вообще тогда может в игре заставить НПС выпить зелье, кроме самого движка?Почему не работает? Со времен Трибунала вполне работает. Кроме нее -- ничего. Вы уверены, что баги с прошлым вариантом скрипта были именно из-за этой функции?2. Если плясать от наших с вами "костылей" - можно или нет наложить скриптовой разовой командой обычное заклинание на НПС (AddSpell или GetSpell, или нечто др.), которое сработает визуально и физически, на программном уровне отображаясь скриптом, кастующим на НПС заклинание лечения\восстановления ч.-либо, а на атмосферном уровне для игрока будет все тем же "зельем"?Конечно. См. выше создание невидимого активатора с ExplodeSpell. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) Почему не работает? Со времен Трибунала вполне работает. Кроме нее -- ничего. Вы уверены, что баги с прошлым вариантом скрипта были именно из-за этой функции?Конечно. См. выше создание невидимого активатора с ExplodeSpell.А с чем еще? Я просто прошел почти весь Морровинд, тестируя данный плаг...вот и делаю выводы Конечно. См. выше создание невидимого активатора с ExplodeSpell.Это я понял, но то есть прямой командой скрипта закл не наложить, так выходит? То есть УРОН - ПРОВЕРКА на зелье - УДАЛЕНИЕ зелья - КАСТ закла, эквивалентного силе зелья. Без телепортов невидимых нпс для каста))) Т.е. в игре заклинание даже скриптом не может никак накладываться "само", всегда должен быть инициатор? Изменено 18 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Это я понял, но то ест прямой командой скрипта закл не наложить, так выходит?Так.А с чем еще? Я просто прошел почти весь Морровинд, тестируя данный плаг...вот и делаю выводыУ меня по-вчерашнему тестированию вышло, что скрипт, даже запущенный на куче неписей, реально срабатывает только на одном. Так что либо дело в очередности целевых скриптов (глобальных, но запущенных по одной цели), либо в том, что команда Equip не может сработать на неписе в нокдауне. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 либо в том, что команда Equip не может сработать на неписе в нокдауне.Разъясните попонятнее, пжлст, что за нокдаун...По поводу очередности - решит ли проблему индивидуальная выдача скриптов? Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Разъясните попонятнее, пжлст, что за нокдаун...Состояние непися после сильного удара, когда он падает на ноги и не может действовать. Или даже просто прерывание действия сильным ударом.По поводу очередности - решит ли проблему индивидуальная выдача скриптов?На мой взгляд должна. Хотя я предлагаю полуиндивидуальную. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Состояние непися после сильного удара, когда он падает на ноги и не может действовать. Или даже просто прерывание действия сильным ударом.На мой взгляд должна. Хотя я предлагаю полуиндивидуальнуюПолу - эт как?)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Полу - эт как?))Это все остается по-старому. Скрипты целевые, но с дополнительным переключателем. В диалоге запускается скрипт AI_Potion_Switcher, в котором висит похожий код. И таких скриптов, думаю, можно сделать штук восемь. if ( GetScriptRunning "AI_USING_POTION_1" == 0 ) StartScript AI_USING_POTION_1 StopScript AI_Potion_Switcher return endif if ( GetScriptRunning "AI_USING_POTION_2" == 0 ) StartScript AI_USING_POTION_2 StopScript AI_Potion_Switcher return endif Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 (изменено) В общем, я потестил. Тут товарищ один намекнул включить опцию касательно Equip в MCP + я развешал скрипты индивидуально, и все заработало - ИИ начал пить зелья как часы, сразу как отхватил хороший удар, игноря любые удары. Супер. Но вот проблема - та, о которой вы предупреждали. Скрипт использует ИИ ванильного Морра, и каким-то способом обходит изменение MCP на скорость выпивания зелий (паузы) - соответственно, НПС выжирает их залпом. Поможете выставить тайминг на 3-4 сек? Конечная рабочая версия скрипта ныне такая: begin AIUsingPotions if ( GetHealthGetRatio < 0.6) ; здоровье меньше 30%if ( GetItemCount "p_restore_health_b" > 0 )Equip "p_restore_health_b"returnelseif ( GetItemCount "p_restore_health_c" > 0 )Equip "p_restore_health_c"returnelseif ( GetItemCount "p_restore_health_s" > 0 )Equip "p_restore_health_s"returnelseif ( GetItemCount "p_restore_health_q" > 0 )Equip "p_restore_health_q"returnelseif ( GetItemCount "p_restore_health_e" > 0 )Equip "p_restore_health_e"endifendifif ( GetMagicka < 175) ; magicif ( GetItemCount "p_restore_magicka_b" > 0 )Equip "p_restore_magicka_b"returnelseif ( GetItemCount "p_restore_magicka_c" > 0 )Equip "p_restore_magicka_c"returnelseif ( GetItemCount "p_restore_magicka_s" > 0 )Equip "p_restore_magicka_s"returnelseif ( GetItemCount "p_restore_magicka_q" > 0 )Equip "p_restore_magicka_q"returnelseif ( GetItemCount "p_restore_magicka_e" > 0 )Equip "p_restore_magicka_e"endifendif ; -----------------------------------------------------------------------if ( GetFatigue < 150) ; fatigueif ( GetItemCount "p_restore_fatigue_b" > 0 )Equip "p_restore_fatigue_b"returnelseif ( GetItemCount "p_restore_fatigue_c" > 0 )Equip "p_restore_fatigue_c"returnelseif ( GetItemCount "p_restore_fatigue_s" > 0 )Equip "p_restore_fatigue_s"returnelseif ( GetItemCount "p_restore_fatigue_q" > 0 )Equip "p_restore_fatigue_q"returnelseif ( GetItemCount "p_restore_fatigue_e" > 0 )Equip "p_restore_fatigue_e"endifendif; ------------------------------------------------------------------------- end ПС Глобально скрипт по-прежнему не робит...только после развешивания вручную. В принципе, я могу со временем и вручную развешать, а в случаях тех, кто уже имеет скрипты - закрепить в них startscript AIUsingPotions. Так можно?ПС 2 - насчет развешивания, принцип понял, схему - не до конца, ну создам я 8 скриптов-дублеров, в чем польза при переключении от того, что их 8, а не 1? Изменено 18 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 18 марта, 2019 Жалоба Поделиться Опубликовано 18 марта, 2019 Поможете выставить тайминг на 3-4 сек?Тут.ПС 2 - насчет развешивания, принцип понял, схему - не до конца, ну создам я 8 скриптов-дублеров, в чем польза при переключении от того, что их 8, а не 1?Один непись -- один глобальный скрипт. Поскольку вряд ли в одном бою будет больше 8 неписей, то такого количества достаточно, чтобы каждый смог пить зелья. После смерти непися его скрипт освобождается и, соответственно, может быть использован на другом противнике (и, возможно, в другой локации).закрепить в них startscript AIUsingPotions. Так можно?Не думаю. Но проверьте. Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 (изменено) Тут.Один непись -- один глобальный скрипт. Поскольку вряд ли в одном бою будет больше 8 неписей, то такого количества достаточно, чтобы каждый смог пить зелья. После смерти непися его скрипт освобождается и, соответственно, может быть использован на другом противнике (и, возможно, в другой локации).Не думаю. Но проверьте.Хм...но ваш прежний таймер имел привязку к проверке наличия заклинания. К чему мне привязать новый таймер? К срабатыванию функции Equip и остановке скрипта на 3 сек, да? Изменено 19 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Larkin Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 (изменено) Зачем существуют скрипты болезней, которые висят на заражённых существах типа этого? Begin diseaseAscended DontSaveObject if ( CellChanged == 0 )returnendif if ( GetBlightDisease == 0 )AddSpell "ash woe blight"AddSpell "black-heart blight"AddSpell "chanthrax blight"AddSpell "ash-chancre"endif End Они добавляют прописанные болезни если существо не поражено болезнью. Но ведь все заражённые существа и так изначально имеют в своём списке заклианий свои болезни. Зачем тогда скрипт, висящий мёртвым грузом? Это очень важные скрипты которые заражают повторно если было вылечено, и dontsave чтоб кучу места в чейве не занимать. Хм...но ваш прежний таймер имел привязку к проверке наличия заклинания. К чему мне привязать новый таймер? К срабатыванию функции Equip и остановке скрипта на 3 сек, да? Че вы тут мутите, создали бы тему про выпивание зелий неписями. Вот такой скрипт я давно создавал, не помню как работает. Таймер можно отсюда взять. Begin LR_Buharichk short glyk float timer short str if ( glyk < 0 ) return elseif ( glyk > 0 ) set timer to ( timer + GetSecondsPassed) if ( timer > 6 ) set timer to 0 if ( GetWeaponDrawn ) playsound3d, "drink" if ( glyk == 1) ;removeitem, "Potion_Cyro_Whiskey_01" 1 messagebox "Виски пашел" ;cast "lr_brandy", player addspell "lr_test1" set glyk to -1 elseif ( glyk == 2) ;removeitem, "potion_cyro_brandy_01" 1 messagebox "бренди манапашель" ;cast "lr_brandy", player addspell "lr_test1" set glyk to -2 elseif ( glyk == 3) ;removeitem, "potion_comberry_brandy_01" 1 messagebox "грифт манапашель" ;cast, "lr_brandy", player addspell "lr_test1" set glyk to -3 elseif ( glyk == 4) ;removeitem, "potion_local_brew_01" 1 ;cast "lr_brew" player addspell "lr_test1" messagebox "мацт бухнулама" set glyk to -4 elseif ( glyk == 5) ;removeitem, "potion_comberry_wine_01" 1 set str to getstrength messagebox "ШЕЙН ПАШЕЛ" ;cast, "lr_brew" player addspell "lr_test1" set glyk to -5 elseif ( glyk == 6) ;removeitem, "potion_local_liquor_01" 1 messagebox "Суджамана пашооль" ;explodespell "lr_brew" addspell "lr_test1" ;explodespell "aryongloveright_en_unique" ;cast, "lr_brew", player set glyk to -6 endif endif endif return endif if ( glyk != 0 ) return endif if ( GetItemCount "Potion_Cyro_Whiskey_01" > 0 ) set glyk to 1 elseif ( GetItemCount "potion_cyro_brandy_01" > 0 ) set glyk to 2 elseif ( GetItemCount "potion_comberry_brandy_01" > 0 ) set glyk to 3 elseif ( GetItemCount "potion_local_brew_01" > 0 ) set glyk to 4 elseif ( GetItemCount "potion_comberry_wine_01" > 0 ) set glyk to 5 elseif ( GetItemCount "potion_local_liquor_01" > 0 ) set glyk to 6 else set glyk to -10 endif End Изменено 19 марта, 2019 пользователем Larkin Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 Хм...но ваш прежний таймер имел привязку к проверке наличия заклинания. К чему мне привязать новый таймер? К срабатыванию функции Equip и остановке скрипта на 3 сек, да?К чему угодно. GetSpellEffects, например. Либо к какой-нибудь локальной переменной. Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 (изменено) if ( Equip "p_restore_health_e" 1 == 1 ); выпилЭто так не работает. Equip -- команда надеть. Никакого значения для скрипта она не возвращает и совать ее в условие нельзя.begin AI_USING_POTION; скрипт зановоЭто так не работает. Begin указывает на начало скрипта, а не на его запуск. Чтобы повторить скрипт используйте return. Изменено 19 марта, 2019 пользователем Муурн Шепард Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 Это так не работает. Equip -- команда пить. Никакого значения для скрипта она не возвращает и совать ее в условие нельзя.Это так не работает. Begin указывает на начало скрипта, а не на его запуск. Чтобы повторить скрипт используйте return.Т.е. плясать только от эффекта восстановления?Получается, если Непись кастанет на себя восст. здоровья, то выпить зелье сможет уже только через 3 сек, а если у него абилка, которая регенит ему здоровье постоянно, но при каждой попытке выпить зелье он атоматом будет отсчитывать 3 сек? Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 Т.е. плясать только от эффекта восстановления?Получается, если Непись кастанет на себя восст. здоровья, то выпить зелье сможет уже только через 3 сек, а если у него абилка, которая регенит ему здоровье постоянно, но при каждой попытке выпить зелье он атоматом будет отсчитывать 3 сек?А чем вас вариант прописать локальную переменную не устраивает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Varang Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 (изменено) А чем вас вариант прописать локальную переменную не устраивает?А как это:-поможет?-сделать? if ( GetEffect, sEffectRestoreHealth ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинанияStopScript AI_USING_POTIONset timerHealth5 to ( timerHealth5 + getsecondspassed )if ( timerHealth5 >= 3 ) ; 3 секунд откатreturnset timerHealth5 to 0endifendif Поменял вот так, игра запустилась, но скрипт не помог, выжирают зараз по прежнему. Изменено 19 марта, 2019 пользователем Varang Ссылка на комментарий Поделиться на другие сайты Поделиться
Муурн Шепард Опубликовано 19 марта, 2019 Жалоба Поделиться Опубликовано 19 марта, 2019 А как это:-поможет?-сделать?Так же, как и любая иная проверка. Поменял вот так, игра запустилась, но скрипт не помог, выжирают зараз по прежнему.А вы для Equip условие проставили, чтобы таймер ноль был? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти