Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
rizys-mod, полная задумка мой мод, выложен на сайте. в данном случаи это "восковые фигуры" уже одетые, выставлены в музеи. скрипт активации добавлен для теста ихнего поведения при возврате назад, на свое место, на свой маркер, moveto. такое же функцию при посещении помещения ГГ, иначе живые существа имеют свойства передвигаться. такие же, с такой же фигней манекены. и повторяю одинаковые, одни визуально сдвигаются вверх, другое нормально на месте стоят, в чем разница не пойму совсем.
сначало я подумал что они рядом стоят, так нет, ничего не меняет думал что зависит просто от координат по высоте, тоже не влияет
причем я пробовал на другом компе, такого не наблюдал, мне последовали сообщения о багах, я не мог понять, пока с рабочего ноута не попробовал
в данном случаи это "восковые фигуры" уже одетые, выставлены в музеи. скрипт активации добавлен для теста ихнего поведения при возврате назад, на свое место, на свой маркер, moveto. такое же функцию при посещении помещения ГГ, иначе живые существа имеют свойства передвигаться.
Не могу я понять из этих слов, что должно происходить. Каком возврате назад, если они восковые фигуры? Они теперь ещё и ходят...
Команда "Rizys-mod" - разработка плагинов на Fallout.
при вроде в комнату движок игры, как известно, расставляет написей согласно навмеш и они могут сдигатся с первоначального места даже если у них отключен АИ и анимация. возврат назад на позицию где они должны стоять
Вопросик: Есть квест (просто диалог, без привязки к конкретному неписю, для всей группы) Работает нормально, но иногда забивает диалоги по прохождению основного сюжета. Вопрос в том, как можно выключить этот квест оперативно и потом, при необходимости включить? Пробовал делать условие по присутствию определенного предмета в инвентаре ГГ, коряво получилось.
(К примеру, оптимальный вариант - положил в инвентарь плюшевого мишку - работает квест, выбросил из инвентаря, не работает)
все суета, сует...
Изменение репутации для пользователя Galko
GalkoOffline
Сообщение №788
написано: 21 августа 2012, 11:12
| Отредактировано: Galko - 21 августа 2012, 11:13
но иногда забивает диалоги по прохождению основного сюжета
Это как? Диалоги основного сюжета уходят вниз, на более низкие позиции? Или просто не появляются? Если просто располагаются ниже - у своего квеста поставь более низкий приоритет. И в своих диалогах не отмечай у топиков Top Level (быть всегда наверху) Если же диалоги основного квеста полностью пропадают - извини тут ты "накосячил" И надо конкретно разбираться.
Приветствия из квестов с высоким приоритетом забивают приветствия с низким. Если после приветствия диалог построен через поле Choices и никогда не возвращается в "корень", то возможна ситуация, когда у других квестов не будет шанса вставить словечко. Тогда надо снижать приоритет и настраивать условия. Если же по каким-то причинам надо обязательно заниматься гемором в виде запусков-остановок квеста, то запуск - StartQuest, а остановка - StopQuest.
При загрузки сохранения у неписей есть такой свойство перемещаться... даже если они выставлены в одном место с отключенным АИ... хотя чет у меня зародилась идея, сделать пакет , а отключение пакета и АИ по расстоянию от маркера...
Да нет, с командами то понятно, а вот куда их вставлять то?
проверяем мишку (player.additemcount mishka >= 1). Можно делать квестовым скриптом, но наверно скрипт не будет работать если его остановить, можно ставить на мишку скрипт Frostik, да можно делать как хочешь, например так:
Code
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) markerRef.placeatme mob 1, 250, 1 set doOnce to 0 endif End
Добавлено (22.08.2012, 16:58) --------------------------------------------- Такой вопрос, почему не работает строчка:
Code
MyChairRef.Activate Player 1
Команда "Rizys-mod" - разработка плагинов на Fallout.
А что она должна делать? Ты принудительно запрещаешь дефолтную активацию. А есть ли на контейнере скрипт с секцией OnActivate, в которой своё действие описываешь?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
А фурнитуру так нельзя активировать, няз. Нужно либо создавать активатор с той же моделью, либо использовать возможности Перка/Квеста для активации (гдето там есть возможность добавления кнопки для взаимодействия), но такая активация исключительно интерактивна, т.е. скриптом не инициализируется. ЗЫ Сейчас только дошло (не так прочитал ИД) - ты на стул пытаешься игрока усадить, чтоли?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Эээ, а тогда в чём трабла? Ну попробуй единицу выкинуть нафик или ноль врисовать вместо.
Ну и еще вариант - до этой строчки скрипт не доходит. Причин несколько - перепрыгивает, сбоит перед ней или она удаляется компилятором на этапе сборки. Ты бы кинул кусок кода с контекстом этой строки.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя rizys-mod
rizys-modOffline
Сообщение №801
написано: 22 августа 2012, 16:10
| Отредактировано: rizys-mod - 22 августа 2012, 16:09
short AllCreated float StartZ ref LiveChairRef ref Cdead
begin GameMode if AllCreated == 0 set StartZ to StartMarker.GetPos Z set LiveChairRef to StartMarker.PlaceAtMe aaaWastelandSeat, 1 LiveChairRef.SetPos Z StartZ set AllCreated to 1
elseif AllCreated == 1 LiveChairRef.Disable set DeadChairRef to StartMarker.PlaceAtMe CDead, 1 aaaWastelandRef.MoveTo aaaStartMarker
set StartZ to StartZ + 90 aaaWastelandRef.SetPos Z StartZ aaaWastelandRef.Enable 0 set AllCreated to 2
Ну и часть от скрипта активатора:
Code
ref MyRef float SecondsPassed
short PlayerSitting short MountAction short DoOnce2
float PlayX ;координаты игрока float PlayY float PlayZ
float MyX ;координаты фурнитуры float MyY float MyZ
float MidDO ;Расстояние смещения с кресла для MidRef float MidZO ;Z Смещение от фурнитуры MidRef float GroundDO ;Расстояние смещения с фурнитуры для GroundRef
float timer2
begin OnActivate if PlayerSitting == 0 && GetDisabled == 0 set MyX to GetPos X set MyY to GetPos Y set MyZ to GetPos Z set PlayZ to Player.GetPos Z set ZDiff to MyZ - PlayZ
;Ищем текущий угол, очевидно он 90 градусов set MyAngle to GetAngle Z set PointAngle to MyAngle + 90 if PointAngle >= 360 set PointAngle to PointAngle - 360 elseif PointAngle < 0 set PointAngle to PointAngle + 360 endif set ProbeAngle to PointAngle set RotateSpeed to 0
;Начальная синус, косинус и обратный угол set SinAngle to Sin PointAngle set CosAngle to Cos PointAngle set FlipAngle to PointAngle + 180 if FlipAngle >= 360 set FlipAngle to FlipAngle - 360 endif
if GetInSameCell Player == 0 MoveTo Player endif
set MountAction to 1 endif End
;Работает в каждом кадре begin GameMode
;Только один раз инициализация if DoOnce2 == 0 && aaaModQuest.AllCreated == 2 ;Получаем собственную ссылку set MyRef to aaaModQuest.LiveChairRef
set MidDO to 45 set MidZO to 20 set GroundDO to 30
;Некогда не делать это снова set DoOnce2 to 1 endif
set SecondsPassed to GetSecondsPassed
if Timer2 > 0 set Timer2 to Timer2 - SecondsPassed SetPos X MyX SetPos Y MyY SetPos Z MyZ endif elseif MountAction > 0
if MountAction == 1 SetPos X MyX SetPos Y MyY SetPos Z MyZ set MountAction to 2
elseif MountAction == 2 MyRef.Activate Player
set Timer2 to 4 set MountAction to 4 elseif MountAction == 4 set PlayerSitting to 1 set MountAction to 0 endif end
Трабла в том, что я делаю так как в моде, но видимо что-то упускаю. Не могу понять что именно, и не помню этот ли скрипт я в игре использовал или нет. А мод в котором так делали называется ХоверЧайд.
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №802
написано: 22 августа 2012, 16:23
| Отредактировано: Artem13 - 22 августа 2012, 16:24
if Timer2 > 0 set Timer2 to Timer2 - SecondsPassed SetPos X MyX SetPos Y MyY SetPos Z MyZ endif elseif MountAction > 0
endif или elseif лишний. Или какой то if пропущен. Скрипт вообще компилиться не должен.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Artem13, я же написал скрипт не полный, полный смысла нет писать (остальное работает), вот именно elseif и стоял в ховерчайде, я смотрел где там заканчивали, у меня конец такой же, только вот там работает а у меня нет. Может гг должен точно быть в маркере?
Команда "Rizys-mod" - разработка плагинов на Fallout.
Изменение репутации для пользователя Frostik
FrostikOffline
Сообщение №804
написано: 23 августа 2012, 21:42
| Отредактировано: Frostik - 23 августа 2012, 21:44
Текущая - в том, что markerRef либо не создан, либо не назначен постоянной ссылкой (Persistent Reference). Грядущая - в том, что каждый дохлый заскриптованный моб не возрождается на маркере каждые две минуты, а рождается на маркере каждые две минуты. Не многовато ли выйдет?
Изменение репутации для пользователя rizys-mod
rizys-modOffline
Сообщение №807
написано: 23 августа 2012, 22:42
| Отредактировано: rizys-mod - 23 августа 2012, 22:48
Слепил _очень_ укрепленный форпост НКР, на который рейдеры постоянно нападают. (По сюжету игры так и должно быть. ) Снайперы на вышках, дзоты итд... Огневая мощь достаточная для 40-50 вражин, атакующих одновременно, даже если будет активный респ.
Не сохраняется у меня скрипт. Маркер XMarkerHeading создал, связал его с мобом (Linked ref) и наоборот. )) Галочка Persistent Reference включена по умолчанию.
Frostik, Привет! XMarkerHeading это ID имя маркера, ты в скрипте даешь команду отправить на маркер вояк, а на какой из 2666 маркеров в игре. Возможно в этом ошибка. Попробуй присвоить маркеру REF имя, например aaaAttackMarkerREF
Всем спасибо, получилось! С количеством и временем респа конечно же переборщил, но все можно оптимизировать. И еще не понравилось возникновение рейдеров на пустом месте ))) придется прятать маркеры за домами.