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

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



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




Паха007  Offline  Сообщение №961 написано: 20 июня 2013, 14:20


Страж времени


857
Spalny_Vagon, спасибо.

Я есмь Альфа и Омега, начало и конец. Жаждущему дам даром от источника воды живой.
emo877  Offline  Сообщение №962 написано: 22 июля 2013, 03:57 | Отредактировано: emo877 - 25 июля 2013, 10:18



49
Обнаружил, что не знаю как заметить cellchange (interiors в основном). Пока спасаюсь сравнением числа npc (getNumRef 42), но это очень несерьезно. Потребность в обнаружении уровня "лучше перебдеть" (надо приостанавливать секунд на 5 скрипт чтобы пц не "получал по морде" ещё до окончания загрузки локации, знаете же эту "особенность" движка - ещё крутится "загрузка", а события уже продолжаются).  (EDIT:  25jul) прочитал про menumode 1007 ("loading") - буду пробовать.

Ещё вопрос -- у одного неглупого человека увидел "rand 1000 1" (штук 6 вхождений), показалось странным, в документации на nvse сказано просто "rand min max".
Из 10 вызовов получил 10 раз по 1 (nvse3b2). Может, в предыдущих версиях была какая-то особенность? Или мне писать ему об ошибке? (у него такой гигантский многолетний ongoing, что неудобно "лаять на неправильное дерево" ;))

Frostik  Offline  Сообщение №963 написано: 25 июля 2013, 22:20



53
Подскажите как отправить рейдера в патруль (2-3 точки), если Linked Ref уже занята х-маркером?
На маркере он рождается (такая задумка)...

---------------------------------------------------------------------------
scn aaaRaidersResp07

short doOnce
float Timer

Begin GameMode
if getdead == 1 && doOnce == 0
set doOnce to 1
set Timer to 120
endif

if (Timer > 0) && (doOnce == 1)
set Timer to (Timer - GetSecondsPassed)
elseif (doOnce == 1)
aaaAttackMarkerREFF007.PlaceAtMe LvlFiend2MeleeVarNVaaa008 1, 250, 1
set doOnce to 2
endif
End
---------------------------------------------------------------------------

tundruck73  Offline  Сообщение №964 написано: 26 июля 2013, 00:38 | Отредактировано: tundruck73 - 26 июля 2013, 01:04



Чья Linked Ref занята Х-маркером? Рейдера, что ли? Если так, то для патруля она не нужна.

Мосье, же не манж па сис жур...
Умер 23.04.2019
Frostik  Offline  Сообщение №965 написано: 26 июля 2013, 12:34



53
Да, Linked Ref рейдера занята.   Нужно, чтобы он родившись, шел по маршруту (патруль),  а не стоял на месте.

djsave  Offline  Сообщение №966 написано: 26 июля 2013, 13:28


=TMG= TeamModingGames


505
Ну так сделай пакет для этого рейдера с маршрутом и давай ему после появления или сразу пропиши, он и будет блуждать, а маршрут задается именно в пакете АИ. 
Вроде так.

=TMG= Team Moding Games
tundruck73  Offline  Сообщение №967 написано: 26 июля 2013, 14:48 | Отредактировано: tundruck73 - 26 июля 2013, 14:48



Frostik, даешь своему рейдеру пакет Patrol, предварительно расставив по нужному маршруту XMarker`ы. Соединяешь последовательно эти маркеры через их Linked Ref, в пакете указываешь в качестве цели первый из маркеров. В Patrol Data маркеров можно настроить время нахождения непися на каждом из маркеров и еще много чего. Если в пакете будет выбрана какая-нибудь анимация, на каждом из маркеров непись будет ее проигрывать. Вот, собственно, и все.

Мосье, же не манж па сис жур...
Умер 23.04.2019
Frostik  Offline  Сообщение №968 написано: 26 июля 2013, 15:28



53
Спасибки!

SerG_8  Offline  Сообщение №969 написано: 27 июля 2013, 14:57



50
Добрый вечер! Ме нужна помощь со скриптом!
Нужно чтобы при захождении Главного Героя в определенную локацию или тиггер, он мог двигаться только в присяди. 
Буду очень благодарен!

Spalny_Vagon  Offline  Сообщение №970 написано: 28 июля 2013, 06:05


Мастер


Цитата SerG_8

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


Мне кажется, что никак. Наоборот, только стоя, это запросто.

======================
Мод "Нью-Йорк" на русском: 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
KAIN48  Offline  Сообщение №971 написано: 28 июля 2013, 08:12


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


Привет всем!
Цитата SerG_8

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


Spalny_Vagon, а если при входе в локации или триггер, заставить непися выполнять AI пакет, в котором включена галка Always Sneak (всегда красться).
Я не знаю работает она или нет, но что такая есть я знаю.

Мы вышли из дома, когда во всех... Поздно вышли!
Spalny_Vagon  Offline  Сообщение №972 написано: 28 июля 2013, 08:57 | Отредактировано: Spalny_Vagon - 28 июля 2013, 08:58


Мастер


Цитата KAIN48

заставить непися выполнять AI пакет, в котором включена галка Always Sneak (всегда красться).


Речь шла о ГГ, а не о НPC. У ГГ можно отключить возможность красться командой disablePlayerlControl с параметром. А отключить возможность прямохождения нельзя. Его тоже можно заставить выполнять АИ-пакет с галкой sneak, но в этом случае надо будет полностью отключать управление игроком. Что еще можно сделать, я не знаю. Ну, разве что убить, если он вдруг встанет там, где не положено.

======================
Мод "Нью-Йорк" на русском: 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
SerG_8  Offline  Сообщение №973 написано: 28 июля 2013, 11:35



50
Жаль, но все равно спасибо! И мне нужна помощь ещё с одним скриптом. Вряд ли этот скрипт будет сложным.
Нужно сделать что-то наподобие лифта, нужно чтобы при активации он ехал вниз или вверх, в зависимости от того, где он сейчас находиться.
Подобный скрипт я видел в FALLOUT 3, лифт в монументе Вашингтона, но здесь будет гораздо проще, ведь в движение будет всего 2 предмета.
Скрипты сложная вещь, поэтому я прощу помощи у вас. Помогите пожалуйста!

KAIN48  Offline  Сообщение №974 написано: 28 июля 2013, 14:40 | Отредактировано: KAIN48 - 28 июля 2013, 14:42


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


SerG_8 привет!
Graf делал лифт, в котором платформа поднимает игрока вверх после включения выключателя, и отпускает вниз после активации второго выключателя. Насколько я помню платформа движется вместе с коллизией, поэтому игрок может свободно перемещаться в пределах платформы во время подъёма.
Лифт в Монументе Вашингтона сделан по другому, вроде там игрока лишают управления и он может только осматриваться вокруг.
Не помню! Поправьте если ошибаюсь.
А лифт Graf работает, как настоящий лифт.

Это ссылка на архив с моделью и тестовым esp Скачать
Лифт находится в Гаморе
Если будешь искать в GECK введи в поле фильтра aaaTestElevator и выбери ALL в дереве папок окна Object Window
Найдуться - сам лифт aaaTestElevator - обрати внимание модель Movable Static, если будешь менять модель на свою делай из неё же, сменив путь к своёму nif. Насколько я помню модель из раздела статика работать не будет.
Там же будут найдены два скрипта и два выключателя на которых и "висят" эти скрипты.
И ещё есть один XMarker (aaaTestElevatorMarker01Ref)
Скрипты на вид не особо сложные - наверное разберёшься.
Я не смог! Но у меня личная неприязнь с ними! :D
Если будут вопросы спрашивай у Graf здесь Сайт Правда он давно на MG не был, наверное занят.
Пока.

Мы вышли из дома, когда во всех... Поздно вышли!
JupiterJour  Offline  Сообщение №975 написано: 28 июля 2013, 15:31


_


Я как-то глядел на Обливион через Construction Set, так там вроде подъёмники - обычные анимированые активаторы, проигрывают при активации PlayGroup forward и PlayGroup backward, никаких особых хитростей. Интересно, куда они делись в Фоллауте?

SerG_8  Offline  Сообщение №976 написано: 28 июля 2013, 15:45



50
KAIN48, большое спасибо! А лифт в монументе Вашингтона был устроен с хитростью, там двигалась не кабинка с ГГ, а фон  ;)

Вис  Offline  Сообщение №977 написано: 16 сентября 2013, 15:43



298
Вот, появился новый вопрос: имеется скрипт (не мой)
Код
scn TTWCG00Script

short iMessageShown
short iMessageToShow
short iButtonPressed
short iAwaitingInput
short iGameChoice        ;1 = start in NV, 2 = Start in CW
short iDoOnce
float fTimer

begin gamemode

; After player move to TTWPlayerStartMakerREF, gamemode starts. Now pick the real start
         if (iMessageShown)
         else
             if (iMessageToShow == 0)
                 set iMessageShown to 1
                 set iAwaitingInput to 1
                 set fTimer to 5
                 ShowMessage TTWNewGameStartMSG
             elseif (iMessageToShow == 1)                            ;Timed out or interupted by another messagebox so buttonpressed invalid
                 set iMessageShown to 2
                 set iAwaitingInput to 1
                 set fTimer to 5
                 ShowMessage TTWNewGameStartTryAgainMSG                ;Explain to player so they don't think we're stupid.
             endif
         endif

         if (iAwaitingInput)
             set iButtonPressed to GetButtonPressed
             if (iButtonPressed > -1)
                 set iAwaitingInput to 0
                  
                 if (iMessageShown)
                     if (iButtonPressed == 0)            ;New Vegas
                         set iGameChoice to 0
                         setstage VCG00 0
                     elseif(iButtonPressed == 1)            ;Fallout 3
                         set iGameChoice to 0
                         setstage CG00V101 0
                     endif
                 endif
             endif
         endif
          
         if (fTimer > 0)
             set fTimer to fTimer - GetSecondsPassed
         else
             if (iGameChoice == 0)
                 set iMessageToShow to 1
                 set iMessageShown to 0
                 set iAwaitingInput to 0
             endif
         endif
      
         if (iGameChoice)
             StopQuest TTWCG00
         endif

end
Как я понял, мессадж TTWNewGameStartMSG появляется лишь раз, когда скрипт активируется в первый раз. Надо сделать так, чтобы этот мессадж появлялся и при второй активации скрипта. Как это сделать? Ещё меня смущает остановка квеста TTWCG00, она же тоже повлияет?

Artem13  Offline  Сообщение №978 написано: 16 сентября 2013, 15:51 | Отредактировано: Artem13 - 16 сентября 2013, 15:51


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


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

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



298
Цитата Artem13

И на чем скрипт то висит?

На квесте. Рассказываю всё в подробностях: этот мод для выбора пустоши в начале игры (если установлен TTW). А мне нужно, чтобы это сообщение появлялось ещё раз при активации двери.

Artem13  Offline  Сообщение №980 написано: 16 сентября 2013, 17:32


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


Цитата Вис

А мне нужно, чтобы это сообщение появлялось ещё раз при активации двери.

Тогда ориентировочно так:
1. Создаешь копию скрипта и меняешь его тип с Quest на Object (если не ошибаюсь)
2. Изменяешь имя скрипта и немного правишь его:

Код
scn TTWCG00DoorScript  

short iMessageShown  
short iMessageToShow  
short iButtonPressed  
short iAwaitingInput  
short iGameChoice        ;1 = start in NV, 2 = Start in CW  
short iDoOnce  
float fTimer  

   

begin OnActivate player

          if (iMessageShown)  
          else  
              if (iMessageToShow == 0)  
                  set iMessageShown to 1  
                  set iAwaitingInput to 1  
                  set fTimer to 5  
                  ShowMessage TTWNewGameStartMSG  
              elseif (iMessageToShow == 1)                            ;Timed out or interupted by another messagebox so buttonpressed invalid  
                  set iMessageShown to 2  
                  set iAwaitingInput to 1  
                  set fTimer to 5  
                  ShowMessage TTWNewGameStartTryAgainMSG                ;Explain to player so they don't think we're stupid.  
              endif  
          endif  
end

begin gamemode

          if (iAwaitingInput)  
              set iButtonPressed to GetButtonPressed  
              if (iButtonPressed > -1)  
                  set iAwaitingInput to 0  
                    
                  if (iMessageShown)  
                      if (iButtonPressed == 0)            ;New Vegas  
                          set iGameChoice to 0  
                          setstage VCG00 0  
                      elseif(iButtonPressed == 1)            ;Fallout 3  
                          set iGameChoice to 0  
                          setstage CG00V101 0  
                      endif  
                  endif  
              endif  
          endif  
            
          if (fTimer > 0)  
              set fTimer to fTimer - GetSecondsPassed  
          else  
              if (iGameChoice == 0)  
                  set iMessageToShow to 1  
                  set iMessageShown to 0  
                  set iAwaitingInput to 0  
              endif  
          endif  
        
          if (iGameChoice)  
              StopQuest TTWCG00  
          endif  

end

После чего вешаешь скрипт на нужную дверь.

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

Добавлено (16.09.2013, 21:32)
---------------------------------------------
Да, забыл уточнить - при таком варианте скрипты не знают о выборе, сделанном игроком в другом скрипте. Насколько я понял, тебя такое устроит.


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


GALAктическая мартышка


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

Ваше счастье, что я не ваше счастье
djsave  Offline  Сообщение №982 написано: 18 сентября 2013, 13:47


=TMG= TeamModingGames


505
Galko, скорее всего можно, только вот насчет лица не знаю как, а шмот вроде можно проследить и обычными скриптами без экстендера.  Это лирический вопрос или надо озадачиться решением ? 
Galko, ты еще играешь в вегас ? А 3й фол ? Ведь играешь наверно НПС Женского рода ? Нужна будет твоя помощь тогда.

=TMG= Team Moding Games
Artem13  Offline  Сообщение №983 написано: 18 сентября 2013, 13:52


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


Galko, няз, нет. Без НВСЕ запомнить экипировку игрока очень сложно - это нужно перебрать ВСЕ возможные предметы. А если учесть возможность использования предметов из модов, то вообще никак.
Что касается внешности - тут я пас, не разбирался я с этим. Теоретически, параметры игрока где-то хранятся. Можно ли их практически применить к новому неписю - хз.

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


GALAктическая мартышка


Внешность неважна. Двойник - это не совсем верно выразилась. Мне главное - чтоб одежда была такой же. Ну и пол. Расу и пол я знаю как "скопировать", а вот текущую экипировку... :(
Цитата djsave

Galko, ты еще играешь в вегас ? А 3й фол ? Ведь играешь наверно НПС Женского рода ?


в Фол уже отыгралась. Бегаю только по Нью-Йорку, который Большое яблоко.
А в Вегас почти не начинала. Слегка нырнула в игру и всё. Не понравилось.
Играю женским персонажем, ога.

Добавлено (18.09.2013, 18:04)
---------------------------------------------
А, нее, вру... Я ж в Вегасе прошла ДедМани и Блюз Старого Мира.


Ваше счастье, что я не ваше счастье
djsave  Offline  Сообщение №985 написано: 18 сентября 2013, 14:11


=TMG= TeamModingGames


505
Цитата Galko

Бегаю только по Нью-Йорку, который Большое яблоко.

Ога это 3й Фол значит - великолепно, значит жертву одну уже нашел.... я позже тогда в личку стукну или в бункере опишу. 
А насчет двойника без расширителя скриптов, можно попробовать, но прямого решения нет, надо искать ухищрения и смотреть что получиться. Может можно это сделать как то сюжетно ?

=TMG= Team Moding Games
Hellraiser  Offline  Сообщение №986 написано: 20 сентября 2013, 14:34


Dr. Moreau


Не подскажете образец такого скрипта: при входе в игру игрок через 3(4, 5 и т.д.)дней получает какое-то там сообщение. Мне просто важно узнать, как правильно организовать этот таймер. 
Заранее благодарю.

Death is the old debt, which sooner or later will have to pay.
This is as good a day to die as any, but at your funeral nobody will come.
Your way in hell you'll have to do yourself... Happy journey!
Alright, guys, all will be there, but you before...
JupiterJour  Offline  Сообщение №987 написано: 20 сентября 2013, 18:00 | Отредактировано: Joopeeter - 20 сентября 2013, 18:32


_


С помощью глобальной переменной GameDaysPassed (сколько дней прошло с начала игры). В простейшем виде:
Код
scn zzQuestScript

short DayX

Begin GameMode

if DayX==0
set DayX to GameDaysPassed+X; где Х - нужное число дней
elseif DayX>GameDaysPassed
;ничего не делать
else
set DayX to 10000000
ShowMessage zzMessage
endif

End

где zzMessage - ID сообщения

Скрипт вешается на квест. Если скрипт больше ничего не делает, то можно даже затормозить его Script Processing Delay до 15-20 секунд (10 игровых минут). Также если под это дело выделен специальный квест и он больше ни для чего не используется, нужно после вывода сообщения остановить его, то есть под ShowMessage вписать
Код
StopQuest zzQuest
где zzQuest - ID этого квеста

Hellraiser  Offline  Сообщение №988 написано: 20 сентября 2013, 18:16


Dr. Moreau


Joopeeter
спасибо. Принцип ясен.

Death is the old debt, which sooner or later will have to pay.
This is as good a day to die as any, but at your funeral nobody will come.
Your way in hell you'll have to do yourself... Happy journey!
Alright, guys, all will be there, but you before...
JupiterJour  Offline  Сообщение №989 написано: 20 сентября 2013, 18:26


_


Хех, хотел добавить...

Как вариант - повесить на игрока эффект длительностью 3, 4, 5 и т.д. дней, а в скрипте эффекта написать:
Код

Begin ScriptEffectFinish
ShowMessage zzMessage
End

Добавлено (20.09.2013, 22:26)
---------------------------------------------
Исправил детскую ошибку в скрипте из предыдущего сообщения. :(


Hellraiser  Offline  Сообщение №990 написано: 20 сентября 2013, 19:40


Dr. Moreau


Joopeeter
не работает. сообщение вылетает сразу после загрузки любого сейва.

Death is the old debt, which sooner or later will have to pay.
This is as good a day to die as any, but at your funeral nobody will come.
Your way in hell you'll have to do yourself... Happy journey!
Alright, guys, all will be there, but you before...
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
Поиск:





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