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

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


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

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 работать не должно...

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

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

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

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

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

StopScript AI_USING_POTION

Это лишнее вообще. У вас скрипт будет постоянно выключаться, когда таймер еще не отработал.

elseif  ( GetItemCount "p_restore_health_e" > 0 )
endif
set timerHealth5 to 0
Equip "p_restore_health_e" 1
return
endif
endif

Зачем set timerHealth5 to 0? И почему Equip находится не в блоке с GetItemCount, а за его пределами?

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

Это лишнее вообще. У вас скрипт будет постоянно выключаться, когда таймер еще не отработал.

 

 

 

Зачем set timerHealth5 to 0? И почему Equip находится не в блоке с GetItemCount, а за его пределами?

а как остановить, return-ом? И set timerHealth5 to 1 получается, перед ним Equip, да?
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

 

Дык проверка ничего не делает у вас, должно быть так:

if  ( GetItemCount "p_restore_health_e" > 0 )
Equip "p_restore_health_e" 1
endif
Ссылка на комментарий
Поделиться на другие сайты

Это очень важные скрипты которые заражают повторно если было вылечено, и dontsave чтоб кучу места в чейве не занимать.

 

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

 

_________________________________

 

 

В игре есть куча заклинаний, которые по всем признакам должны были быть покупаемы ГГ, но их никто не продаёт.

 

Что если вместо сотни разбросанных по миру активаторов сделать 1 стартовый глобальный скрипт, который разом добавит все недостающие спеллы указанным торговцам?

 

Если применять AddSpell, то придутся хотябы раз загрузиться в локации с торговцем чтобы скрипт отработал своё. Но что если применить аналогичную МВСЕ-команду?

 

begin newspells

long pcRef

short done

 

if (done == 1)

Stopscript "newspells"

return

endif

Setx pcRef to xGetRef "Marayn Dren"

pcRef->xAddSpell "frost bolt" 1

set done to 1

 

Stopscript "newspells"

End

 

 

Такое будет работать? Описание команды на вики крайне скудное. Запустится 1 раз при старте новой игры, раздаст спеллы и всё. Останутся ли эти спеллы у учителей в сохраении?

 

____________

Хотя погодите, с простым AddSpell это ж будет тоже глобальный скрипт, так что и ограничения на присутствие в одной ячейке не будет?

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

Ребят, я уже пробовал несколько раз, и ввиду того, что скрипты не писал особо никогда, плюхаюсь и не могу сделать как надо. Помогите, пожалуйста, на 1м варианте, а дальше я сам по шаблону... :youstink:

 

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 )
Equip "p_restore_health_e" 1
endif
set timerHealth5 to 1
return
endif
endif

Вот последний вариант...

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

@ Dagot_Prolaps

если один вылечится, то вылечатся все копии и наоборот.

У болезней и по моему еще у проклятий такая фишка.

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

Varang, я же написал скрипт на предыдущей странице. Замени там выпивку на зелья лечения, addspell на equip, getweappondrawn на gethealtgetratio<40.

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

если один вылечится, то вылечатся все копии и наоборот.

 

 

 

Ок, а что если совместить этот скрипт с рандомизатором статов, прикрутив и к нему рандомизацию и поставив сразу после блока с рандомизатором статов?

 

Вот пример для моровиков:

 

short done
short var
float stat
float coef
 
if ( done == 1 )
return
endif
 
set stat to GetStrength
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetStrength stat
 
set stat to GetEndurance
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetEndurance stat
 
set stat to GetIntelligence
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetIntelligence stat
 
set stat to GetWillpower
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetWillpower stat
 
set stat to GetAgility
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetAgility stat
 
set stat to GetSpeed
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetSpeed stat
 
set stat to GetLuck
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetLuck stat
 
set stat to GetMagicka
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetMagicka stat
 
set stat to GetFatigue
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetFatigue stat
 
set stat to GetHealth
set coef to Random 41
set coef to ( coef + 80 )
set coef to ( coef / 100 )
set stat to ( stat * coef )
SetHealth stat
 
set stat to GetScale
set 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 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
 
set done to 1
 
 
End

 

Такое нормально сработает?

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

Varang, я же написал скрипт на предыдущей странице. Замени там выпивку на зелья лечения, addspell на equip, getweappondrawn на gethealtgetratio<40.

А причем там проверка на глюк? В моем-то скрипте нет "глюка"

 

Неужели сложно показать отдельным цветом в одном блоке, как, что  и  куда нужно вставить в мой конкретный скрипт, чтобы я сделал по аналогии, тем более, если вы знаете. А не задавать наводящие вопросы нубу "а что тут делает таймер" или кидать фразы вроде "сделай как я вон там, где ты все равно ни шиша не понимаешь"? Вот последняя РАБОЧАЯ версия скрипта, где благодаря предыдущей вашей помощи работает все, кроме тайминга - зелья пьются залпом зараз. Помогите уже доделать, пожалуйста, я уже устал что-то делать неправильно, дошло до того, что у меня НПС пьют зелья сразу, как я входу в локацию...дайте уже возможность человеку поиграть, а не сидеть 3й день в кс и тупо тестя 1 приевшуюся локацию по 15 разу! Спасибо.
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
Изменено пользователем Varang
Ссылка на комментарий
Поделиться на другие сайты

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 ( GetDisabled != 1 )
if ( GetDistance Player <= 1000 )
set timer to ( timer + GetSecondsPassed )
if timer > 3
set var to Random 4
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
endif
endif
endif
 

 

Это устроит ад и израиль неподготовленному игроку, решившему полезть на спящего, который ещё не стал Нереварином.

 

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

 

Подводные камни?

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

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

Ты собрался Морта по укуренности скриптов переплюнуть?

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

А в чём укуренность? В мооре нет аур, хотя это такой элементарный типовой скрипт. Я лишь хочу узнать, не упустил ли чего-то важного, что может сказаться на работоспособности игры.

В частности, как на ней скажется отсутствие

DontSaveObject

?

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

Это устроит ад и израиль неподготовленному игроку, решившему полезть на спящего, который ещё не стал Нереварином.

 

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

 

Подводные камни?

Пусть он лучше кастует спелл с большой площадью поражения, и если игрок попадается в него - то по GetSpellEffect вешается мор.

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

А вот это уже лишний глобальный стартовый скрипт, который будет работать и нагружать игру вечно. 

 

Я правильно понял, что если мы вешаем на кричура рандомизатор статов в том или ином виде, то строчка DontSaveObject противопоказана?

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

В первом случае это не заразит как надо, для существ с одним id один набор болезней. Там всё продумано, и работает как надо. Вот ты взял и забаговал.

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

А для больных существ того же блудмуна вообще нет ни скрипта, ни DontSaveObject

Они тоже забагованы?

 

Если не брать в счёт "бага" разнообразие болезней у существ с одним ИД, то в чём принципиальная разница между стандартным скриптом заражения и тем же скриптом, но без DontSaveObject ?

 

Если уж повторно заразил скриптом - наоборот надо сохранять эти данные, а не запрещать сохранение.

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

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

Ну писали же уже про DontSaveObject ,а из названия не ясно? НеСохранятьОбъект

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

@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 3
endif
 
end
 

скрипт должен висеть на соответствующем нпс (направленный)

условия запуска и останова его должен управлять другой

 

@Dagot_Prolaps

DontSaveObject

Используя DontSaveObject, можно избежать раздражающего сообщения "save game data has changed".

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

 

BM_bear_brown Чумной медведь

BM_wolf_red Чумной волк
 
они исправлены в GFM 6хх и 7хх
Изменено пользователем olol
Ссылка на комментарий
Поделиться на другие сайты

 

@Varang

у тебя написана чушь в скрипте потому и лень разбираться...

endif на 3 больше чем if, скрипт не рабочий...

 

если смысл его в том, чтобы выпивалось зелье восстановления при окончании действия и при наличии бутылька то попробуй так:

 

begin AI_USING_POTION
 
float timerHealth5
 
if ( timerHealth5 > 0 )
  set timerHealth5 to ( timerHealth5 - getsecondspassed )
  return
elseif ( GetEffect, sEffectRestoreHealth )
  return
elseif  ( GetItemCount "p_restore_health_e" > 0 )
    Equip "p_restore_health_e" 1
    set timerHealth5 to 3
endif
 
end
 

скрипт должен висеть на соответствующем нпс (направленный)

условия запуска и останова его должен управлять другой

 

 

 

То есть условие elseif ( GetHealthGetRatio < 0.5) мне в этот же скрипт не засунуть?

 

Эффект от вашего варианта скрипта сейчас таков, что как только я захожу в локацию, НПС выпивает зелье через 3 сек, потом автоматом еще зелье, и еще зелье. Неужели сюда нельзя сразу привязать elseif ( GetHealthGetRatio < 0.5)?

 

А схема должна быть - снесли 50% хитов - выпил зелье - ждет 3 сек (либо ждет, когда кончится эффект от предыдущего) - пьет новое, и так, пока не сдохнет или зелья не кончатся.

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

Я сделал скрипт на ауру мора - в игре работает хорошо.

 

Олол, а если прикрутить DontSaveObject в начале комбинированного скрипта рандомизации статов и заражения. Наткнулся на такое существо, статы и размер рассчитались, но из битвы мы не вышли а сохранились прям так. При следующей загрузке сейва эта же копия существа снова пересчитает свои статы и сменит размер? Ведь переменная done == 1 не запишется в сейв.

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

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

Вы сможете оставить комментарий после входа в



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

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