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

Авторизация  
MagnesiumFire

Скриптинг для F3/FNV

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

Странно, что не было этой темы. Создаю!  :)

 

Я, как человек слабо разбирающийся в энтом деле, имею множество вопросов. Вот один из них, задавал его в другом месте, но пока ничего не вышло. Может тут ответят, ну или скажут хотя бы - "ну ты бред придумал! не фантазируй" :) 

 

Появилось желание сделать один мод, но возник вопрос: можно ли как-то на скриптовом уровне определить насколько сильный радиационный фон вокруг РС? Не насколько он облучается (этот процент может меняться от сопротивляемости (медикаментов, шмоток и пр.)), а только определить показатель чистого рад-облучения которому он подвергается? Вот например, от воды PC берет 1 рад/сек (к примеру), вот как определить что он в текущий момент подвергается воздействию именно 1 рад/сек, а не 0.8. или 0.5 которые могут быть по факту? 
 
з.ы. я вообще-то сам оч сомневаюсь что это возможно, но решил все же спросить. а вдруг.. ;)  

Поделиться сообщением


Ссылка на сообщение

Задам еще тут этот вопрос, что-то не могу найти ответ...

Заметил что некоторые скриптовые установки сохраняются в игре даже при перезагрузке сохранения (без самого сохранения после срабатывания скрипта). Как бы сделать так, чтобы они сбрасывались в дефолт при каждой перезагрузке?

Поделиться сообщением


Ссылка на сообщение

 

 

Заметил что некоторые скриптовые установки сохраняются в игре даже при перезагрузке сохранения (без самого сохранения после срабатывания скрипта). Как бы сделать так, чтобы они сбрасывались в дефолт при каждой перезагрузке?

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

Поделиться сообщением


Ссылка на сообщение

какая неприятная особенность.. у расширителя есть такая функция GetGameLoaded, которая должна бы решать проблему, но похоже что в игре она не работает, или работает не совсем так как описывается. что интересно, в obse тоже есть такая функция, и там она работает именно так так должна, а в фолле похоже недоработали, или двиг тому виной.

 

печаль. значит будут баги в моем моде, пусть и незначительные...

Поделиться сообщением


Ссылка на сообщение

Кто-нибудь знает как можно создать постоянный клон объекта в игре?

 

Чудо-функции CloneForm в нвсе не существует, и это для меня очень большой облом ( 

 

MagnesiumFire

По первому вопросу, может GetRadiationLevel подойдет.

Поделиться сообщением


Ссылка на сообщение

Volkogava

GetRadiationLevel - не рабочая функция, в игре она используется лишь дважды, и то как функция условий для эффектов гулей. Что интересно, если использовать ее в скрипте, то работает она точно так же как GetAV RadiationRads. Зачем ее создавали - непонятно...

 

На счет CloneForm , в обоих расширителях есть TempCloneForm, и она работает, но не так как бы хотелось (в любом случае совсем не так как CloneForm в Обливионе). Если в последнем функцию можно было использовать как угодно и она сохранялась в сэйв, то в Фолле нет ни того ни другого, к тому же отмечалось что сама по себе эта функция очень нестабильна. Для ее работы нужно обязательно объявлять кучу переменных (иначе компилятор ругается матом), и с первой же перезагрузкой игры активность функции сбрасывается в 0...На нексусе вроде уже задавались вопросы на счет этой функции, но они так и остались без ответа. Причиной скорее всего служит тот же движок игры...а может разрабы fose/nvse уже просто забили на эти свои старые проекты, ведь оба они так и остались бетками..

 

Ради интереса - а что за объект нужно клонировать и в каких условиях? Может подойдет обычный PlaceAtMe (например, placeatme 7 1 0 0 - создает копию (клонирует) самого игрока, причем все это вполне стабильно и никуда не исчезает).

Поделиться сообщением


Ссылка на сообщение

Да, TempCloneForm инвалид настоящий, не подходит.

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

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

 

И тоже спрошу: а как ты посчитал что GetRadiationLevel используется дважды?

Поделиться сообщением


Ссылка на сообщение

Ясно. А рюкзак как должен активироваться, через инвентарь, или в реалтайме? И он вообще переносной или как ящик?.

 

Можно было бы использовать такую конструкцию, но она опять же построена на PlaceAtMe:

 

scn ....Script

ref TheBox 
float BurialDepth

begin OnActivate 

if (IsActionRef Player) 
        if TheBox == 0 
           set TheBox to PlaceAtMe IDContainer 1 
           set BurialDepth to (TheBox.GetPos Z) - 10000 
           TheBox.SetPos Z BurialDepth 
        endif
    TheBox.Activate Player 
else
    Activate 
endif

end

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

 

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

 

Но это в F3, Вегас я не проверял. Вегасом как-то не занимаюсь...)

Поделиться сообщением


Ссылка на сообщение

Да там всё также, просто у NVSE больше функций.

Поделиться сообщением


Ссылка на сообщение

Да там всё также, просто у NVSE больше функций.

 

Да, все верно. Наверное, стоит переименовать ветку.

 

MagnesiumFire

Не, такой вариант не катит. PlaceAtMe не создает референсы контейнеров.

 

У меня что-то похожее на это.

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

Поделиться сообщением


Ссылка на сообщение

 

PlaceAtMe не создает референсы контейнеров.
Так, еще раз. Если под термином "референс" ты подразумеваешь копию базового объекта (Reference), то именно такую копию через PlaceAtMe ты и создаешь, но объявляешь ее через переменную скрипта. Получается что:
 
ref TheBox - объявляем переменную тип reference (ссылка на копию объекта)
 
set TheBox to PlaceAtMe IDContainer 1  - присваиваем значение для этой ref-переменной
 
TheBox.Activate Player - активируем функцией референцированную копию объекта IDContainer
 
PlaceAtMe не ставит  флаг постоянной ссылки persistent references, это да, но сами референсы с ее помощью создать можно. 
 
Но в твоем случае действительно нужно искать другую схему. Поскольку невозможно в скрипте отследить копию самого рюкзака, то, при взятии ее в инвентарь, рвутся все связи с предыдущей копией контейнера, получается, что при каждом открытии рюкзака ты будешь открывать все новый и новый контейнер (что конечно неприемлемо). А вот в режиме GameMode эта схема работает вполне стабильно. Вот, кстати, одно из преимуществ Скайримского папируса, - там с копиями можно делать что угодно (отдельно скриптовать, задавать alias и т.д.)
Я бы сказал - неожиданно... Пока что мне не приходит в голову схема, которая удовлетворяла бы твоим требованиям. В nvse есть булевая функция IsReference, то толку от нее тут тоже нет, поскольку опять же невозможно отследить копию самого рюкзака.  
 
Да, тут действительно нужен аналог CloneForm, поскольку он мог работать как в режиме GameMode, так и в режиме MenuMode. А Фоллаутовский же ТempCloneForm работает только в режиме GameMode.
 
p.s. Хотя, может и я чего не знаю - я далеко не профессор в скриптинге, знаете ли.. ;)

Поделиться сообщением


Ссылка на сообщение

 

 

PlaceAtMe не создает референсы контейнеров
 

 

Пардон, я имел в ввиду что нужно создать уникальный референс рюкзака, который незаметно заменит текущий надетый, а контейнеры уже заранее сделаны)

 

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

 

Да и кстати, спасибо за

 

 

в поисковик редактора вбивается название функции и показываются только те записи в которых она есть ...

 

Век живи, как говориться, век учись :)

Поделиться сообщением


Ссылка на сообщение
 

 

Пардон, я имел в ввиду что нужно создать уникальный референс рюкзака, который незаметно заменит текущий надетый, а контейнеры уже заранее сделаны)

 

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

 

 

Век живи, как говориться, век учись   :)

 

Только с Filter не спутай (ну это маленькое окошечко в левом верхнем углу), он только по EditorID ищет   ;)

Поделиться сообщением


Ссылка на сообщение

 

 

Сомневаюсь что такая копия, попав в инвентарь, останется уникальной)
 

 

Ну, если представить, что функция CloneForm существует и работает как в Обливионе, то клонированный рюкзак будет уникальным. Проверено :)

 

Референсом я называю копию предмета которая находится в мире игры.

 

 

 

Только с Filter не спутай
 

 

Да я уж понял :)

Поделиться сообщением


Ссылка на сообщение

 

 

Сомневаюсь что такая копия, попав в инвентарь, останется уникальной)..

Насколько я знаю, чтобы попавший в инвентарь объект сохранил свой RefID, нужно проводить ряд танцев с бубном, причем прямо в игре для конкретного объекта. Вроде: на класть несколько копий, не перезапускать игру и т.д.

Поделиться сообщением


Ссылка на сообщение
Вроде: на класть несколько копий, не перезапускать игру и т.д.

 

а лучше всего - не брать в инвентарь )

 

Ну, если представить, что функция CloneForm существует и работает как в Обливионе, то клонированный рюкзак будет уникальным. Проверено :)

 

 

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

 

вообще сам фоллаутовский движок в чем-то даже уступает обливионовской версии, например в обливионе можно было вполне безболезненно совмещать работу двух типов MunuMode, а в Фоллауте это делать категорически нельзя. а про расширитель obse я вообще промолчу - в 20й версии насчитывалось в общей сложности более 700 (!) новых функций...что уж тут сравнивать.

Поделиться сообщением


Ссылка на сообщение

 

 

По первому вопросу, может GetRadiationLevel подойдет.
 

 

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

 

ну мне все равно GetActorValue больше подходит для моих целей..)

Поделиться сообщением


Ссылка на сообщение

Объяснит кто-нибудь на счет индексации функции DisablePlayerControls, какой индекс что отключает? А то я что-то уже какой день на geck.bethsoft.com зайти не могу  :huh: Кажет мне вечно такую бяку:

0a90dfaf84378d6ad654c0ad941e45f0.jpg

Поделиться сообщением


Ссылка на сообщение

Да, для начинающего скриптера это целая катастрофа :)

 

DisablePlayerControls MovementFlag (0/1) (optional), PipboyFlag (0/1) (optional), FightingFlag (0/1) (optional), POVFlag (0/1) (optional), LookingFlag (0/1) (optional), RolloverTextFlag (0/1) (optional), SneakingFlag (0/1) (optional)
 
Обозначения
 
MovementFlag 
Player movement is disabled. Activation of world objects is disabled. HUD is partially disabled: Action Points, Health, Crosshair.
PipBoyFlag 
Player cannot bring up the pip-boy interface. The "Wait" menu will also be disabled.
FightingFlag 
Player cannot bring up a weapon. If the player currently has a weapon out, the weapon will be holstered.
POVFlag 
Player cannot go into 3rd person view. If currently in 3rd person, the view is forced into first person.
LookingFlag 
Player looking is disabled -- the player's view is locked into its current position.
RolloverTextFlag 
No rollover text on world objects.
SneakingFlag 
Player cannot go into sneak mode. If currently sneaking, forces you out of sneak mode.
 
Надеюсь, ничего что на Аглицком)

Поделиться сообщением


Ссылка на сообщение

 

 

Надеюсь, ничего что на Аглицком)

 

Вполне нормально, спасибо) ...

 

Меня вот bethsoft беспокоит, что у них там за аврал? Раньше часто туда нырял, а сейчас как попало. И что интересно - не только у меня так...

Поделиться сообщением


Ссылка на сообщение

 

 

Меня вот bethsoft беспокоит, что у них там за аврал? Раньше часто туда нырял, а сейчас как попало. И что интересно - не только у меня так...

Разберутся, не сомневайся. Это крупный портал, могут себе позволить. :)

Поделиться сообщением


Ссылка на сообщение

 

 

Разберутся, не сомневайся.

Похоже уже никогда не разберутся. Времени прошло прилично...

 

---

 

Напишу свой вопрос на всякий случай, может кто сталкивался:

 

Мне нужно как-то сделать так чтобы после определенного события в уровневый (вещевой) список добавлялся новый предмет. Но как это сделать? Есть функция AddItemToLeveledList которая вроде должна эта делать, но рабочая ли она? Проверил - в обоих играх она не используется, пробовал использовать в скрипте 

AddItemToLeveledList LevelItemID ArmorID 1 1 .100 ; (значения пробовал менять и на другие)

скрипт исправно сохраняется, однако в игре эффекта нет...Тупик?

Поделиться сообщением


Ссылка на сообщение

@MagnesiumFire, Скорее всего придется использовать функцию как в перках, добавляющих предметы трупам (пальцы, уши).

Поделиться сообщением


Ссылка на сообщение

Привет народ. Может кто скрипт помочь создать? Я в них не шарю, просто пытаюсь адаптировать абсолютно разные скрипты из разных гайдов под себя. По мелочи начинаю, что то соображать вроде))

 

scn CRSPowActivatorScript

Begin onActivate Player
Short once

if ( once == 1 )
if ( GetItemCount CRSpredohr == 1 )
ShowMessage CRSQwhatBoxQuestActivateMess1
Activate

short mode
ref CRSControlPow1OfficeRef
begin onActivate
if (IsActionRef player == 1 )
if (mode == 0)
activate
set mode to 1

endif
endif
end

begin gameMode
set CRSControlPow1OfficeRef to CRSDoorInCaaveToTonnelRef
CRSDoorInCaaveToTonnelRef.Activate
Else
if ( once == 0 )
if ( GetItemCount CRSpredohr == 0 )
ShowMessage CRSQwhatBoxQuestActivateMess

endif
endif
end

 

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

Поделиться сообщением


Ссылка на сообщение
В общем надо повесить на активатор и при наличии предмета открывалась бы калитка))

 

При условии, что дверь должна именно открываться (т.е. просто проигрываться анимация), а не отпираться с замка, и это должно происходить только 1 раз, и проигрывание анимации активатора не требуется, тогда вот так можно:

 

scn CRSPowActivatorScript

Short once

Begin onActivate
if IsActionRef player && once == 0     
   set once to 1 
endif
end

begin gameMode
if once == 1
   if player.GetItemCount CRSpredohr
       ShowMessage CRSQwhatBoxQuestActivateMess1
       CRSDoorInCaaveToTonnelRef.SetOpenState 1     ; заменить на CRSDoorInCaaveToTonnelRef.Unlock если требуется отпереть дверь
;      playGroup Backward 1   -   добавить если требуется чтоб проигралась анимация самого активатора     
       set once to 2
   else
       ShowMessage CRSQwhatBoxQuestActivateMess
       set once to 0
   endif
endif
end 

Поделиться сообщением


Ссылка на сообщение

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

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

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

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

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

Войти

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

Войти
Авторизация  


×
×
  • Создать...