The Elder Scrolls & Fallout 3 Modding

на главную страницу сайта

Форум Oblivion, Skyrim & Fallout 3/4 Modding

Объявление

У нас есть свой сервер Дискорда. Заходите, пообщаемся.
Господа, те кто пользуются фотохостингом http://uploads.ru/ для размещения изображений. Рекомендую воспользоваться для упрощения загрузки вот этой программой.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. » Вопросы по скриптам в Fallout 3


Вопросы по скриптам в Fallout 3

Сообщений 331 страница 360 из 418

331

SpalnyVagon
Привет!

SpalnyVagon написал(а):

Переменная trigger для чего?

Да это я всяко уже пробовал, уже и контейнер рядом поставил и на него повесил скрипт с измерением расстояния и включением триггера. Всё равно ничего не получается. И забыл убрать.
Сам скрипт (без моих добавлений) работает правильно. ГГ заходит (или проходит через зону триггера) происходит три заброски NPC (пока написано только для 1 в каждой группе). Они атакуют, их убивают - всё правильно.
Но вот если снова войти в триггер процесс заброски и атак начинается снова.
Вот я и пытался добавить в скрипт отключение и включение при уходе ГГ подальше. Но никак не могу это сделать. Если триггер отключается то уже больше не включается. Я думал, что это из-за того, что я неправильно или  не там делаю проверку на расстояние.
Теперь знаю, что из-за этого

SpalnyVagon написал(а):

сам себя он в нее потом не загрузит

.
Выше я написал, что поставил контейнер и пытался через него снова включать триггер и измерять расстояние до ГГ.
Решил попробовать, хоть и не знал про то что ты написал. Но всё равно сделать не смог!
Потом решил добавить ещё один контейнер и отключать и подключать его вместе с триггером. Что бы в игре было видно включён триггер или нет.
Но проверить уже не успел - пошёл на работу.
Так что я всё равно бы понял - что триггер не включается - но почему не понял бы никогда! Если бы не сказал.
Может триггер совсем не трогать, а отключать маркер на который происходит заброс атакующих групп. А при уходе ГГ снова включать?
Пока.

0

332

K.A.I.N. написал(а):

Может триггер совсем не трогать

Разумеется. Зачем его трогать. Просто процесс следует перезапускать не сразу, как только атаки закончились, а после того, как игрок отойдет на заданное расстояние.
Раньше было так:
If (e1+e2+e3) == 3
Set StartAttack to 0
EndIf

А надо зделать так:
If (e1+e2+e3) == 3 && Getdistance Player >= 256
Set StartAttack to 0
EndIf

Кстати, 256 - довольно таки маленькое расстояние, далеко игрок не уйдет.
Кстати, if (AAAKainTriggerAtackRef.Getdistance Player >= 256). Если скрипт висит на объекте, то ему переадресация не нужна, AAAKainTriggerAtackRef. - это лишнее. Все, что касается "скриптоносителя", можно делать напрямую, без указания Ref имен.

0

333

SpalnyVagon
Привет!
If (e1+e2+e3) == 3 && Getdistance Player >= 1024
Set StartAttack to 0
EndIf
Ведь здесь все правильно. Три атаки и дистанция (если верно) то значение перемененной устанавливается в 0.
Если не верно, то атак больше не будет. В блоке GameMode все условия выполнены - повтор не запуститься.
Но ведь есть блок Begin OnTriggerEnter Player
И в нём приказывается при входе установить значение  Set StartAttack to 1
ГГ вошёл в триггер и установил значение в 1
В блоке GameMode условия выполнились и атаки начались снова несмотря на это.
If (e1+e2+e3) == 3 && Getdistance Player >= 1024
Я в игре проверял прежде чем написать. Если входить в триггер постоянно, то и атаки идут постоянно.
Пойду дальше эксперименты ставить!
Пока.

Отредактировано K.A.I.N. (2011-07-01 08:41:04)

0

334

K.A.I.N. написал(а):

Я в игре проверял прежде чем написать. Если входить в триггер постоянно, то и атаки идут постоянно.

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

0

335

SpalnyVagon
Я наверное не так выразился. Нужны атаки, которые идут не вообще постоянно, а только в присутствии ГГ - должно быть три волны атакующих.
Мы это сделали.
Теперь нужно добиться того, что бы ГГ повторно не мог активировать триггер пока он не сходит на 1024 от него.
А сейчас это делаеться. Находясь близко от триггера - несмотря на это If (e1+e2+e3) == 3 && Getdistance Player >= 1024
Триггер активируеться повторно так как в нём есть вот это Set StartAttack to 1.
Получается так, что условие заданное в блоке GameMode перебивает блок OnTriggerEnter Player.
Получается, что не обязательно уйти далеко, что бы вновь начать атаки.

0

336

K.A.I.N. написал(а):

Триггер активируеться повторно так как в нём есть вот это Set StartAttack to 1.

Понятно. Значит надо ввести дополнительную проверку.
Было так:

Begin OnTriggerEnter player
  Set fTimer to 60
  Set StartAttack to 1
  Set e1 to 0
  Set e2 to 0
  Set e3 to 0
End

Сделать так:

Begin OnTriggerEnter player
if StartAttack == 0
  Set fTimer to 60
  Set StartAttack to 1
  Set e1 to 0
  Set e2 to 0
  Set e3 to 0
endif
End

Теперь механизм запустится только в том случае, если StartAttack == 0. А это возможно либо при первом посещении, либо после того, как отойдешь на 1024.

Отредактировано SpalnyVagon (2011-07-01 13:56:02)

0

337

SpalnyVagon
Hedge так же поступил!
short DoNotEnter

Begin OnTriggerEnter Player       
Set fTimer to 60
If DoNotEnter == 0
Set DoNotEnter to 1
Set StartAttack to 1

Set e1 to 0
Set e2 to 0
Set e3 to 0
EndIf

End

То же ввёл дополнительную проверку. Я уже испытал в игре - всё работает как надо. Просто тебе не написал сразу - думал а вдруг твоё решение другим будет.
Хотел заполучить сразу два варианта скрипта! Шутка.
Спасибо за помощь.
Пока.

0

338

Здравствуйте форумчане!
У меня один вопрос. Как заставить своего персонажа воспроизводить анимацию через скрипт? Банальное player.playidle animname естественно не работает без использования TFC. Борюсь с этим уже не один день. Где-то на просторах интернета прочитал, что если разместить файл анимации за пределами папки characters, то анимация воспроизведется - не хочет((((( Только через Free Camera... Разбирал скрипты Groovatron'a, сломал все мозги, как они это сделали... Пожалуйста, помогите...

0

339

system-q написал(а):

Как заставить своего персонажа воспроизводить анимацию через скрипт?

Можно попробовать порыться здесь:
http://goo.gl/qece0
это про Обливион, но в плане скриптов игры похожи.

0

340

system-q написал(а):

У меня один вопрос. Как заставить своего персонажа воспроизводить анимацию через скрипт? Банальное player.playidle animname  естественно не работает без использования TFC. Борюсь с этим уже не один день. Где-то на просторах интернета прочитал, что если разместить файл анимации за пределами папки characters, то анимация воспроизведется - не хочет((((( Только через Free Camera... Разбирал скрипты Groovatron'a, сломал все мозги, как они это сделали... Пожалуйста, помогите...

Как это не работает player.playIdle IDАнимации ? У меня все работает. Если хочеш как то подркгому, то только через "аи пакет" и будешь использовать скрипт player.addscriptpackage "IDпакета".

0

341

Graf написал(а):

Как это не работает player.playIdle IDАнимации ? У меня все работает. Если хочеш как то подркгому, то только через "аи пакет" и будешь использовать скрипт player.addscriptpackage "IDпакета".

Хм.. Странно.. У меня тоже работает player.playIdle IDАнимации , но только если игра находится в режите Free Camera (TFC). Ладно. Буду разбираться с AI Пакетами.

Есть еще один вопросик. Как приостановить на определенное время скрипт?

Например:

if activateq == 0   
     if player.GetHealthPercentage <= 0.20
     set activateq to 1
     player.addscriptpackage "0001deathai"
ЗДЕСЬ ПАУЗА ВЫПОЛНЕНИЯ СКРИПТА, например, 5 секунд
     set timeFactor to 0.25
     sgtm timeFactor
     set timer to 0

Спасибо за помощь.

Отредактировано system-q (2011-07-18 10:21:20)

0

342

system-q
А если по подробней, ты хочешь остановить время ? Если скрипт производит анимацию, то остановка скрипра приизведет к заново использованию скрипра.

0

343

Привет всем!

Sergey_Ros написал(а):

вот общий скрипт для повторения определенного действия каждые два дня:
Код:

ScriptName ScriptNameSCRIPT

short FirstDay
short CurrentDay
short Step

Begin GameMode

if (Step == 0)
set FirstDay to GameDayPassed
set Step to 1
elseif (Step == 1)
set CurrentDay to GameDayPassed
if (CurrentDay >= FirstDay + 2)
set Step to 2
endif
elseif (Step == 2)
; Действие после окончания двух дней
; Скорее всего, перемещение объекта на исходную позицию (XMarker)
set Step to 0
endif

End

А как вот здесь сделать, что бы это действие начиналось 8.00 утра и потворялось в 20.00 через 12 часов
FirstDay + 0.5 - это я понял из пояснения Spalny Vagon
Вот так наверное  if GetCurrentTime == 8
Мне нужно сделать дверь которая закрывается и открывается по времени, она будет своего рода защитной створкой на окне.
И ещё этот скрипт не сохраняется, когда я вписываю в него действие Activate, а скрипт прикрепляю к двери.
Да и вообще любое - такое например  AAAShopWindowRef.Enable (хотя такой объект создан и отключен)
Пока.

0

344

K.A.I.N.
Всегда ? Кстати я писал скрипт начинания с 5 утра и конец 20:00 вечера. Ну близко к этим значениям, возьмите строчку времени с темы "возвращение магии в фол 3".

Код:
scn aaaTestTupDoorScript

begin OnActivate
If GetCurrentTime >= 20.75 || GetCurrentTime <= 5.75 
if ( aaaTestTupDoorRef.GetOpenState == 1 )
	aaaTestTupDoorRef.SetOpenState 0
elseif ( aaaTestTupDoorRef.GetOpenState == 3 ) && ( aaaTestTupDoorRef.GetLockLevel < 255 )
	aaaTestTupDoorRef.Lock 255
endif
else
If GetCurrentTime >= 5.75 || GetCurrentTime <= 20.75
	aaaTestTupDoorRef.Unlock
endif
if (aaaTestTupDoorRef.GetLocked == 0)
	aaaTestTupDoorRef.SetOpenState 1
endif
endif
end

Вот скрипт на активатор, если задействовать активатор в 20:45 тогда дверь закроется до 5:45 утра. Если активатор активировать после 5:45 утра до 20:45 тогда дверь будит открыта весь день. Думаю можно попробывать блок GameMode если хотите что бы эти действия происходили автоматически, тогда нужно поставить этот скрипт с блоком GameMode на квест и задействовать квест при старте игры.

Отредактировано Graf (2011-07-26 13:50:57)

+1

345

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

scn aaaforcelevitationscript

float angleZ

float X
float Y
float Z
float DX
float DY
float DZ
float oldX
float oldY
float oldZ
float oldDX
float oldDY
float oldDZ
float maxDXY
float t1
float t2
float t5
float t6
float sina
float turbo

begin ScriptEffectStart

set oldX to getPos x
set oldY to getPos y
set oldZ to getPos z
end

begin ScriptEffectUpdate

set X to getPos x
set Y to getPos y
set Z to getPos z
set DZ to Z - oldZ
    ; Levitation

    set DX to x - oldX
    set DY to y - oldY

    if (DX*DX)>(DY*DY)
    set maxDXY to DX
    else
    set maxDXY to DY
    endif
   
    if maxDXY < 0
    set maxDXY to -maxDXY
    endif

    set Z to oldZ

            if isSneaking == 0
              set turbo to  10
           else
              set turbo to 2
     endif

    if (DX*DX+DY*DY>8)
    set X to oldX + turbo*DX/maxDXY
    set Y to oldY + turbo*DY/maxDXY
;     endif
    setPos x , X
    setPos y , Y
   
    set angleZ to GetAngle x
               ;Message angleZ+1
               ;set Z to Z - (angleZ/180)

               if angleZ < -180
       set angleZ to angleZ + 360
    elseif angleZ > 180
      set angleZ to angleZ - 360
         endif

    set t1 to angleZ / 57.29577951    ; precalculate powers of "angle"
      set t2 to t1*t1
      set t5 to t2*t2*t1
      set t6 to t5*t1
    set sina to t1 - t1*t2/6 + t5/120 - t5*t2/5040 + t6*t2*t1/362880

               set Z to Z - turbo*(sina)
    endif
        setPos z , Z

set oldX to X
set oldY to Y
set oldZ to Z
set oldDZ to DZ
resetFallDamageTimer
end

СКРИПТ РАБОТАЕТ! НО...

Когда персонаж летит, он проигрывает анимацию ходьбы и даже ТОПАЕТ!  :canthearyou:

Я попробовал в начале блока ScriptEffectUpdate вписать фразу Playgroup Jumploop 1 - тогда получается, что анимация начинает проигрываться, но при этом игра намертво зависает.

В общем, есть ли способ заставить персонаж во время левитации поменять анимацию без катастрофы для игры?

0

346

Graf Привет! Спасибо - попробую сделать, как ты посоветовал!
Мне как раз нужно, что бы она работала в автоматическом режиме. Утром открылась и поднялась вверх, а вечером опустилась вниз и закрылась на ключ. У меня такая защитная створка на окне. Сделал из каменной секретной двери. Только отретекстурил под железо и потоньше сделал.
Пока.

Отредактировано K.A.I.N. (2011-07-30 20:41:03)

0

347

K.A.I.N., Ну я проверял в игре, правда с блоком OnActivate всё работало только анимация открытия если происходила то на все время работы скрипта. Может это просто такая дверь была. Ну в общем напишите потом нормально ли работает  с блоком GameMode может и мне пригодится.

0

348

Вовочка, Ну а какую анимацию ты хочеш использовать ? Хотя не имеет значения.
Лучше всего добавить свою анимацию  и сделать Actor Effect с действием своей анимации ну и уинуть в скрипт строчку Player.CastImmediateOnSelf aaaSitOnActorPlayerEffect

Где aaaSitOnActorPlayerEffect - это ID твоео Actor Effect

Или просто добавить анимацию через аи пакет или через player.PlayIdle Idle.

Где Idle там твоя анимация. Кстати на чём стоит эффект ?

0

349

Graf написал(а):

Лучше всего добавить свою анимацию  и сделать Actor Effect с действием своей анимации ну и уинуть в скрипт строчку Player.CastImmediateOnSelf aaaSitOnActorPlayerEffect

Где aaaSitOnActorPlayerEffect - это ID твоео Actor Effect

Или просто добавить анимацию через аи пакет или через player.PlayIdle Idle

С АИ пакетом как раз не прокатит - поскольку надо изменение анимации засунуть именно в скрипт и именно в этот - вот почему:

Graf написал(а):

Кстати на чём стоит эффект ?

В общем, скрипт, который я процитировал, повешен на базовый эффект, а базовый эффект - на "зелье".

А чем отличается Playgroup от Playidle? Например, player.PlayIdle Jumploop - эта строка имеет смысл?

Здесь фикус-пикус в том, что движение-то должно совершаться, а анимация - должна быть фактически несоответствующей движению. В Обливионе это вполне возможно кстати - я даже на курьезных примерах это видел - например, когда игроку насильственно назначается анимация при помощи заклинания - он движется в той позе. которая задана, так смешно получается:)))))) А Ф3 что-то вот отказался выполнять такое насилие.

____________________

Кстати, попутный вопрос - а кроме левитации, можно как-то сделать "просто" увеличение в несколько раз высоты прыжка - типа как в Обливионе делается повышением акробатики? А потом сделать замедленное падение?

Отредактировано Вовочка (2011-07-31 02:57:08)

0

350

Вовочка
Думаю лучше делать через playidle. На щет разницы не хочу писать с телефона. Комп уже выключил. А на щет прыжка это смотря на чем будет использоватся эффект, это имеет значение при что бы сделать при падении эффект замедления. Можно поставить скрипт таймер то есть как прыжок использован через 2 секунды активировать замедление и через 4 секунды снять эффект замедления.

0

351

Graf написал(а):

Думаю лучше делать через playidle.

Попробовал - ноль эффекта. В смысле левитация есть, но анимация все равно ходьбы.

Поглядел на нексусе кстати мод про Бэтмена, там есть полет - но там ФОСЕ требуется, а у меня ФОСЕ не пашет.

0

352

Вовочка
Хм, зачем всё усложнять фосе ? Вот что мы сделаем. Создадим эффект со скриптом:

Код:
begin scripteffectupdate

player.idle ididle

end

В эффекте отмечаем
self и painless. После этого создаем актор эффект со своим эффектом и в свой скрипт левитации добавляешь такую строчку player.castimmediateonself idactoreffect и наслаждайся анимацией.

0

353

Graf написал(а):

В эффекте отмечаем
self и painless. После этого создаем актор эффект со своим эффектом и в свой скрипт левитации добавляешь такую строчку player.castimmediateonself idactoreffect и наслаждайся анимацией.

Попробую. Это если пошагово:

1. Сначала ищем подходящую анимацию.
2. Создаем на ее основе новую группу в разделе Idle animations
3. Уже ее айди вставляем в тот скриптовой фрагмент.

А потом далее - как прописано.

Я правильно понял?

________________

В общем, попробовал вот так:

1. Передрал из мода про Бэтмена анимацию полета

2. Создал в Idle animations новую группу Glide

3. Просто вписал в скрипт в начале ,блока Scripteffectupdate
playidle Glide

Заработало, игра не вылетает. Но...
При окончании эффекта левитации анимация НЕ СНИМАЕТСЯ.

Подозреваю, что надо создать блок  scripteffectfinish и в нем как-то написать, что мол хватит изображать птичку.

Вопрос - какую команду для этого надо использовать?

________________

Попробовал и не писать непосредственно playidle Glide, а сделал эффект, и прописал его как указано - то же самое. Анимация накладывается, но не снимается. Может, в параметрах самой анимации что-то надо прописать?

Отредактировано Вовочка (2011-08-02 23:42:43)

0

354

Вовочка написал(а):

При окончании эффекта левитации анимация НЕ СНИМАЕТСЯ.
            Подозреваю, что надо создать блок  scripteffectfinish и в нем как-то написать, что мол хватит изображать птичку.

А не легче в актор эффект где ставишь сам эффект, поставить время действия эффекта.

0

355

Graf написал(а):

А не легче в актор эффект где ставишь сам эффект, поставить время действия эффекта.

Дык и пробовал так. Все равно не снимается. Что-то связано скорее всего с параметрами самой анимации, но пока я в этих параметрах не разобрался.

0

356

Вовочка, Не поверил, проверил сам, установил таймер 10 секунд на двух эффектах, оба эффекта ищезают через 10 секунд. Может тебе мод скинуть ? Глянешь сам.

Отредактировано Graf (2011-08-03 18:18:20)

0

357

Graf написал(а):

Вовочка, Не поверил, проверил сам, установил таймер 10 секунд на двух эффектах, оба эффекта ищезают через 10 секунд. Может тебе мод скинуть ? Глянешь сам.

Отредактировано Graf (Сегодня 20:18:20)

Скидывать не надо, лучше просто покажи, как это выглядит в скрипте левитации.

Сейчас попробую разобраться в параметрах самой анимации - может, я там указал, чтобы она зациклилась на бесконечности. Короче, создам новый пункт в IdleAnimations без повторений. И его прикручу к эффекту.

А, вот еще - получается, что блок Sсripteffectupdate обрабатывается каждый фрейм или что-то близко к тому? Тогда как ведет себя внутри этого блока наложение эффекта? Тоже получается каждый раз накладывается или нет?
______________

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

Отредактировано Вовочка (2011-08-03 21:05:55)

0

358

Вовочка, Все получилось как я и сказал в начале.

0

359

А сейчас я сделал еще смешнее.

В общем, никаких эффектов кроме самого эффекта левитации. А в его скрипте вот что сделал:

В блоке scripteffectupdate в начале прописал playidle Glide (тот самый, который у меня не снимался после конца эффекта), а потом создал блок scripteffectfinish  и туда вписал playidle Castingself (kf тоже передрал из одного мода - эта анимация как раз снималась спокойно). И все, теперь после конца эффекта левитации персонаж спокойно анимируется как ему положено.

Кстати, а какую анимацию ты использовал в своем эксперименте?

_______________

Попутный вопрос - где мод выложить для тех, кто хочет потестить?

Отредактировано Вовочка (2011-08-03 22:15:41)

0

360

Вовочка написал(а):

Кстати, а какую анимацию ты использовал в своем эксперименте?

Я ездил на стелс мотоцикле  :)

0


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. » Вопросы по скриптам в Fallout 3