Готовые скрипты для Fallout 3, Fallout NV
| |
KAIN | Дата: Понедельник, 03.10.2011, 02:28 | Сообщение # 11 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт на закрывание двери на ключ, в зависимости от времени суток
scn AAASOStritDoorEnterScript
Begin OnActivate If GetCurrentTime >= 22.00 || GetCurrentTime <= 8.00 AAAShopStritDoorEnterRef.Lock 225 else GetCurrentTime >= 8.00 || GetCurrentTime <= 22.00 AAAShopStritDoorEnterRef.Unlock endif end
Можно использовать на магазинах например. Рабочий день закончился - магазин закрылся до утра.
|
|
| |
KAIN | Дата: Понедельник, 03.10.2011, 02:35 | Сообщение # 12 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт установки стадии квеста, при достижении NPC определённого места.
scn AAASORatHouseScript
short saDoOnce begin GameMode if (saDoOnce == 0 && GetDistance AAASORatRef02 <=64) SetStage AAASORatQuest 40 ShowMessage AAASORatHouseMessage Set saDoOnce to 1 endif End
Этот скрипт срабатывает один раз, как только расстояние до тарелки AAASORatRef02 становится меньше 64 единицы. Устанавливается стадия квеста AAASORatQuest в 40 и выводится сообщение AAASORatHouseMessage "Мышь на месте..."
|
|
| |
KAIN | Дата: Понедельник, 03.10.2011, 02:57 | Сообщение # 13 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт начала атаки ГГ если он не выполнить приказ и не уберёт оружие в течении 5 секунд...
scn AAASOProtectionSckript
short sFlag float fTimer
BEGIN GameMode if sFlag == 0 && player.IsWeaponOut == 1 && GetDistance player <= 512 ShowMessage AAASOAttackMessage ; сообщение "Убрать оружие" Set sFlag to 1 Set fTimer to 5 endif if (fTimer > 0) && (sFlag == 1) Set fTimer to (fTimer - GetSecondsPassed) elseif (sFlag == 1) SetEnemy AAASOFaction PlayerFaction ; установить фракцию враждебной StartCombat player ; начать атаку Set sFlag to 2 elseif (sFlag == 2) && player.IsWeaponOut == 0 && GetDistance player <= 512 player.StopCombatAlarmOnActor AAASONPCAbakanRef.StopCombat player AAASONPCAlisherKZRef.StopCombat player SetAlly AAASOFaction PlayerFaction ShowMessage AAASOStopAttackMessage SetAlly AAASOFaction PlayerFaction Set sFlag to 0 endif endif End
Если в руках игрока оружие и расстояние до него меньше 512, выводится сообщение "Убрать оружие", по истечении 5 секунд фракция NPC устанавливается враждебной, к фракции игрока и NPC на котором "висит" скрипт начинает атаку. Если игрок убирает оружие, атаки останавливаются AAASONPCAbakanRef.StopCombat player выводится сообщение "Спасибо за сотрудничество" и фракция устанавливается дружественной игроку. В скрипте нужно останавливать StopCombat player атаку для всех NPC этой фракции находящихся в локации. AAASONPCAbakanRef.StopCombat player AAASONPCAlisherKZRef.StopCombat player ..... и так далее. Kазалось бы фракция установлена в дружественную, зачем останавливать атаку каждого NPC по имённо. По различным причинам, если хотя бы один NPC продолжит атаковать, то вся фракции вновь нападёт на игрока. Поэтому останавливают атаку всех.
|
|
| |
KAIN | Дата: Четверг, 03.11.2011, 15:45 | Сообщение # 14 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт включения радиостанции (первого включения до этого момента её не было в Пип-бое)
Помог Sergey_Ros с сайта ModTec (см. баннер на главной) Как решить проблему Раз станция неактивна до определенного момента, значит игре не обязательно ее обрабатывать. Делаем следующее: - Открываем окно Ref-копии объекта, исполняющего роль радиостанции. - Устанавливаем флажок напротив поля "Initially Disabled". - Изменяем скрипт следующим образом: scn AAAKainRadioScript
Short Stage Short Button
Begin OnActivate if (Stage == 0) ShowMessage AAARadioOffisMessage Set Stage to 1 endif End
Begin GameMode if (Stage == 1) Set Button to GetButtonPressed if (Button > -1) if (Button == 0) AAARadioOffisTARef.Enable if (AAARadioOffisTARef.GetDisabled != 1) AAARadioOffisTARef.SetBroadcastState 1 Set Stage to 2 endif elseif (Button == 1) Set Stage to 2 endif endif endif End
Как изменился скрипт Раз мы отключили объект, значит, в будущем мы его планируем включить. Что и делаем командой "AAARadioOffisTARef.Enable". Также я добавил проверку на включение объекта "if (AAARadioOffisTARef.GetDisabled != 1)". Это может быть важно, т.к. скрипт может сработать быстрее, чем загрузится объект. То есть команда "AAARadioOffisTARef.SetBroadcastState 1" не сработает, потому что в этот момент объект "AAARadioOffisTARef" не был полностью загружен.
|
|
| |
KAIN | Дата: Четверг, 03.11.2011, 15:56 | Сообщение # 15 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт для смены стадии квеста при наличии предмета.
Часто бывает нужно сменить стадию квеста при нахождении предмета, это можно сделать так:
scn aaaModTecItemCounterSCRIPT
short DoOnce
Begin GameMode if (DoOnce == 0) if (Player.GetItemCount ИмяПредмета >= 10) SetStage ИмяКвеста СтадияКвеста set DoOnce to 1 endif endif End
if (Player.GetItemCount ИмяПредмета >= 10) это проверка наличия предмета в инвентаре игрока - больше или равно 10 ( 10 количество предметов) short DoOnce - это переменная, при помощи которой мы ограничиваем работу скрипта до 1 раза if (DoOnce == 0) - если DoOnce == 0 скрипт срабатывает set DoOnce to 1 - установили переменную в 1, и скрипт больше не сработает, так как это условие не выполняется if (DoOnce == 0) SetStage ИмяКвеста СтадияКвеста - команда на установку стадии.
|
|
| |
Graf | Дата: Воскресенье, 20.11.2011, 05:12 | Сообщение # 16 |
Маршал
Группа: Модераторы
Сообщений: 106
Статус: Offline
| Вопрос: Как сделать что бы нужно было положить определённый объект, на определённое место (через "Z") и при этом стадия квеста переходила на следующую?
Ответ: Для этого нужно создать три объекта, и дать им Ref ссылки: Я взял пример со своей арены, берём первую фишку (раздел world objects -> static), ложим туда, где нужно чтобы наша фишка появилялась (и даём ей Ref ссылку, у меня "aaaArenaModYPOBEHb2ChipKey3Ref") и не забываем нажать Disable (что бы наша фишка не появилась раньше времени).После этого берём Xmarker (раздел world objects -> static) даём ему Ref ссылку, у меня "aaaArenaModYPOBEHb2ChipKey1Marker1Ref", и ставим туда же, где и стоит наша фишка:
Далее создаём третью фишку (раздел world objects -> movable static), подписуем её (как угодно), и даём ей Ref ссылку, у меня "aaaArenaModYPOBEHb2ChipKey1Ref". Теперь создаем квест, и вешаем на него скрипт: Code Short CodeKey1
Begin GameMode
if ( CodeKey1 == 0 ) if ( aaaArenaModYPOBEHb2ChipKey1Ref.GetDistance, aaaArenaModYPOBEHb2ChipKey1Marker1Ref <= 5 ) "aaaArenaModYPOBEHb2ChipKey3Ref".Enable "aaaArenaModYPOBEHb2ChipKey1Ref".Disable SetStage Idquest 20 PlaySound "DRSPlaypenOpenA" Set CodeKey1 to 1 endif endif End
Небольшое объяснение: if ( aaaArenaModYPOBEHb2ChipKey1Ref.GetDistance, aaaArenaModYPOBEHb2ChipKey1Marker1Ref <= 5 ) Если aaaArenaModYPOBEHb2ChipKey1Ref (обычная фишка) будит на дистандии меньше или 5, от макера (aaaArenaModYPOBEHb2ChipKey1Marker1Ref). Тогда:
"aaaArenaModYPOBEHb2ChipKey3Ref".Enable ;нужная фишка появится "aaaArenaModYPOBEHb2ChipKey1Ref".Disable ;ту которую ложили, ищезнет PlaySound "DRSPlaypenOpenA" ;проигрывается звук SetStage Idquest 20 - квест Idquest переходит на стадию 20
Надеюсь понятно объяснил, пока!
Сообщение отредактировал Graf - Воскресенье, 20.11.2011, 05:14 |
|
| |
KAIN | Дата: Четверг, 26.01.2012, 21:03 | Сообщение # 17 |
Генералисимус
Группа: Администраторы
Сообщений: 442
Статус: Offline
| Скрипт запрета одеть шлем, если не одета спец. броня
scn HelmetScript
Begin onEquip player if player.getequipped AAAKainArmor == 0 player.unequipitem AAAKainHelmet 0 1 showmessage AAAKainHelmetNO ;Внешние разъёмы не обнаружены - Отказ подключения. elseif player.getequipped AAAKainArmor == 1 showmessage AAAKainHelmetON ;Внешние разъёмы задействованы - Питание подключено. endif end Begin OnUnequip Player if player.getequipped AAAKainArmor == 1 showmessage AAAKainHelmetOFF ;Разрыв цепи - Питание отключено. Переход в стандартный режим. endif end
В этом скрипте перед одеванием шлема - проверяется одета ли броня, и если нет то выводится сообщение - Отказ... А при снимании делается проверка одета ли броня, если да то выводится сообщение - Разрыв цепи.... * Можно использовать для какой нибудь примочки к броне, например одели на броню специальный блок питания и у брони повысилось сопротивление урону, износу и тп. Сняли - броня вернулась к стандартным значениям. Скрипт "вещается" на шлем (блок питания и тп. - на то что будет одеваться "поверх" брони) А вот на саму броню назначить скрипт для изменения её характеристик, в котором делать проверку на то одет шлем (блок питания и тп.) или нет.
|
|
| |
Graf | Дата: Суббота, 24.03.2012, 12:28 | Сообщение # 18 |
Маршал
Группа: Модераторы
Сообщений: 106
Статус: Offline
| Скрипт бесконечного движения вправо влело
Устанавливаем светильник и даём ему Ref aaaTestLightRef, слева ложем Xmarker и даем Ref ссылку aaaTestMarker1Ref, и справа ложем Xmarker и даём ему Ref ссылку aaaTestMarker2Ref вот что получилось у меня (скрин с Geck):
Движение объекта светильника aaaTestLightRef будет происходить, от маркера aaaTestMarker1Ref, к маркеру aaaTestMarker2Ref, каждый раз приближаясь к маркеру меняя движение в другую сторону (к другому маркеру). Следовательно, движение будет от маркера к маркеру бесконечным, вот скрипт на светильник: Code Float YPos Float YAchse
Short State
Begin GameMode
if ( aaaTestLightRef.GetDistance, aaaTestMarker1Ref <= 20 ) ;движение вправо Set State to 0 endif
if ( State == 0 ) Set YPos to GetPos X Set YAchse to YPos +1 SetPos X Yachse endif
if ( aaaTestLightRef.GetDistance, aaaTestMarker2Ref <= 20 ) ; движение влево Set State to 1 endif
if ( State == 1 ) Set YPos to GetPos X Set YAchse to YPos -1 SetPos X Yachse endif
End ============ Объяснение ============ ; Если до левого маркера осталась дистанция меньше 20, тогда устанавливаем State 0 и устанавливаем движение в другую сторону
; Если до правого маркера осталась дистанция меньше 20, тогда устанавливаем State 1 и устанавливаем движение в другую сторону
;-1 и +1 это установленная скорость движения объекта (шаги гг, не бег)
;Следовательно, движение будет от маркера к маркеру бесконечным.
Сообщение отредактировал Graf - Воскресенье, 25.03.2012, 22:36 |
|
| |
zxczxc | Дата: Четверг, 20.03.2014, 20:57 | Сообщение # 19 |
Капитан
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Graf, Граф ты нам нужен.
|
|
| |
Graf | Дата: Понедельник, 26.05.2014, 01:01 | Сообщение # 20 |
Маршал
Группа: Модераторы
Сообщений: 106
Статус: Offline
| zxczxc, для чего?
|
|
| |
|