Перейти к содержанию

Вопросы по TES Construction Set


Рекомендуемые сообщения

  • Ответов 2.7 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

В общем, попробовал я последний вариант, убрал лишние 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 0
endif
endif
 
 
if ( GetSpell "1_Potion_C" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth2 to ( timerHealth2 + getsecondspassed )
if ( timerHealth2 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_C"
set timerHealth2 to 0
endif
endif
 
if ( GetSpell "1_Potion_S" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth3 to ( timerHealth3 + getsecondspassed )
if ( timerHealth3 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_S"
set timerHealth3 to 0
endif
endif
 
if ( GetSpell "1_Potion_Q" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth4 to ( timerHealth4 + getsecondspassed )
if ( timerHealth4 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_Q"
set timerHealth4 to 0
endif
endif
 
if ( GetSpell "1_Potion_EK" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth5 to ( timerHealth5 + getsecondspassed )
if ( timerHealth5 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_EK"
set timerHealth5 to 0
endif
endif
 
В прошлом вашем варианте реген срабатывал как часы, но там была ошибка в том, что он не исчезал. Теперь реген не появляется как по щелчку, хотя и пропадает стабильно...
 
ПС Важно или нет, но иногда после быстрого боя, если быстро заглянуть в рюкзак врага, можно увидеть там зелья, но если тут же закрыть, и открыть снова - их там уже не будет.
Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

ПС Важно или нет, но иногда после быстрого боя, если быстро заглянуть в рюкзак врага, можно увидеть там зелья, но если тут же закрыть, и открыть снова - их там уже не будет.

Кстати, важно. Добавьте в самое начало скрипта блок

 

if ( GetHealth <= 0 )
StopScript AI_Using_Potion
return
endif
ВОТ конечный вариант

Это точно конечный вариант? Можете скинуть скрипт целиком, засунув его под спойлер?

Ссылка на комментарий
Поделиться на другие сайты

Вот. Кстати, вы же мне вариант некий с set counter предлагали для таки самого блокирования активации всех регенов в 1 момент, или в этой версии он не робит?

 

begin AI_USING_POTION
if ( GetHealth <= 0 )
StopScript AI_Using_Potion
return
endif
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 0
endif
endif
 
 
if ( GetSpell "1_Potion_C" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth2 to ( timerHealth2 + getsecondspassed )
if ( timerHealth2 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_C"
set timerHealth2 to 0
endif
endif
 
if ( GetSpell "1_Potion_S" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth3 to ( timerHealth3 + getsecondspassed )
if ( timerHealth3 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_S"
set timerHealth3 to 0
endif
endif
 
if ( GetSpell "1_Potion_Q" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth4 to ( timerHealth4 + getsecondspassed )
if ( timerHealth4 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_Q"
set timerHealth4 to 0
endif
endif
 
if ( GetSpell "1_Potion_EK" == 1 ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
set timerHealth5 to ( timerHealth5 + getsecondspassed )
if ( timerHealth5 >= 5 ) ; 5 секунд откат
RemoveSpell "1_Potion_EK"
set timerHealth5 to 0
endif
endif
; -----------------------------------------------------------------------
if ( GetHealthGetRatio < 0.7) ; здоровье меньше 50%
if ( GetItemCount p_restore_health_b > 0 )
if ( GetSpell "1_Potion_B" == 0 )
removeitem "p_restore_health_b" 1
AddSpell "1_Potion_B"
endif
elseif ( GetItemCount p_restore_health_c > 0 )
if ( GetSpell "1_Potion_C" == 0 )
removeitem "p_restore_health_C" 1
AddSpell "1_Potion_C"
endif
elseif ( GetItemCount p_restore_health_s > 0 )
if ( GetSpell "1_Potion_S" == 0 )
removeitem "p_restore_health_s" 1
AddSpell "1_Potion_S"
endif
elseif ( GetItemCount p_restore_health_q > 0 )
if ( GetSpell "1_Potion_Q" == 0 )
removeitem "p_restore_health_q" 1
AddSpell "1_Potion_Q"
endif
elseif ( GetItemCount p_restore_health_e > 0 )
if ( GetSpell "1_Potion_EK" == 0 )
removeitem "p_restore_health_e" 1
AddSpell "1_Potion_EK"
endif
endif
endif
Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

Мда, действительно странно. Попробуйте вместо elseif подставить if, и добавить после каждого блока, кроме последнего, по endif'у. Прошу прощения, что запутал на прошлой странице.

Ссылка на комментарий
Поделиться на другие сайты

Попробовал...работает, но все равно как-то с багами...я не понимаю, почему ИИ так тормозит с активацией регена, с момента удара и до регена проходят секунды, за которые я успеваю выбить из врага почти все здоровье...такое ощущение, что как и в ситуации с зельями, НПС как будто нужна какая-то "оперативная пауза" , чтобы активировать абилку, он тратит на это драгоценные секунды, за которые я вышибаю у него ХП...хотя, этот тайминг уже выше любых скриптов, наверное...

 

В обучающей книге нашел такой раздел, где есть инфа по накладыванию\проверке на игроке\нпс эффекта заклинания...проблема в том, что я попробовал подключить GetSpellEffects, все равно не работает 

 

Begin Magictest

 

short var_1

short var_2

short var_3

 

if ( Player -> GetSpell, "hearth heal" )

       set var_1 to 1

else

       set var_1 to 0

endif

 

if ( Player -> GetSpellEffects, "hearth heal" )

       set var_2 to 1

else

       set var_2 to 0

endif

 

if ( Player -> GetEffect, sEffectRestoreHealth )

       Player -> RemoveEffects, 75  ; удалите эту строку, чтобы увидеть, что происходит

;                                  обычно

 

       set var_3 to 1

else

       set var_3 to 0

endif

 

MessageBox "GetSpell: %.0f   GetSpellEffects, %.0f   GetEffect: %.0f ", var_1, var_2, var_3

 

End

Begin Magictest

 

short var_1

short var_2

short var_3

 

if ( Player -> GetSpell, "hearth heal" )

       set var_1 to 1

else

       set var_1 to 0

endif

 

if ( Player -> GetSpellEffects, "hearth heal" )

       set var_2 to 1

else

       set var_2 to 0

endif

 

if ( Player -> GetEffect, sEffectRestoreHealth )

       Player -> RemoveEffects, 75  ; удалите эту строку, чтобы увидеть, что происходит

;                                  обычно

 

       set var_3 to 1

else

       set var_3 to 0

endif

 

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" 1
GetSpellEffects, "1_Potion_EK" 
endif
endif
endif
 
ЕЩЕ один нерабочий скрипт. Не пойму, что мешает игре на ИИ просто наложить заклинание излечивания? В чем отличие команды 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" 1
AddSpell "1_Potion_EK"
endif
endif
if ( GetItemCount p_restore_health_c > 0 )
if ( GetSpell "1_Potion_EK" == 0 )
removeitem "p_restore_health_C" 1
AddSpell "1_Potion_EK"
endif
endif
if ( GetItemCount p_restore_health_s > 0 )
if ( GetSpell "1_Potion_EK" == 0 )
removeitem "p_restore_health_s" 1
AddSpell "1_Potion_EK"
endif
endif
if ( GetItemCount p_restore_health_q > 0 )
if ( GetSpell "1_Potion_EK" == 0 )
removeitem "p_restore_health_q" 1
AddSpell "1_Potion_EK"
endif
endif
if ( GetItemCount p_restore_health_e > 0 )
if ( GetSpell "1_Potion_EK" == 0 )
removeitem "p_restore_health_e" 1
AddSpell "1_Potion_EK"
endif
endif
endif
 
; -----------------------------------------------------------------------
 
; -------------------------------------------------------------------------
 
end 
 
Скрипт не работает, почему-то, от слова совсем - даже зелья не удаляются из рюкзака. Я бы еще понял, если тупо ээфект не сработал, но почему зелья не удаляются хотя бы???
 
Но есть еще инфа - я потестил наш с Вами старый вариант ( с Equip), и понял, что он не работал, убедившись в этом, прочитав книгу по скриптам...т.е. зелья магии и усталости как бы "надевались" ИИ, исчезали из инвентаря, но эффекта не было, мбо предмет почему-то считается в таком случае уничтоженным до того, как работает его скрипт лечения...там нужна какая-то особая функция SkipEquip для зелий, и запустить можно только через нее, но как, я пока не догнал.
ЦИТАТА:
"Зелья и ингредиенты могут устанавливать OnPCEquip, только если вы используете SkipEquip, иначе предмет «уничтожится» прежде, чем функция будет установлена! Предметы починки также страдают от этого, а алхимические реторты работают наоборот. Это единственные предметы, которые работают, если  PCSkipEquip не установлена (Информация с форумов / ManaUser).

Вообще книги (а может и другие типы предметов, которые ведут себя странно?) устанавливают SkipEquip, а не OnPCEquip! См раздел Советы и Трюки по этому вопросу." СТР 35 - 45, СТР153-154

Morrowind_Scripting_for_Dummies_8.0_Rus.doc

Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

Сколько у вас неписей в бою, когда вы тестируете скрипт? Судя по всему, если неписей несколько, то один "целевой" скрипт не может адекватно отработать на всех. Вероятно, нужно будет создать целую кучу копий этого скрипта и потом запускать каждую для своего непися. Проверяя, соответственно, чтобы скрипт с одним и тем же названием не был уже запущен.

мбо предмет почему-то считается в таком случае уничтоженным до того, как работает его скрипт лечения...там нужна какая-то особая функция SkipEquip для зелий, и запустить можно только через нее, но как, я пока не догнал.

Это совсем другой момент. OnPCEquip отслеживает надетость предмета (и только на игрока). То есть длительный процесс. Если зелье выпито, то, соответственно, оно уничтожится и никогда не будет считаться надетым на игрока. И команда OnPCEquip будет работать с зельями не так, как работает с любыми другими вещами. Не пили зелья неписи явно по другой причине.

Ссылка на комментарий
Поделиться на другие сайты

Сколько у вас неписей в бою, когда вы тестируете скрипт? Судя по всему, если неписей несколько, то один "целевой" скрипт не может адекватно отработать на всех. Вероятно, нужно будет создать целую кучу копий этого скрипта и потом запускать каждую для своего непися. Проверяя, соответственно, чтобы скрипт с одним и тем же названием не был уже запущен.

Это совсем другой момент. OnPCEquip отслеживает надетость предмета (и только на игрока). То есть длительный процесс. Если зелье выпито, то, соответственно, оно уничтожится и никогда не будет считаться надетым на игрока. И команда OnPCEquip будет работать с зельями не так, как работает с любыми другими вещами. Не пили зелья неписи явно по другой причине.

Я беру Валенварион, дерусь с несколькими НПС снаружи (вместе), потом зачищаю хижины, на них всех и отслеживаю выполнение скриптов. Если скрипт работает (как в случае последнего варианта с заклинанием с таймингом), значит он у меня работал на ВСЕХ, если не работал на одном - не работает и на остальных. Среди них есть целитель, бойцы, пара агентов. Скрипт изначально делался как глобальный по вашему совету, пришиваясь к топикам в боевых выкриках. Так и тестирую...

Если кратко, у меня на данный момент 2 главных вопроса.

1. И основной, почему функция Equip не работает для выпивания, что вообще тогда может в игре заставить НПС выпить зелье, кроме самого движка?

 

2. Если плясать от наших с вами "костылей" - можно или нет наложить скриптовой разовой командой обычное заклинание на НПС (AddSpell или GetSpell, или нечто др.), которое сработает визуально и физически, на программном уровне отображаясь скриптом, кастующим на НПС заклинание лечения\восстановления ч.-либо, а на атмосферном уровне для игрока будет все тем же "зельем"?

Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

И основной, почему функция Equip не работает для выпивания, что вообще тогда может в игре заставить НПС выпить зелье, кроме самого движка?

Почему не работает? Со времен Трибунала вполне работает. Кроме нее -- ничего. Вы уверены, что баги с прошлым вариантом скрипта были именно из-за этой функции?

2. Если плясать от наших с вами "костылей" - можно или нет наложить скриптовой разовой командой обычное заклинание на НПС (AddSpell или GetSpell, или нечто др.), которое сработает визуально и физически, на программном уровне отображаясь скриптом, кастующим на НПС заклинание лечения\восстановления ч.-либо, а на атмосферном уровне для игрока будет все тем же "зельем"?

Конечно. См. выше создание невидимого активатора с ExplodeSpell.

Ссылка на комментарий
Поделиться на другие сайты

Почему не работает? Со времен Трибунала вполне работает. Кроме нее -- ничего. Вы уверены, что баги с прошлым вариантом скрипта были именно из-за этой функции?

Конечно. См. выше создание невидимого активатора с ExplodeSpell.

А с чем еще? Я просто прошел почти весь Морровинд, тестируя данный плаг...вот и делаю выводы

 

Конечно. См. выше создание невидимого активатора с ExplodeSpell.

Это я понял, но то есть прямой командой скрипта закл не наложить, так выходит? То есть УРОН - ПРОВЕРКА на зелье - УДАЛЕНИЕ зелья - КАСТ закла, эквивалентного силе зелья. Без телепортов невидимых нпс для каста))) Т.е. в игре заклинание даже скриптом не может никак накладываться "само", всегда должен быть инициатор?

Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

Это я понял, но то ест прямой командой скрипта закл не наложить, так выходит?

Так.

А с чем еще? Я просто прошел почти весь Морровинд, тестируя данный плаг...вот и делаю выводы

У меня по-вчерашнему тестированию вышло, что скрипт, даже запущенный на куче неписей, реально срабатывает только на одном. Так что либо дело в очередности целевых скриптов (глобальных, но запущенных по одной цели), либо в том, что команда Equip не может сработать на неписе в нокдауне.

Ссылка на комментарий
Поделиться на другие сайты

либо в том, что команда Equip не может сработать на неписе в нокдауне.

Разъясните попонятнее, пжлст, что за нокдаун...

По поводу очередности - решит ли проблему индивидуальная выдача скриптов?

Ссылка на комментарий
Поделиться на другие сайты

Разъясните попонятнее, пжлст, что за нокдаун...

Состояние непися после сильного удара, когда он падает на ноги и не может действовать. Или даже просто прерывание действия сильным ударом.

По поводу очередности - решит ли проблему индивидуальная выдача скриптов?

На мой взгляд должна. Хотя я предлагаю полуиндивидуальную.

Ссылка на комментарий
Поделиться на другие сайты

Состояние непися после сильного удара, когда он падает на ноги и не может действовать. Или даже просто прерывание действия сильным ударом.

На мой взгляд должна. Хотя я предлагаю полуиндивидуальную

Полу - эт как?))

Ссылка на комментарий
Поделиться на другие сайты

Полу - эт как?))

Это все остается по-старому. Скрипты целевые, но с дополнительным переключателем. В диалоге запускается скрипт 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
Ссылка на комментарий
Поделиться на другие сайты

В общем, я потестил. Тут товарищ один намекнул включить опцию касательно Equip в MCP + я развешал скрипты индивидуально, и все заработало - ИИ начал пить зелья как часы, сразу как отхватил хороший удар, игноря любые удары. Супер. Но вот проблема - та, о которой вы предупреждали. Скрипт использует ИИ ванильного Морра, и каким-то способом обходит изменение MCP на скорость выпивания зелий (паузы) - соответственно, НПС выжирает их залпом. Поможете выставить тайминг на 3-4 сек? :-)  Конечная рабочая версия скрипта ныне такая:

 

begin AIUsingPotions
 
if ( GetHealthGetRatio < 0.6) ; здоровье меньше 30%
if ( GetItemCount "p_restore_health_b" > 0 )
Equip "p_restore_health_b"
return
elseif ( GetItemCount "p_restore_health_c" > 0 )
Equip "p_restore_health_c"
return
elseif ( GetItemCount "p_restore_health_s" > 0 )
Equip "p_restore_health_s"
return
elseif ( GetItemCount "p_restore_health_q" > 0 )
Equip "p_restore_health_q"
return
elseif  ( GetItemCount "p_restore_health_e" > 0 )
Equip "p_restore_health_e"
endif
endif
if ( GetMagicka < 175) ; magic
if ( GetItemCount "p_restore_magicka_b" > 0 )
Equip "p_restore_magicka_b"
return
elseif ( GetItemCount "p_restore_magicka_c" > 0 )
Equip "p_restore_magicka_c"
return
elseif ( GetItemCount "p_restore_magicka_s" > 0 )
Equip "p_restore_magicka_s"
return
elseif ( GetItemCount "p_restore_magicka_q" > 0 )
Equip "p_restore_magicka_q"
return
elseif  ( GetItemCount "p_restore_magicka_e" > 0 )
Equip "p_restore_magicka_e"
endif
endif
 
; -----------------------------------------------------------------------
if ( GetFatigue < 150) ; fatigue
if ( GetItemCount "p_restore_fatigue_b" > 0 )
Equip "p_restore_fatigue_b"
return
elseif ( GetItemCount "p_restore_fatigue_c" > 0 )
Equip "p_restore_fatigue_c"
return
elseif ( GetItemCount "p_restore_fatigue_s" > 0 )
Equip "p_restore_fatigue_s"
return
elseif ( GetItemCount "p_restore_fatigue_q" > 0 )
Equip "p_restore_fatigue_q"
return
elseif  ( GetItemCount "p_restore_fatigue_e" > 0 )
Equip "p_restore_fatigue_e"
endif
endif
; -------------------------------------------------------------------------
 
end 
 
ПС Глобально скрипт по-прежнему не робит...только после развешивания вручную. В принципе, я могу со временем и вручную развешать, а в случаях тех, кто уже имеет скрипты - закрепить в них startscript AIUsingPotions. Так можно?
ПС 2 - насчет развешивания, принцип понял, схему - не до конца, ну создам я 8 скриптов-дублеров, в чем польза при переключении от того, что их 8, а не 1?
Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

Поможете выставить тайминг на 3-4 сек?

Тут.

ПС 2 - насчет развешивания, принцип понял, схему - не до конца, ну создам я 8 скриптов-дублеров, в чем польза при переключении от того, что их 8, а не 1?

Один непись -- один глобальный скрипт. Поскольку вряд ли в одном бою будет больше 8 неписей, то такого количества достаточно, чтобы каждый смог пить зелья. После смерти непися его скрипт освобождается и, соответственно, может быть использован на другом противнике (и, возможно, в другой локации).

закрепить в них startscript AIUsingPotions. Так можно?

Не думаю. Но проверьте.

Ссылка на комментарий
Поделиться на другие сайты

Тут.

Один непись -- один глобальный скрипт. Поскольку вряд ли в одном бою будет больше 8 неписей, то такого количества достаточно, чтобы каждый смог пить зелья. После смерти непися его скрипт освобождается и, соответственно, может быть использован на другом противнике (и, возможно, в другой локации).

Не думаю. Но проверьте.

Хм...но ваш прежний таймер имел привязку к проверке наличия заклинания. К чему мне привязать новый таймер? К срабатыванию функции Equip и остановке скрипта на 3 сек, да?

Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

 

Зачем существуют скрипты болезней, которые висят на заражённых существах типа этого?
 
 
Begin diseaseAscended
 
DontSaveObject
 
if ( CellChanged == 0 )
return
endif
 
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
Изменено пользователем Larkin
Ссылка на комментарий
Поделиться на другие сайты

Хм...но ваш прежний таймер имел привязку к проверке наличия заклинания. К чему мне привязать новый таймер? К срабатыванию функции Equip и остановке скрипта на 3 сек, да?

К чему угодно. GetSpellEffects, например. Либо к какой-нибудь локальной переменной.

Ссылка на комментарий
Поделиться на другие сайты

if ( Equip "p_restore_health_e" 1 == 1 ); выпил

Это так не работает. Equip -- команда надеть. Никакого значения для скрипта она не возвращает и совать ее в условие нельзя.

begin AI_USING_POTION; скрипт заново

Это так не работает. Begin указывает на начало скрипта, а не на его запуск. Чтобы повторить скрипт используйте return.

Изменено пользователем Муурн Шепард
Ссылка на комментарий
Поделиться на другие сайты

Это так не работает. Equip -- команда пить. Никакого значения для скрипта она не возвращает и совать ее в условие нельзя.

Это так не работает. Begin указывает на начало скрипта, а не на его запуск. Чтобы повторить скрипт используйте return.

Т.е. плясать только от эффекта восстановления?

Получается, если Непись кастанет на себя восст. здоровья, то выпить зелье сможет уже только через 3 сек, а если у него абилка, которая регенит ему здоровье постоянно, но при каждой попытке выпить зелье он атоматом будет отсчитывать 3 сек?

Ссылка на комментарий
Поделиться на другие сайты

Т.е. плясать только от эффекта восстановления?

Получается, если Непись кастанет на себя восст. здоровья, то выпить зелье сможет уже только через 3 сек, а если у него абилка, которая регенит ему здоровье постоянно, но при каждой попытке выпить зелье он атоматом будет отсчитывать 3 сек?

А чем вас вариант прописать локальную переменную не устраивает?

Ссылка на комментарий
Поделиться на другие сайты

А чем вас вариант прописать локальную переменную не устраивает?

А как это:

-поможет?

-сделать?

 

if ( GetEffect, sEffectRestoreHealth ); сделать такой же блок для всех пяти переменных и, соответственно, менять айди заклинания
StopScript AI_USING_POTION
set timerHealth5 to ( timerHealth5 + getsecondspassed )
if ( timerHealth5 >= 3 ) ; 3 секунд откат
return
set timerHealth5 to 0
endif
endif
 
Поменял вот так, игра запустилась, но скрипт не помог, выжирают зараз по прежнему.
Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

А как это:

-поможет?

-сделать?

Так же, как и любая иная проверка.

 
Поменял вот так, игра запустилась, но скрипт не помог, выжирают зараз по прежнему.

А вы для Equip условие проставили, чтобы таймер ноль был?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...