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

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



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




JupiterJour  Offline  Сообщение №991 написано: 20 сентября 2013, 20:06 | Отредактировано: Joopeeter - 20 сентября 2013, 20:13


_


Ладно, подумал, что может быть я совсем квалификацию потерял, что скрипт из трёх строк в уме составить не могу... Запустил ГЭКК, скопипастил туда этот квестовый скрипт - нет, работает. Именно этот. Если он "вживлялся" в другой, видоизменялся или дополнялся каким-то образом, то прошу предъявить код.
Эффект не проверял, но что там может не сработать, даже не представляю.

Hellraiser  Offline  Сообщение №992 написано: 20 сентября 2013, 20:23 | Отредактировано: Hellraiser - 20 сентября 2013, 20:30


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  Сообщение №993 написано: 20 сентября 2013, 20:45 | Отредактировано: Joopeeter - 20 сентября 2013, 20:50


_


Да, ещё. Можно (и даже лучше, наверное) заменить тип переменной с short на float. Тогда скрипт будет отсчитывать именно по 24 часа, а не просто отслеживать, что наступил новый день.

Добавлено (21.09.2013, 00:45)
---------------------------------------------
Цитата Hellraiser

Тогда как мне запустить этот осчет именно после нужной сталии квеста?


Добавить это условие в соответствующую проверку, то есть
Код
if (GetStage a03HellRobotPitti >= 65) && DayX==0    
    set DayX to GameDaysPassed+1   
    elseif DayX > GameDaysPassed    
   ;ничего не делать    
   elsif GetStage a03HellRobotPitti >= 65 && DayX<GameDaysPassed
   set DayX to 10000000    
          ShowMessage a10HellThreeDaysPastMessage   
          a10TroopersEnableRef.enable   
          a10DeleteCorpseSupermutansXMarker.disable   
          a10DisableMiscItemXMarker.enable   
          a01PostNCRDisableRef.disable   
          a09PostNCRXMarker.enable   
          Setstage a01HellOfficeBuildingII 5   
          StopQuest a03HellRobotPitti   

   endi

Там со стадиями такая особенность - если квест уже побывал на стадии, допустим, 65 или больше, то даже если он потом перешёл на стадию с меньшим номером, то GetStage всё равно будет возвращать 65 или больше. Тут, по идее, это не должно влиять, но можно запускать таймер из результ-скрипта самой стадии. То есть как-то так:
Код
if (GetStage a03HellRobotPitti >= 65) && DayX== -1    
    set DayX to GameDaysPassed+1   
    elseif DayX > GameDaysPassed    
   ;ничего не делать    
   elsif GetStage a03HellRobotPitti >= 65 && DayX<GameDaysPassed
   set DayX to 10000000    
          ShowMessage a10HellThreeDaysPastMessage   
          a10TroopersEnableRef.enable   
          a10DeleteCorpseSupermutansXMarker.disable   
          a10DisableMiscItemXMarker.enable   
          a01PostNCRDisableRef.disable   
          a09PostNCRXMarker.enable   
          Setstage a01HellOfficeBuildingII 5   
          StopQuest a03HellRobotPitti   

   endi
а в результ-скрипте стадии:
Код
set [ID квеста стаймером].DayX to -1

Hellraiser  Offline  Сообщение №994 написано: 20 сентября 2013, 20:46 | Отредактировано: Hellraiser - 20 сентября 2013, 23:01


Dr. Moreau


Joopeeter,
Разобрался. У меня заработала вот такая конструкция:

if (GetStage a03HellRobotPitti == 65)
if DayX==0
set DayX to GameDaysPassed+1
elseif DayX > GameDaysPassed
;ничего не делать
else
set DayX to 10000000
ShowMessage a10HellThreeDaysPastMessage
a10TroopersEnableRef.enable
a10DeleteCorpseSupermutansXMarker.disable
a10DisableMiscItemXMarker.enable
a01PostNCRDisableRef.disable
a09PostNCRXMarker.enable
Setstage a01HellOfficeBuildingII 5
StopQuest a03HellRobotPitti
endif
endif

Еще раз спасибо за помощь! Кстати, поменял переменную на float - стал честно отсчитывать часы.  good
UPD
Пошел по вашему совету - оставил часть в квестовом скрипте, а часть в результ-скрипте нужной стадии. Получилось элегантно и красиво.

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...
nortgen  Offline  Сообщение №995 написано: 30 сентября 2013, 14:04 | Отредактировано: KAIN48 - 30 сентября 2013, 14:08



27
Цитата ITU

взял скрипт из UHNV на маникены - чуток подправил

вариант из UHNV

мой вариант

гекк с глюкоисправителем + NVSE корорый не хочет скрипт сохранять
ругается Set ITUHMannequinFemale01Ref.Pose to 2
типа такой функции не понимает


уже вижу кто то бился с этой проблемой может кто что подскажет
где искать эту позу?

JupiterJour  Offline  Сообщение №996 написано: 30 сентября 2013, 16:03


_


Ёмаё, кто ж пишет в скрипте всё в одну строчку? Не разобрать же ничего! Надеюсь, хоть в ГЭКК ты его не в таком виде копируешь?

А позу искать в скриптах, висящих на тех манекенах. ГЭКК же не знает, что ты только ещё собираешься создать все те объекты и переменные, которые упоминаешь в своём скрипте, вот и намекает тебе на это: "неизвестная функция или переменная". То есть перед тем, как сохранять этот скрипт, надо повесить на манекены их собственные скрипты, в которых должна быть объявлена эта переменная Pose, разместить в мире реф-копии манекенов и дать им всем такие RefID, под которыми они фигурируют в приведённом скрипте.
И разбить скрипт на строки! Или это уже говорил?..

Artem13  Offline  Сообщение №997 написано: 30 сентября 2013, 17:37


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


Цитата Galko

И где блоки Begin - End?

Ты их просто не увидела. Joopeeter об этом и писал, когда говорил про "в одну строку" :)

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


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


А х его з. Я такие эксперименты не ставил. Теоретически, пробелов может и хватить. Практически - не советую так делать. Мало того, что оно нечитабельно, так еще и отлаживать - тот еще мазохизьм.

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



298
Всем привет! Опять всё тот же TTW. Нужно сделать так, чтобы человек, начавший в СП, при активации двери начинал проходить сюжет НВ. Ставил в скрипт строчку setstage VCG00 0. Всё начиналось хорошо - интро НВ, затем меня куда-то телепортировало (предполагаю, что к Доку), а дальше белый экран и всё. Как "заставить" продолжить квест? Что я делаю не так?

Artem13  Offline  Сообщение №1000 написано: 5 октября 2013, 14:29


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


Вис, на мой взгляд - т.к. перс уже создан, то там надо начинать со следующего квеста. Какой там идёт первый в мэйн ветке? Всё, что имеет в идентификаторе CG - это элементы генерации персонажа (character generator). Главный квест вроде бы имеет MQ в ИД.

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



Artem13, Сорри, что встрял, но суть в том, что надо сделать именно появление у дока со всеми вытекающими, мол док героя 'собирает' заново.

There is always another way...
nortgen  Offline  Сообщение №1002 написано: 5 октября 2013, 20:17 | Отредактировано: nortgen - 5 октября 2013, 20:19



27
подскажите
чтобы дверь появилась в диалоге в скриптах пишу
дверь.Enable
а что вписать что бы ее сного скрыть
дверь.Disabled
скрипт не принимает

Hellraiser  Offline  Сообщение №1003 написано: 5 октября 2013, 20:30 | Отредактировано: Hellraiser - 5 октября 2013, 20:40


Dr. Moreau


DoorRef.disable ; скрыть дверь
DoorRef.markfordelete ; эту строку пишите, если больше не будете пользоваться этой дверью

Внимание: DoorRef - это ваша копия в мире, а не базовый объект.

Если хотите открыть дверь: DoorRef.SetOpenState 1
если хотите закрыть дверь: DoorRef.SetOpenState 0

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...
nortgen  Offline  Сообщение №1004 написано: 5 октября 2013, 20:53



27
огромное спасибо буква d была лишней)

Hellraiser  Offline  Сообщение №1005 написано: 5 октября 2013, 20:54 | Отредактировано: Hellraiser - 5 октября 2013, 20:54


Dr. Moreau


nortgen,
Эт точно.(с)  :)

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...
Artem13  Offline  Сообщение №1006 написано: 6 октября 2013, 06:01


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


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

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



446
привет! подскажите пожалуйста ответ на один вроде простой вопрос: довольно часто в скриптах напротив функций условий не используются цифровые значения, например: If Player.GetItemCount BabahGUN и все. правильно ли я понимаю, что скрипт будет работать при любом значении кроме нуля? и будет ли такой способ работать так же если я объвляю переменную, например:

short Gun
set Gun to Player.GetItemCount BabahGUN

if Gun
.....
endif

просто хотел уточить такой момент...

Artem13  Offline  Сообщение №1008 написано: 7 октября 2013, 05:36


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


QuazarX, да. В условных выражениях используется приведение к булевым типам, в которых 0 - ложь, не ноль - истина. Я в руководстве для начинающих вроде бы писал об этом.

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



298
Цитата Artem13

через чарген надо проходить?

Если чарген - это генератор внешности, то, да, надо. Необходимо пройти всё - от интро до двери Дока. Пока работает только интро, а дальше белый экран...

Artem13  Offline  Сообщение №1010 написано: 8 октября 2013, 06:01


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


Вис, ясенько. У меня сейчас нет под рукой конструктора, потому не могу предположить что именно вызывает краш. Если решишь сам - отпишись. Я в ближайшее время (неделя-две) постараюсь поставить гекк и посмотреть.

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



27
Еще раз извиняюсь но все не как не могу разобраться с командами .RePose to 1   .Pose to 2   .Pose to 1 откуда это брать вот 3 скрипта на манекенов
 
и везде одно и тоже я налетаю на  не известная функция .Pose to 1
помогите пожалуйста

Artem13  Offline  Сообщение №1012 написано: 8 октября 2013, 15:33 | Отредактировано: Artem13 - 8 октября 2013, 15:59


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


Цитата nortgen

и везде одно и тоже я налетаю на  не известная функция .Pose to 1

Это не функция. Это установка переменной. Т.е. в скрипте, что висит на манекене EHMannequinFemale02REF есть переменная Pose. Чтобы её установить в нужное значение из другого скрипта применяется т.н. "оператор доступа" - точка. Т.о. строка Set EHMannequin10REF.Pose to 2 означает, что в переменную Pose в скрипте, повешенном на объект EHMannequin10REF, записывается значение 2. Я в руководстве вроде писал об этом. Надо проверить.
ЗЫ Проверил - написал. Пункт 3.3.

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



27
и в итоге что делать с этой переменной, как ее установить, а то я уже 2 месяца бьюсь

Artem13  Offline  Сообщение №1014 написано: 8 октября 2013, 16:04 | Отредактировано: Artem13 - 8 октября 2013, 16:09


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


nortgen, а что надоть то? Что тебя в имеющихся скриптах не устраивает. Какова задача вообще? Если хочешь на свои манекены перевешать, то нужно соответственно свои и REF`ы вписать вместо HMannequinХХREF. Перед этим их, естественно, прописав - в окне рендера даблклик на нужном манекене и в строке ReferenceID (емнип) пишешь нужное (пункт 3.2. упомянутого ранее руководства).

Что то я сам запутался - не надо скрипт менять. Надо твоим манекенам прописать ReferenceID из скриптов - так проще будет. Ну и если твоих манекенов меньше, то лишние строки из скриптов лучше убрать.

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



27
да все так создал манекенов создал метки  и все что к ним относится, но как только начинаю сохранять скрипт он пишет
не известная функция .Pose to 1 .RePose to 1   .Pose to 2 каждыи скрипт тормозит на позах и все я не чего не могу хотя в том моде я переносил манекенов в другую ячейку без проблем

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


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


nortgen, а скрипт на манекенах то уже висит? Тут, похоже, надо сделать так - создать пустую заготовку для скрипта (с объявленными переменными), повесить ее на манекены, а потом уже дописывать скрипт - я не вижу другого способа, чтобы компилятор не ругался.
Скрин окошка свойств (с ReferenceID) хоть одного манекена выложи.

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



27


это там где я в другую ячейку переносил и все было норм

Artem13  Offline  Сообщение №1018 написано: 8 октября 2013, 17:00


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


Это не интересно. Там же всё работает. Там, где НЕ работает в чём отличия?

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



27


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

Artem13  Offline  Сообщение №1020 написано: 8 октября 2013, 17:11


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


Так. По порядку. Манекены считаю, что уже созданы.
1. Теперь рисуем скрипт для манекенов

Код
scn EHMannequinScript  

short Activated  
short type  
short button  
Short Pose  
short RePose  
Short EndPose  
short WasPossed  

Float Timer  
REF ActorName  
REF MoveToPos  

begin OnLoad  
     Set Timer to .1  
     Set Repose to 1  
     SetActorsAI 0  
     SetGhost 1  
     SetPlayerTeammate 1  
end  

begin OnActivate  

if IsActionRef Player == 1 && Activated == 0  

      If GetIsID EHMannequin01 == 1  
         showmessage EHMannequinMessageCF  
         set type to 0  
     else  
         showmessage EHMannequinMessageCM  
         set type to 1  
     endif  
endif  

end  

END
Теперь скрипт должен сохраниться без проблем.

2. Вешаем этот скрипт на манекены.

3. А вот теперь добавляем остальные строки.

ЗЫ Кстати, если в этом ворнинге нажать Да или Отмена - скрипт сохранится?

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





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