Модератор форума: КсюXa, ApeX  
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)

Скрипты
a3apbi4  Offline  Сообщение №1 написано: 7 декабря 2010, 18:01



11
Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.




Artem13  Offline  Сообщение №721 написано: 25 мая 2012, 14:18


Mercenaries. Со смертью на ты.


ITU, если так, то хотя бы первый опрос убери в первый if.

<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
JupiterJour  Offline  Сообщение №722 написано: 25 мая 2012, 14:21


_


Лучше верхнее GetButtonPressed перенести из-под Begin в первый блок if - endif, который проверяет LevMenuT == 1

Добавлено (25.05.2012, 18:21)
---------------------------------------------
опоздал :)


Artem13  Offline  Сообщение №723 написано: 25 мая 2012, 14:33


Mercenaries. Со смертью на ты.


Теоретически одного опроса на входе должно быть достаточно - всё равно кусок кода для меню нижнего уровня обработается в следующем фрейме после нового опроса. А скрипт компактнее и удобочитаемее становится. Надо смотреть, почему там двойное нажатие по сути отрабатывалось.

<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
JupiterJour  Offline  Сообщение №724 написано: 25 мая 2012, 14:54 | Отредактировано: Joopeeter - 25 мая 2012, 14:55


_


Цитата Artem13

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


Видимо, из-за того, что проверка следующего if шла в том же фрейме после присвоения значения переменной Button и нового значения LevMenuT.

Artem13  Offline  Сообщение №725 написано: 25 мая 2012, 15:01


Mercenaries. Со смертью на ты.


Неа. Изменение LevMenuT сработает только в следующем фрейме, т.к. анализ его идёт в верхнем уровне и все присвоения внутри его иф/елзеиф.

<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Spalny_Vagon  Offline  Сообщение №726 написано: 25 мая 2012, 15:40


Мастер


Цитата ITU

при выборе в меню ниже уровня ничего не делает


Мне кажется, что в многоуровневых меню должы быть свои кнопки на каждый уровень. Т.е. если у Вас два уровня, то должны быть button1 и button2.

======================
Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294
Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Artem13  Offline  Сообщение №727 написано: 25 мая 2012, 17:16


Mercenaries. Со смертью на ты.


Spalny_Vagon, поддерживаю.

<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
ITU  Offline  Сообщение №728 написано: 25 мая 2012, 19:09



995
вообщем удалил if (Button == -1)
удалил лишнии GetButtonPressed
и заработало
спасибо всем

Jack_of_Blades  Offline  Сообщение №729 написано: 31 мая 2012, 17:44



5
Будьте добры, подскажите пожалуйста, как сделать главного героя бессмертным (без tgm). Я использовал один из ваших скриптов:
scn GoodNPCScript
BEGIN OnHit
if (GetActorValue Health < 35)
Resurrect
endif
ResetHealth
END

Но корректно он действует лишь на иных npc. галочка у Essential действует схожим образом.

ITU  Offline  Сообщение №730 написано: 31 мая 2012, 18:15



995
Jack_of_Blades, не проще ли сделать какую-то шмотку с бешенной защитой и эффектом регена и увеличение ХП?
еще незнаю работает ли на ГГ SetEssential Player 1
можно так же как и лечение ГГ

Code
  Player.RestoreAV Health 1000000  
   Player.RestoreAV perceptioncondition 100
   Player.RestoreAV endurancecondition 100
   Player.RestoreAV leftattackcondition 100
   Player.RestoreAV leftmobilitycondition 100
   Player.RestoreAV rightattackcondition 100
   Player.RestoreAV rightmobilitycondition 100
   player.RestoreAV RadiationRads 1000000

Jack_of_Blades  Offline  Сообщение №731 написано: 31 мая 2012, 18:34



5
Нет нет. Я хочу сделать нечто по типу умер и воскрес, а не tgm через GECK

Добавлено (31.05.2012, 22:34)
---------------------------------------------
Весь косяк в камере и то, что гг после воскрешения стоит как манекен вместо того, чтобы поваляться пару секунд и дальше пойти


ITU  Offline  Сообщение №732 написано: 1 июня 2012, 02:42



995
Jack_of_Blades, ну тогда можно попробовать
https://modgames.net/forum/70-4191-2#353083

ElGazo  Offline  Сообщение №733 написано: 20 июня 2012, 14:02



70
Всем привет. Подскажите плиз малограмотному. Вот есть стандартный скрипт на открывание двери убежища:
Code
scn GenericControlPodScript
;See V112 for generic setup.

short mode
ref myLink

begin onActivate
  if IsActionRef player == 1
   set myLink to getLinkedRef   ;the linked ref should be the door.
   if ((myLink.getOpenState == 3) || (myLink.getOpenState == 1)) && mode != 2      ;door closed or open
    playgroup Forward 0                              ;pull handle out
    set mode to 2
    activate myLink                              ;activate all the things that this is an activate parent of - klaxon light and activator.
   endif
  endif
end

begin gameMode
   
  if (mode == 2)
   if (isAnimPlaying == 0)
    set myLink to getLinkedRef   ;the linked ref should be the door.
    playgroup Left 1                              ;pull handle down
    set mode to 3
    myLink.activate player
   endif
  endif

end

а так же есть пара REF'ов (элементарная мигалка и её свечение). Как заставить рефы включаться вместе с открыванием двери, а после гаснуть через заданный промежуток времени? Простая активация - это получилось. А вот с отключением - никак. Помогите, кому не сложно. Заранее благодарен.

ITU  Offline  Сообщение №734 написано: 20 июня 2012, 14:35 | Отредактировано: ITU - 21 июня 2012, 08:08



995
scn GenericControlPodScript

short mode
ref myLink
float timer

begin onActivate


begin onActivate
if IsActionRef player == 1
set myLink to getLinkedRef ;the linked ref should be the door.
if ((myLink.getOpenState == 3) || (myLink.getOpenState == 1)) && mode != 2 ;door closed or open

playgroup Forward 0
set timer to 5
set mode to 2
activate myLink ;activate all the things that this is an activate parent of - klaxon light and activator.
endif
endif

end

begin gameMode

if (mode == 2) &&(timer > 0)
set timer to timer - GetSecondsPassed
else
if (isAnimPlaying == 0)
set myLink to getLinkedRef ;the linked ref should be the door.

playgroup Left 1 ;pull handle down
set mode to 3
myLink.activate player
endif
endif

end

ElGazo  Offline  Сообщение №735 написано: 20 июня 2012, 15:05



70
Спасибо, но 2 но:

Цитата ITU

float status


ошибочка - Timer вместо status

Но другое: один из рефов - Klaxon. Это "мигалка". Т.е. он должен быть виден всегда. Но он анимированный, т.е. мне бы включать и отключать его анимацию. Сорри за тафтологию.

JupiterJour  Offline  Сообщение №736 написано: 20 июня 2012, 15:59


_


Цитата ElGazo

один из рефов - Klaxon. Это "мигалка". Т.е. он должен быть виден всегда. Но он анимированный, т.е. мне бы включать и отключать его анимацию.


В стандартном мигалкином скрипте (KlaxonLightScript) уже всё есть для включения-выключения, нужно только назназначить ей Activation Parent и каждый раз при его активации либо включится, либо выключится. В том же скрипте можно подглядеть и команду на выключение - PlayGroup backward 0.

ElGazo  Offline  Сообщение №737 написано: 21 июня 2012, 07:36



70
Цитата Joopeeter

В стандартном мигалкином скрипте (KlaxonLightScript) уже всё есть для включения-выключения, нужно только назназначить ей Activation Parent и каждый раз при его активации либо включится, либо выключится. В том же скрипте можно подглядеть и команду на выключение - PlayGroup backward 0.


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

ITU  Offline  Сообщение №738 написано: 21 июня 2012, 07:53 | Отредактировано: ITU - 21 июня 2012, 08:03



995
тогда миграние, два таймера

float timer
short status
short init

begin onActivate ; где-то вместо playgroup Forward 0 вставляешь

playgroup Forward 0
set timer to 0.5
set status to 1
set init to 10

begin gameMode ;сразу после gameMode

if (timer > 0) && ( init > 0 )
set timer to timer - GetSecondsPassed
else

if status = 1
playgroup Left 1
set status to 2
else
playgroup Forward 0
set status to 1
endif

set timer to 0.5
set init to init -1

endif

ElGazo  Offline  Сообщение №739 написано: 21 июня 2012, 08:05



70
Цитата ITU

тогда миграние, два таймера


Мы, похоже друг друга не понимаем.

Добавлено (21.06.2012, 12:05)
---------------------------------------------
Попробую спросить иначе. Как связать меж собой три реально представленых в игре готовых объекта: пульт управления дверью убежища, саму дверь и "Klaxon.nif". дверь с пультом - там всё просто, скрипты уже прописаны. Так как добавить в готовый скрипт активацию этого клаксона с отключением его с задержкой по времени? Первый вариант с таймером работает прекрасно, но один ньюанс: он активирует не "включение и вращение" мигалки, а только "вращение", мигалка оказывается "включеной" по умолчанию, т.е. уже светиться. Я просто запутался, решение наверняка простейшее.


ITU  Offline  Сообщение №740 написано: 21 июня 2012, 08:17



995
Цитата ElGazo

Мы, похоже друг друга не понимаем.


похоже
отредактировал полностью скрипт, а не то что надо добавить

ElGazo  Offline  Сообщение №741 написано: 21 июня 2012, 08:50



70
Всё ок! добился.
Всем спасибо за помощь и подсказки! :)

JupiterJour  Offline  Сообщение №742 написано: 21 июня 2012, 09:13 | Отредактировано: Joopeeter - 21 июня 2012, 09:15


_


Чёрт, буквально на несколько минут опоздал! :)

ElGazo  Offline  Сообщение №743 написано: 21 июня 2012, 09:23



70
Цитата Joopeeter

Чёрт, буквально на несколько минут опоздал!


И тебе спасибо! Учту. проектик в процессе... good

KAIN48  Offline  Сообщение №744 написано: 21 июня 2012, 13:04 | Отредактировано: KAIN48 - 21 июня 2012, 15:44


Шаманистый шаман


Привет всем!
Подскажите пожалуйста скрипт, начала игры в новом месте, не в доме в дока, а в другой локации.
Как в модах с альтернативным началом. Я ещё сам поищу, если найду напишу пока.
Пока.
Нашёл для Fallout 3 теперь новая задача открыть esp. Fallout 3 то не установлен!

нашёл написанный вариант скрипта с таким комментарием Graf

Хм, прийдётся делать около трёх новых квестов.

Код:

short State
short Button
short StartOption
float Delay

begin GameMode
if State == 0
set Delay to GetSecondsPassed
set Delay to 2
set State to 2
elseif State == 2
set Delay to Delay - GetSecondsPassed
if Delay <= 0
set State to 3
ShowMessage aaaMessageStartSelect
endif
elseif State == 3
set Button to GetButtonPressed
if Button > -1
set State to 2
StopQuest AltStartSelector
if iButton == 0
set StartOption to 1
setstage CG01 0
elseif iButton == 1
set StartOption to 2
set gameyear to 2274
set gamemonth to 7
set gameday to 3
set gamehour to 10
Player.MoveTo aaaStartMarker
EnablePlayerControls
ClearNoActivationSound
SetPCYoung 0
StartQuest aaaStart
endif
endif
endif
end

ShowMessage aaaStartSelect ; сообщение при старте игры (выбор)
if iButton == 0 ; продолжить обычный старт
elseif iButton == 1 ; начать новую линейку квестов

; Выбор времени в котором находится player
set gameyear to 2274 ; год
set gamemonth to 7 ; месяц
set gameday to 3 ; день
set gamehour to 10 ; время
Player.MoveTo aaaStartMarker ; перемещение на маркер
EnablePlayerControls
ClearNoActivationSound
SetPCYoung 0
StartQuest aaaStart ;Установка стадии 0

Это скрипт на первый квест.

Обезательно сделаешь пройденным квест у доктора Митчела.

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

Мы вышли из дома, когда во всех... Поздно вышли!
Lodochnik  Offline  Сообщение №745 написано: 22 июня 2012, 16:41



19
Ребята подскажите скрипт на сортировку всех вещей

"И стараясь жить как надо,перестать рубить с плеча.
Вроде бы поставил точку, точка снова стала горяча"
JupiterJour  Offline  Сообщение №746 написано: 22 июня 2012, 17:34 | Отредактировано: Joopeeter - 22 июня 2012, 17:38


_


Цитата Lodochnik

зачем нужны три квеста


Квестов нужно ровно столько, сколько совесть позволит. В простейшем случае можно обойтись одним квестом и одним скриптом, который по очереди покажет все меню создания персонажа и выкинет игрока пинком под зад куда-нибудь в игровой мир. А чтобы нормально оформить генерацию персонажа, не уступающую оригиналу, да ещё потом логично и красиво увязать новое начало с основным сюжетом (если не предполагается вообще заменить его весь на новый), может и трёх квестов не хватить. Да ещё, как пить дать, придётся лезть в оригинальные квесты и скрипты.
И даже лучше, по-моему, переиначить оригинальный стартовый квест под свои нужды. Ведь понятно, что если игрок подключил мод с альтернативным началом, то не для того, чтобы начинать опять по-старому.

KAIN48  Offline  Сообщение №747 написано: 22 июня 2012, 19:06


Шаманистый шаман


Joopeeter, Привет!
Цитата Joopeeter

да ещё потом логично и красиво увязать новое начало с основным сюжетом


Спасибо я понял.
Пока.

Мы вышли из дома, когда во всех... Поздно вышли!
ITU  Offline  Сообщение №748 написано: 2 июля 2012, 07:19 | Отредактировано: ITU - 2 июля 2012, 07:22



995
Цитата Lodochnik

Ребята подскажите скрипт на сортировку всех вещей


на все надо каждую вещь смотреть и вписывать, просто дать это много много текста
оружие и одежда имеет урон, поэтому либо писать скрипт узнавание урона и добавление вещи с этим уроном в контейнер, что еще больше по размерам скрипт и больше нагрузку на комп, либо использовать NVSE
Стандартный скрипт сортировки одной вещи:
Code
Short Count

Begin OnActivate
   Set Count to (Player.GetItemCount ид_вещи)
   Player.RemoveItem ид_вещи Count 1
   реф_контенера.AddItem ид_вещи Count 1   
end

KAIN48  Offline  Сообщение №749 написано: 9 июля 2012, 04:42


Шаманистый шаман


Привет всем!
Помогите пожалуйста разобрать с тем, как можно сделать оружие сверхпрочным.
Я нашел такие функции:
На оф сайте GetWeaponHealth, но без описания
А в игре есть if player.getHealthPercentage < .5
И set WeapHealth to WeapHealth + 15
Можно написать скрипт, что при состоянии износа оружия 50 процентов производилась замена на новое в инвентаре игрока?
Если можно напишите пожалуйста.
Я пробовал в Weapon Health сделать 999999, после закрытия окна и нового открытия там стало 100000000
А на карабине в игре вот такая картинка

Где значение жизни (состояния) я не понял!
Пока.

Мы вышли из дома, когда во всех... Поздно вышли!
Spalny_Vagon  Offline  Сообщение №750 написано: 9 июля 2012, 05:06


Мастер


Цитата KAIN48

Привет всем!
Помогите пожалуйста разобрать с тем, как можно сделать оружие сверхпрочным.
Я нашел такие функции:
На оф сайте GetWeaponHealth, но без описания
А в игре есть if player.getHealthPercentage < .5
И set WeapHealth to WeapHealth + 15
Можно написать скрипт, что при состоянии износа оружия 50 процентов производилась замена на новое в инвентаре игрока?


if player.getHealthPercentage < .5 - это здоровье ГГ, а не оружия.
GetWeaponHealthPerc - состояние оружия, которое находится у актера в руках.
if player.GetWeaponHealthPerc < 50 - это проверка состояния оружия у игрока.
Какое именно оружие в руках у ГГ Вы без НВСЕ не узнаете, хотя я могу и ошибаться.
Поэтому оружие проще не заменять, а лечить:
Code
if player.GetWeaponHealthPerc < 50
player.SetWeaponHealthPerc 50
endif

Примерно так, в игре не проверял. Еще раз напоминаю, речь идет не об оружии в инвентаре, а о сurrently equipped.
Строка состояния оружия - белая полоска внизу, справа от ССТ.

======================
Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294
Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
Поиск:





Ответ на жалобу смотрите в разделе жалоб