The Elder Scrolls & Fallout 3 Modding

на главную страницу сайта

Форум Oblivion, Skyrim & Fallout 3/4 Modding

Объявление

У нас есть свой сервер Дискорда. Заходите, пообщаемся.
Господа, те кто пользуются фотохостингом http://uploads.ru/ для размещения изображений. Рекомендую воспользоваться для упрощения загрузки вот этой программой.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. (New Vegas Edition) » Вопросы по скриптам в Fallout NV


Вопросы по скриптам в Fallout NV

Сообщений 61 страница 82 из 82

61

Привет всем!

Вовочка написал(а):

А почему ГЕК Нью Вегаса не указывает на ошибки в скриптах, как это в ТЕС КС Обливиона?

Есть такой  "ГЛЮКОИСПРАВИТЕЛЬ" от Defox - если поставить то редактор скриптов будет отмечать ошибки в скрипте. В поисковике напиши Глюкоисправитель.
Пока.

0

62

чет не как не найду чем можно определить ИД "одетого" оружия

0

63

ITU Привет!

ITU написал(а):

определить ИД "одетого" оружия

Объясни чуть подробней, что делаешь.
Ведь ты знаешь какое оружие в инвентаре у NPC - следовательно знаешь ID имя одного или всех стволов.
Затем можно посмотреть какой у него Combat Style (Боевой стиль), а именно Weapon Restrictions – варианты использования оружия
None, Melee Only, или Ranged Only.
Если  Melee Only, то NPC  будет всегда использовать melee/hand-to-hand как основное оружие.
Если выбрано Ranged Only, воюющая сторона будет всегда использовать дальнобойное оружие как основное.
И так выяснить каким оружием из тех которые у него есть он будет пользоваться с большой вероятностью.
Всё таки лучше скажи по конкретней, какая у тебя задача.
Пока.

0

64

тогда так, уточняю, оружие у игрока
хотел в вегасе сделать стенды с оружием, только оружием может быть любым, из других модов и прочее.
по типу как в скайриме, но за исключением конечно, что движок позволяет.
заготовочка, не обращать внимания на кривоватость, я пока размышляю)

Код:
ref WeaponQuip
ref WeaponSpawn
ref TargetSpawn
ref WeaponTake
ref Weapon

Short WeapHealth

begin OnActivate

if WeaponSpawn

;определяем ИД оружие
set WeaponTake to WeaponSpawn.GetISID
;определяем здоровье оружия
set WeapHealth to player.GetWeaponHealthPerc
;добавляем оружие игроку с определенным здоровьем
Player.AddItemHealthPercent WeaponTake 1 WeapHealth
;одеваем оружие
Player.EquipItem WeaponTake 0 1

else

if player.IsWeaponOut 

;узнаем здоровье одетого оружия
set WeapHealth to player.GetWeaponHealthPerc
;определяем какое оружие одето (тут как раз и вопрос)
set Weapon to 
;снимаем оружие
player.UnEquipItem Weapon 0 1
;отбираем оружие
player.RemoveItem Weapon 1 1
;спавним оружие на реф с определенным здоровьем
set TargetSpawn to GetLinkedRef
set WeaponSpawn to TargetSpawn.PlaceAtMeHealthPercent ZZZ WeapHealth 0

else 

;табличка что оружия нету в руках
endif

endif

end

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

Отредактировано ITU (2012-04-20 23:54:41)

0

65

ITU
Ну попробуй функцию getequipped.

0

66

Graf
спасибо, но не то
нашел в nvse  GetEquippedObject
чет на geck.bethsoft.com не находил, хотя там оно и было тоже

Отредактировано ITU (2012-04-21 09:55:40)

0

67

ITU Привет! Я понял.
Ты хочешь реализовать атоматическую смену оружия с изношенного на новое. При активациии твоего стенда - производится определение уровня износа и происходит замена.
Graf предложил функцию

Graf написал(а):

getequipped.


Есть функция IsWeaponOut
синтаксис:
[ActorID.]IsWeaponOut актёр достал оружие, то же.
Ведь верно. Что из того что мы знаем, взято оружие или нет. Разве только для того, что бы выдавать сообщение "Активация невозможна - оружие не индифицировано).
ITU Мы на сайте Sergey_Ros обсуждали немного похожий вопрос - там был контейнер для ремонта  и требовалось определить, какое из оружия подходящее для ремонта есть в инвентаре игрока.
Вот здесь я то же спрашивал Ссылка где то был ответ, но в общем если правильно помню - решили так, что ID оружия в инвентаре или руках не установить.
Могу посоветовать изменить твой общий стенд (активатор) на стенд с висящим оружием (отдельными активаторами) Допустим 10 стволов - пистолеты, автоматы и тп.
Подходит игрок активирует нужный ствол, при этом активатор Disable
scn AAAPistolDubleScript

Begin OnActivate
if player.GetItemCount AAAPistolDuble == 1
;проверили есть ли дубль пистолета
player.RemoveItem AAAPistolDuble 1
; удалили если есть
AAASOTraderContainerRef.AddItem AAAPistol 1
; добавили в контейнер для учёта, расстояния до игрока, или времени или ещё чего нибудь
player.AddItem AAAPistolDuble 1
; добавили в инвентарь "взятый пистолет"
Disable
; спрятали активатор
AAASOHollDoorRef.Lock 225
; ну это не нужно - у меня дверь в магазине закрывалась, что бы игрок не унёс не заплатив.
endif
end
Получится взял игрок со стенда дубль пистолета и ушёл, а в контейнере лежит сам пистолет, ну или не пистолет (просто так удобней - есть ствол и есть дубль). Допустим ты решишь, что через три дня пришло время вернуть активатор на место - на стенд.
На контейнере такой скрипт
scn AAASOTraderContainerScript
Begin GameMode
if AAASOTraderContainerRef.GetItemCount AAAPistol == 1 && GetDistance Player >= 2048 &&  AAAPistolDubleRef.GetDisabled == 1
; если есть такой то ствол, и расстояние (можно время) такое то, и активатор отключён
AAASOTraderContainerRef.RemoveItem AAAPistol 1
; убрать пистолет из контейнера - приготовиться к новому подсчёту
AAAPistolDubleRef.Enable
; активатор на стенде включить
Походил игрок - вернулся через три дня, у него на стенде "новый" пистолет и опять всё по кругу - взял, отдал старый и пошёл

Только вот беда - игрок может продавать старое оружие и наживаться на этом.
Хотя наверное можно и ввести проверку, что только при наличии у игрока дубля ствола, появиться "новый" на стенде.
Но это для меня слишком!

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

0

68

В процессе работы над третьей частью тутора, я разбирался с подменой надетой на непися брони в зависимости от типа тела.
Использовал следующие команды FOSE/NVSE:

GetEquippedObject
Функция добавляется  FOSE (NVSE для FNV).
Возвращает базовый объект (Editor ID) предмета находящегося в указанном слоте.
Синтаксис:

(ref) ref.GetEquippedObject equipmentSlot:int
или
(ref) ref.GetEqObj equipmentSlot:int

Пример:

ref ArmorID
set ArmorID to buddyref.GetEquippedObject 2
Возвращает в переменную ArmorID базовое EditorID значение одетой на Бадди (слот 2) одежды.
--------------------------------------------------------------------------------------------------------------------------------------
GetEquippedCurrentHealth
Функция добавляется  FOSE (NVSE для FNV).
Возвращает текущее состояние объекта в указанном слоте.
Синтаксис:

(float) ref.GetEquippedCurrentHealth equipmentSlot:int
или
(float) ref.GetEqCurHealth equipmentSlot:int

Пример:

float EquipArmorHealth
set EquipArmorHealth to buddyref.GetEquippedObject 2
Возвращает в переменную EquipArmorHealth текущее состояние одетой на Бадди (слот 2) одежды.

Примечание:

    * У этой функции свой формат выводимой информации от 0 до 500 (500 = 100%). Чтобы получить точное значение состояния одетого (экипированного) предмета (в виде 0% - 100%), например как у функции GetWeaponHealthPerc, нужно поделить полученное значение на 5 (пять). А если как для функции AddItemHealthPercent (0 - 1.0), то разделить ещё и на 100 (сто).

Пример:

float EquipArmorHealth
set EquipArmorHealth to GetEquippedCurrentHealth 2
set EquipArmorHealth to (EquipArmorHealth/5)/100
AddItemHealthPercent OriginalArmorID 1 EquipArmorHealth 1

    * Для функции SetEquippedCurrentHealth (добавляется FOSE (NVSE)) пересчёт не нужен.
--------------------------------------------------------------------------------------------------------------------------------------
SetEquippedCurrentHealth
Функция добавляется  FOSE (NVSE для FNV).
Устанавливает текущее состояние предмета находящегося в указанном слоте.
Синтаксис:

ref.SetEquippedCurrentHealth val:float equipmentSlot:int
или
ref.SetEqCurHealth val:float equipmentSlot:int

Пример:
float EquipArmorHealth
set EquipArmorHealth to 350
buddyref. SetEquippedCurrentHealth EquipArmorHealth 2
Устанавливает состояние одетой на Бадди (слот 2) одежды равной 70% (350/5).
--------------------------------------------------------------------------------------------------------------------------------------
Идентификаторы слотов оснащения.
Добавляется  FOSE (NVSE для FNV).

0 - голова (head)
1 - волосы (hair)
2 - верхней части тела (сюда входят торс, ноги и руки до кистей. В общем - upper body.)
3 - левая рука (left hand)
4 - правая рука (right hand)
5 - оружие (weapon)
6 - Пип-Бой (pip boy)
7 - рюкзак (backpack)
8 - ожерелье (necklace)
9 - повязка на голову (headband)
10 - шляпа (hat)
11 - очки (eyeglasses)
12 - украшение в носу (nosering)
13 - украшение в ушах (earrings)
14 - маска (mask)
15 - галстук (choker)
16 - объект во рту (mouth object)
17 - дополнение к телу 1 (body addon 1)
18 - дополнение к телу 2 (body addon 2)
19 - дополнение к телу 3 (body addon 3)

Ну и как пример, может поможет:

;сохранение состояния одетого реплейса
if GetEquipped JaneSniperArmorReplaceList ==1
    set EquipArmorHealth to GetEquippedCurrentHealth 2

;замена одетой оригинальной брони на реплейс с сохранением состояния брони
elseif GetEquipped JaneSniperArmorOriginalList==1
    set EquipArmorID to GetEquippedObject 2
    set EquipArmorHealth to GetEquippedCurrentHealth 2
    if EquipArmorID == ArmorMetal
    AddItem JaneSniperArmorMetal 1
    EquipItem JaneSniperArmorMetal 0 1
    SetEquippedCurrentHealth EquipArmorHealth 2
    RemoveItem EquipArmorID 1
    endif

;замена снятой брони из реплейса на оригинальную броню с сохранением состояния
elseif GetEquipped JaneSniperArmorReplaceList==0 && GetItemCount JaneSniperArmorReplaceList > 0
    set EquipArmorHealth to (EquipArmorHealth/5)/100
    AddItemHealthPercent EquipArmorID 1 EquipArmorHealth
    RemoveItem JaneSniperArmorReplaceList 1
endif

Отредактировано Wulf (2012-04-21 10:37:34)

0

69

Wulf написал(а):

GetEquippedObject

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

вот так убирает оружие у игрока, но не спавнит его около игрока

ref Weapon

set Weapon to player.GetEquippedObject 5
player.RemoveItem Weapon 1
player.PlaceAtMe Weapon 1

если же наоборот, все прекрасно работает

ref Weapon

set Weapon to player.GetEquippedObject 5
player.PlaceAtMe Weapon 1
player.RemoveItem Weapon 1

что меня привело к выводу что переменой назначается не статичное значение, а именно ссылку player.GetEquippedObject 5 или использование только один раз
т.е. после убирания оружие значение сразу становится нулевое
проверить тестовым сообщением не получилось, вылетает игра напрочь

Отредактировано ITU (2012-04-21 20:33:24)

0

70

ITU написал(а):

вот так убирает оружие у игрока, но не спавнит его около игрока

ITU написал(а):

если же наоборот, все прекрасно работает

У меня в скриптах часто такое бывает, например ставлю short Zaxis на движении объекта, объект почему то не движется, ставлю short Zachse и все прекрасно работает. Странное конешно явление, но у меня оно присутствует.

0

71

Гм. Если почитать как используется команда RemoveItem, то она удаляет из инвентаря и уничтожает объект из мира.
Поэтому такая последовательность команд:

ITU написал(а):

player.RemoveItem Weapon 1
player.PlaceAtMe Weapon 1

скорее всего, в корне не верна, так как класть нечего рядом с игроком. Этого объекта просто нет в мире и ссылка на него не действительна. Кстати, возможно из-за этого и происходит вылет игры.

Либо уничтожить и создать один и тот-же объект невозможно в Один фрейм, а вот наоборот можно. На что собственно и намекает второй вариант скрипта. Но это то-же как-то нужно проверять. :)

А по поводу:

ITU написал(а):

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

В описании команды GetEquippedObject написано, что возвращается именно базовая форма. Ну а проверить, что в переменной, можно выводом сообщения с этой переменной после команды RemoveItem с одновременной блокировкой команды PlaceAtMe.

Отредактировано Wulf (2012-04-21 21:57:05)

0

72

Привет всем, объясните пожалуйста почему в скрипте например такого вида:

Свернутый текст

Short DoOnce

Short State

Float YPos
Float YAchse

Float ZPos
Float ZAchse

Begin GameMode
if (DoOnce == 0) && (player.GetInWorldspace Wasteland) && (Player.IsInCombat != 1)
Player.PlaceAtMe NpcMerc 1, 128, 1
Set DoOnce to 1
endif

if (wglobal == 2)
vertibirdRef.enable
vertibird01Ref.disable
endif

if (wglobal == 2) && (vertibirdMovePlayerRef.getdistance, player <= 1200) && (DoOnce == 1)
&& (vertibird01Ref.getdisabled == 1)
player.moveto vertibirdMovePlayerRef
imod MQ08FadeInFromWhiteISFX
disableplayercontrols 1 1 0 1 0 1
Set State to 1
Set DoOnce to 2
endif

if (DoOnce == 2)
Set ZPos to vertibirdRef.GetPos Z
Set ZAchse to ZPos +2
vertibirdRef.SetPos Z ZAchse
endif

if (DoOnce == 2)
Set ZPos to Player.GetPos Z
Set ZAchse to ZPos +2
Player.SetPos Z ZAchse
endif

if (State == 1)
Set YPos to vertibirdRef.GetPos Y
Set YAchse to YPos +2
vertibirdRef.SetPos Y YAchse
endif

if (State == 1)
Set YPos to Player.GetPos Y
Set YAchse to YPos +2
Player.SetPos Y YAchse
endif

if (DoOnce == 2) && (State == 1) && (moveWorldMarker01Ref.getdistance, player <= 1000)
Set State to 2
Set DoOnce to 3
endif
End

Не работает часть с движением объектов? Пробовал изменять эту часть по разному, результат такой объект двигается на ту единицу передвижения по оси, которая указана в скрипте (2), и через каждые 3 секунды. Но мне нужно передвижение без скачков по координатам, а нормальное. Что посоветуете?

Вопрос решен, движение объекта поставил на триггер.

Отредактировано Graf (2012-05-02 11:39:15)

0

73

вот млин нефига не пойму что тут не так
при выборе в меню ниже уровня ничего не делает
при нажатие "Вернутся в меню выше" просто меню закрывается
точно такое же в другом месте работает, я чет просто ошибки не как найти не могу

Свернутый текст
Код:
scn 0ITUHTeleportVault

short Done
short Button
short LevMenuT
INT TeleportEND
INT TeleportSTART
REF TeleportLocation
FLoat WaitTime 
INT UsedIt	

;Globals used here


begin OnActivate

	if IsActionRef player == 1
ShowMessage 0ITUHomeTeleport0
set LevMenuT to 1
	endif

end

begin gamemode

	set Button to GetButtonPressed

if  ( LevMenuT == 1 )

	if (Button == -1) ; No button has been pressed yet
Return

elseif ( Button == 0 )
;Страница 1
ShowMessage 0ITUHomeTeleport1
Set LevMenuT to 2

	elseif ( Button == 1 )
;Страница 2
ShowMessage 0ITUHomeTeleport2
Set LevMenuT to 3

	elseif ( Button == 2 )
;Страница 3
ShowMessage 0ITUHomeTeleport3
Set LevMenuT to 4

	elseif ( Button == 3 )
;Страница 4
ShowMessage 0ITUHomeTeleport4
Set LevMenuT to 5

	else
;выход
Set LevMenuT to 0
endif

elseif ( LevMenuT == 2 ) ; Страница 1

	set Button to GetButtonPressed

if ( Button == 0 ) ;Центральный зал
	Set TeleportLocation to  ITUTeleportMarkerHome
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 1 ) ;Склад
Set TeleportLocation to  ITUTeleportMarkerStorage
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 2 )  ;Генераторная
Set TeleportLocation to  ITUTeleportMarkerGenerator
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 3 )  ;Фабрика
Set TeleportLocation to ITUTeleportMarkerFabric
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 4 ) ;Медицинская комната
	Set TeleportLocation to  ITUTeleportMarkerMedRoom
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 5 ) ;Комната управления
	Set TeleportLocation to ITUTeleportMarkerCKU
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0 ;

	elseif ( Button == 6 ) ;Вернутся в меню выше
ShowMessage 0ITUHomeTeleport0
Set LevMenuT to 1

	elseif ( Button == 7 ) ; Отмена
Set LevMenuT to 0
	endif


elseif ( LevMenuT == 3 ) ; Страница 2

	set Button to GetButtonPressed

if (Button == -1) ; No button has been pressed yet
Return

elseif ( Button == 0 ) ;Теплицы
	Set TeleportLocation to  ITUTeleportMarkerTepl
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 1 ) ;Музей
Set TeleportLocation to  ITUTeleportMarkerMuseum
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 2 )  ;Зимний зал
Set TeleportLocation to  ITUTeleportMarkerSad
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 3 )  ;Инкубатор
Set TeleportLocation to ITUTeleportMarkerInkub
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 4 ) ;Студия
	Set TeleportLocation to ITUTeleportMarkerStudia
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 5 ) ;Туалеты
	Set TeleportLocation to  ITUTeleportMarkerToilet
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0 ;

	elseif ( Button == 6 ) ;Вернутся в меню выше
ShowMessage 0ITUHomeTeleport0
Set LevMenuT to 1

	elseif ( Button == 7 ) ; Отмена
Set LevMenuT to 0
	endif


elseif ( LevMenuT == 4 ) ; Страница 3

	set Button to GetButtonPressed

if (Button == -1) ; No button has been pressed yet
Return

elseif ( Button == 0 ) ;Столовая
	Set TeleportLocation to  ITUTeleportMarkerRestoran
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 1 ) ;Комнаты компаньонов
Set TeleportLocation to  ITUTeleportMarkerFollower
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 2 )  ;Бассеин
Set TeleportLocation to  ITUTeleportMarkerBasein
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 3 )  ;Тренировочная
Set TeleportLocation to ITUHReturnSoilder
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 4 ) ;Манекены
	Set TeleportLocation to  ITUTeleportMarkerMann
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 5 ) ;Личная комната
	Set TeleportLocation to  ITUTeleportMarkerRoomB
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0 ;

	elseif ( Button == 6 ) ;Вернутся в меню выше
ShowMessage 0ITUHomeTeleport0
Set LevMenuT to 1

	elseif ( Button == 7 ) ; Отмена
Set LevMenuT to 0
	endif

elseif ( LevMenuT == 5 ) ; Страница 4

	set Button to GetButtonPressed

if ( Button == 0 ) ;Виртуальный симулятор
	Set TeleportLocation to  ITUTeleportMarkerSim
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 1 ) ;Склад боеприпасов
Set TeleportLocation to  ITUTeleportMarkerSA
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 2 )  ;Склад медикаментов
Set TeleportLocation to  ITUTeleportMarkerSMed
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 3 )  ;Склад продуктов
Set TeleportLocation to ITUTeleportMarkerSFood
Set TeleportSTART to 1
Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 4 ) ;Склад мусора
	Set TeleportLocation to ITUTeleportMarkerSJunk
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0

	elseif ( Button == 5 ) ;(ЧИТ) читерная комната
	Set TeleportLocation to  ITUTeleportMarkerCHeats
	Set TeleportSTART to 1
	Playsound WPNEuclidFinderUplink
Set LevMenuT to 0 ;

	elseif ( Button == 6 ) ;Вернутся в меню выше
ShowMessage 0ITUHomeTeleport0
Set LevMenuT to 1

	elseif ( Button == 7 ) ; Отмена
Set LevMenuT to 0
	endif


endif

If TeleportSTART == 1
	Player.PlaceAtMe 0ITUHTeleportEffects
	DisablePlayerControls 1 1 1 1 0 1 1
	imod ITUHFadetoWhite
	Playsound 0ITUHTeleportSound
	Set TeleportSTART to 0
	Set TeleportEND to 1
endif

	If TeleportEND == 1
Imod Addiction01ISFX
EnablePlayerControls
Player.Moveto TeleportLocation
Set TeleportEND to 0
	endif


end

вообщем вопрос решен
убрал лишнии set Button to GetButtonPressed и еще чего-то покопался, вроде работает

Отредактировано ITU (2012-05-25 23:08:19)

0

74

Всем привет. Например, я хочу, чтобы скрипт, применяющийся как эффект употребления пищи, узнавал, при употреблении какой именно пищи он выполняется. Возникает проблема с GetIsID: например, при таком коде

Код:
begin ScriptEffectStart
	if (GetIsID WaterPurified == 1)
additem <предмет 1> 1
	else
additem <предмет 2> 1
	endif
end

при употреблении очищенной воды в инвентарь всё равно добавляется <предмет 2>, но хотелось бы, чтобы добавлялся <предмет 1>. Что-нибудь делаю не так? Сразу извиняюсь, если в чём-то сглупил, т.к. не работал с Гэкком уже больше года, сегодня только сел за него.

0

75

Skorp24 написал(а):

при употреблении очищенной воды в инвентарь всё равно добавляется <предмет 2>, но хотелось бы, чтобы добавлялся <предмет 1>.

Очевидно, скрипт не распознает игрока как WaterPurified.

0

76

Если я правильно понимаю, узнать ID своего объекта скрипт не может? Иначе бы все объекты одним скриптом пользовались  :)

0

77

Привет всем!
Вот написал скриптик:

Свернутый текст

Short AbilityNumber1
Short AbilityNumber2
Short AbilityNumber3
Short AbilityNumber4
Short AbilityNumber5

Short Choice

short Maintenance
short Maintenance2

begin scripteffectstart
player.additem zzUnderWorldPowerArmorAdvancedNoBackpackFoodAbility 1
set Maintenance to 1
End

Begin GameMode
if (Maintenance == 1)
ShowMessage zzUnderWorldPowerArmorAdvancedMESGAbility
Set Maintenance2 to 1
endif

if (Maintenance2 == 1) && zzunderworldquest.lastbattery >= 2
Set Maintenance to 0
Set Choice to GetButtonPressed
if (Choice < 0)
    Return
    elseif Choice == 0 && AbilityNumber1 == 0  ;стелс
    player.addspell StealthBoyInvisibilitySpell
    set AbilityNumber1 to 1
    Set Maintenance2 to 0

    elseif Choice == 0 && AbilityNumber1 == 1
    player.removespell StealthBoyInvisibilitySpell
    set AbilityNumber1 to 0
    Set Maintenance2 to 0
     
    elseif Choice == 1 && AbilityNumber2 == 0 ;ускорение
    Player.Setav SpeedMult 250
    set AbilityNumber2 to 1
    Set Maintenance2 to 0
     
    elseif Choice == 1 && AbilityNumber2 == 1
    Player.Setav SpeedMult 100
    set AbilityNumber2 to 0
    Set Maintenance2 to 0
     
    elseif Choice == 2 && AbilityNumber3 == 0;замедление 
    sgtm 0.25
    set AbilityNumber3 to 1
    Set Maintenance2 to 0
     
    elseif Choice == 2 && AbilityNumber3 == 1
    sgtm 1
    set AbilityNumber3 to 0
    Set Maintenance2 to 0
     
    elseif Choice == 3 && AbilityNumber4 == 0;кулак ярости
;    player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1
;    player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4
    set AbilityNumber4 to 1
    Set Maintenance2 to 0
     
    elseif Choice == 3 && AbilityNumber4 == 1
;    player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1
    set AbilityNumber4 to 0
    Set Maintenance2 to 0
     
    elseif Choice == 4 && AbilityNumber5 == 0 ;защитный режим
;    player.AddItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 1
;    player.EquipItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4
    set AbilityNumber5 to 1
    Set Maintenance2 to 0
     
    elseif Choice == 4 && AbilityNumber5 == 1
;    player.removeItem zzUnderWorldPowerArmorAdvancedNoBackpackWeap4 100
    set AbilityNumber5 to 0
    Set Maintenance2 to 0
    elseif Choice == 5
    Set Maintenance2 to 0
endif
endif
End

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

Отредактировано Graf (2012-10-17 00:51:58)

0

78

Graf написал(а):

Но почему то работает каждая кнопка без второй проверки на отключение функций (полагаю, надо было делать в мессаге 2 выбора с разными проверками?)

Отключение каких функций имеется в виду? (где в скрипте хоть какая-то из них находится?)

0

79

Skorp24

Graf написал(а):

elseif Choice == 0 && AbilityNumber1 == 0  ;стелс
    player.addspell StealthBoyInvisibilitySpell
    set AbilityNumber1 to 1
    Set Maintenance2 to 0
    elseif Choice == 0 && AbilityNumber1 == 1
    player.removespell StealthBoyInvisibilitySpell
    set AbilityNumber1 to 0
    Set Maintenance2 to 0

В общем то их 5.

0

80

Graf написал(а):

elseif Choice == 0 && AbilityNumber1 == 1

Я бы сделал проверку AbilityNumber1 в самом message, а в скрипте проверял только нажатие choise, при этом, правда, кнопок будет немного по-более.

0

81

SpalnyVagon
Ну это я на самый крайний вариант оставлял. Видимо он настал. Спасибо за совет.

0

82

Как в Нью Вегасе правильно писать команды, проверяющие потребность игрока в еде - воде - сне?

В общем, хочу наложить на вещь эффект повышения потребности в сне при ношении, а когда уровень этой потребности достигнет некоторой величины, то тогда чтобы вещь автоматически снималась и не могла быть одета до тех пор, пока игрок не выспался.

0


Вы здесь » Форум Oblivion, Skyrim & Fallout 3/4 Modding » G.E.C.K. (New Vegas Edition) » Вопросы по скриптам в Fallout NV