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. » Вопросы по скриптам в Fallout 3


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

Сообщений 301 страница 330 из 418

301

Привет всем!
А особенно SpalnyVagon Злобному и ужасному Повелителю скриптов! Пальцы и руки я за дверью оставил, сюда засунул только голову - не жалко всё равно Пустая!
Я увидел вопрос - А как сделать что бы дверь открывалась и закрывалась только при активации пульта. При попытке открыть руками - выводилось сообщение "Не здесь"
С сообщением сделал быстро и правильно - там всего три строчки в скрипте активация - сообщение - конец
А вот с пультом возился с утра и до сих пор.
Получилось так

Код:
scn AAAKainAutoDoor01SwitchScript
short mode
ref doorRef
begin onActivate
if (IsActionRef player == 1 )
if (mode == 0)
activate
set mode to 1
endif
endif
end
begin gameMode
set doorRef to GetLinkedRef
doorRef.activate doorRef
end

Работает.
Подскажите - упростить можно или нет? Или сделать по другому - скрипта не надо - просто, направление.
Пока.

Код:
scn CG04Vault101ControlPodScript

short mode
ref doorRef

begin onActivate

	; if the player tries to activate
	if (IsActionRef player == 1 )
if (mode == 0)
;	;message "This control pod is locked."
;	ShowMessage CG04Vault101ControlPodMsg
;elseif ( mode == 1 ) ; unlocked, player can now activate it
	setstage CG04 140
	playgroup Left 0
	set mode to 2
endif
	else
if mode == 0
	playgroup Forward 0
	set mode to 1
endif
	endif
end

begin gameMode
	
	if (mode == 2) && (isAnimPlaying == 0)
set mode to 3
set doorRef to GetLinkedRef
doorRef.activate doorRef
	endif

end

Вот из этого переделал, ну не переделал, а убрал что не надо.

Отредактировано K.A.I.N. (2011-06-03 19:26:42)

0

302

K.A.I.N. написал(а):

Работает.

Не верю.
В 3-м Фоле полно таких дверей, если не ошибаюсь, одна была в форте Национальной Гвардии, там еще экспериментальный Толстяк валялся.

0

303

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

0

304

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

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

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

ЗЫ: Самый простой способ, это создать для непися несколько рас с одетым телом и менять расу... :)

0

305

K.A.I.N. написал(а):

Вот из этого переделал, ну не переделал, а убрал что не надо.

Все рано не верю.
Зы. Если эта дверь и откроется, то только один раз. А если берете фрагменты из других скриптов, убедитесь, что не нарушаете хотя бы основной сюжет. Я имею ввиду строку setstage CG04 140.

0

306

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

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

Вот скрипт, который зставляет НПС менять белье каждый день. Предварительно в инвентаре своем он должен иметь семь смен белья на каждый день недели.

begin gamemode
if getdayofweek == 0 && getequipped [sun] == 0
   equipitem [sun] 1
elseif getdayofweek == 1 && getequipped [man] == 0
   equipitem [man] 1
; вторник, среда и т.д.
;____________
elseif getdayofweek == 6 && getequipped [sat] == 0
   equipitem [sat] 1
endif
end

А этот скрипт заставит НПС менять белье через день.

begin gamemode
if getequipped [труселя для четных дней месяца] == 0 && gameday == 2 || gameday == 4 || gameday == 6 || gameday == 8 ; и т.д. до 30
   equipitem [труселя для четных дней месяца] 1
elseif getequipped [для нечетных] == 0 && gameday == 1 || gameday == 3 || gameday == 5 || gameday == 7 ; и т.д. до 31 включительно.
   equipitem [для нечетных] 1
endif
end

Отредактировано SpalnyVagon (2011-06-05 13:17:30)

0

307

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

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

Как показала практика, неписи такие сволочи, что даже если их раздевать принудительно с установкой флага на запрет одевания, они все равно находят лазейки, чтобы покрасоваться в понравившейся им шмотке. Я однажды сделал персонажа в силовой броне, и мне не понравилось постоянно лицезреть его шлем вместо лица. Тогда я сделал ему небольшой скрипт, чтобы он одевал шлем только на время боя, и снимал его после окончания:
begin onCombatEnd
unequipitem [helmet] 1
end
И что вы думаете? Где-то что-то громко упало, НПС мигом одел свой шлем, а снимать не стал. Надел, гад, на всякий случай, а снимать не хочет - боя то не было.

Отредактировано SpalnyVagon (2011-06-05 14:20:40)

0

308

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

begin onCombatEnd
unequipitem [helmet]
end
И что вы думаете? Где-то что-то громко упало, НПС мигом одел свой шлем, а снимать не стал. Надел, гад, на всякий случай, а снимать не хочет - боя то не было.

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

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

с установкой флага на запрет одевания

Кстати, а чего это за флаг такой и где он устанавливается. Что-то в настройках непися не помню такого.

Кстати, твой, вышеприведённый, скрипт будет работать, если у шмоток будут одинаковые характеристики, а если нет, то будет одеваться постоянно с наилучшими... :)

Отредактировано Wulf (2011-06-05 14:19:51)

0

309

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

Кстати, а чего это за флаг такой и где он устанавливается. Что-то в настройках непися не помню такого.

Это не в настройках, это в редакторе скриптов.
Формат команды unequip:
[ActorID.]UnEquipItem ObjectID NoEquipFlag HideEquipMessage
Если заставить НПС снять вещь и установить флаг в 1, то он не сможет одеть данную вещь самостоятельно, только скриптом (см. мой пост №286).
Первоисточник: http://geck.bethsoft.com/index.php/UnequipItem

0

310

Спасибо!

Разобрался с командами наконец! Теперь проблем с надеванием брони не должно быть, правда то-же есть нюансы. Как всегда. :)

Отредактировано Wulf (2011-06-05 15:09:41)

0

311

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

о как... оружие знаю подбирают неписи а вот броню надо пробовать в локации :huh:

0

312

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

одеть броню которая в сундуке

Чревато. Представьте себе, игрок крадет эту броню, НПС, не найдя нужной вещи, может впасть в ступор. Уж лучше пусть все с собой таскает. Хотя, можно сделать так, что он все будет в шкафу хранить. А шкаф закрыть на ключ, а ключ разместить не в инвентаре у НПС (чтобы не украли), а в death item.
:( В игре все можно сделать. В жизни - все сложнее - сидишь дома в халате, никого не трогаешь, и тут приходят тесть с тещей и начинают тебя обижать. Ну не полезешь же в шкаф за силовой броней, так в халате и будешь отбиваться.

0

313

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

Хотя, можно сделать так, что он все будет в шкафу хранить. А шкаф закрыть на ключ, а ключ разместить не в инвентаре у НПС (чтобы не украли), а в death item.

Однако завернули... :) А чего просто не разместить сундук в недоступном для игрока и любого другого непися месте? Под пол засунуть и всё. :) А на время боя просто из сундука передавать скриптом неписю и всё.

Отредактировано Wulf (2011-06-05 20:51:23)

0

314

эээ а название английские дней недели помнит кто? mon monday? sat saturday? tue tuersday? вощем винду чтоль на энглишь переключить... :dontknow:

0

315

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

разместить сундук в недоступном для игрока и любого другого непися месте

Сундук на видном месте и ключ у мертвого хозяина - более правдоподобно и соответствует реалиям 3-го Фола. Именно так устроены караванщики, например. Пока его не убьешь, ключ от сундука в Кентербери не получишь, украсть ключ нельзя.

Для данного же случая никакие сундуки вовсе не нужны - все свое ношу с собой. Броня одевается только на время боя, снимается по его окончании:

begin onStartCombat
equipitem [SuperArmorDuper] 1
end

begin onCombatEnd
unequipitem [SuperArmorDuper] 1
end

begin gamemode
if isInCombat == 0 && getEquipped [SuperArmorDuper] == 1
unequipitem [SuperArmorDuper] 1
endif
end

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

0

316

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

Код:
begin onStartCombat
ТУТ НЕПИСЬ ДОЛЖЕН ПОБЕЖАТЬ К СУНДУКУ С КРИКОМ УБИВАЮТ
equipitem [SuperArmorDuper] 1
end

begin onCombatEnd
ТУТ НЕПИСЬ ДОЛЖЕН ОДЕТЬ ОБЫЧНУЮ ШМОТКУ И ПОЛОЖИТЬ БРОНЮ НА МЕСТО В СУНДУК
unequipitem [SuperArmorDuper] 1
end

begin gamemode
if isInCombat == 0 && getEquipped [SuperArmorDuper] == 1
unequipitem [SuperArmorDuper] 1
endif
end

я вобще думал что можно сделать проще, создать список вещей
для головы список HeadList
для тела список BodyList
боевка ArmorList
в состав списка для тела входят Armor001 Armor002 Armor003 Armor004 Armor005(инвентарь перса)
в состав списка для головы входят Helm001 Helm004 Helm005(инвентарь перса)
в состав списка брони входят PowerArmor001 PowerHelm001 (это все в сундуке)
ну и переменная day для каждого дня она увеличивается ясен пень, день прошел настал новый день day=day+1

в итоге чето типа такое...

Код:
создаем переменную day
переменная day меняет значение каждый день все значения переменной day01 day02 day03 day04 day05
переменная day имеет пять значений, после пятого значения цикл повторить
создаем HeadList
HeadList включает в себя Helm001 Helm004 Helm005
создаем BodyList
BodyList включает в себя Armor001 Armor002 Armor003 Armor004 Armor005
создаем ArmorList
ArmorList включает в себя  PowerArmor001 PowerHelm001

после прекращения действия пакета сна персонаж проснулся и встал с кровати обрабатывает day и одевает на себя по одному случайному предмету из каждого списка
любой предмет из списка BodyList одевается сразу
если у выбранного предмета из списка HeadList индекс не соответствует индексу надетого на персонажа предмета то предмет неодевать
если начался бой то экипировать предметы из списка ArmorList
если кончился бой то убрать предметы из списка ArmorList обратно и одеть предыдущий предмет из списка BodyList

тогда и элемент случайности будет, и не оденет Armor001 вместе с Helm005 потому что индекс несовпал.

есть еще вариант

Код:
создаем переменную day
переменная day меняет значение каждый день все значения переменной day01 day02 day03 day04 day05
переменная day имеет пять значений, после пятого значения цикл повторить
задаем соответствие для каждого дня
если день day01 то персонаж оденет все из инвентаря с индексом 01 Armor001 Helm001
если день day02 то персонаж оденет все из инвентаря с индексом 02 Armor002
если день day03 то персонаж оденет все из инвентаря с индексом 03 Armor003
если день day04 то персонаж оденет все из инвентаря с индексом 04 Armor004 Helm004
если день day05 то персонаж оденет все из инвентаря с индексом 05 Armor005 Helm005
если начался бой то экипировать предметы из сундука PowerArmor001 PowerHelm001
если кончился бой то убрать предметы из сундука обратно и одеть предыдущий предмет

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

Отредактировано 7755 (2011-06-06 18:36:16)

0

317

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

нашел что сам перк это часть этого скрипта DLC03CreatorQuestScript

Код:
ScriptName DLC03CreatorQuestScript

short playerSleep
short DLC03DeathClawControl
short NukaCount
short Quantums
Short FEVaquaPuraCount
Short NukaConverted
Short DLC03MessageRan
short ThirtyGood
short ThirtyBad
short ThirtyNeutral
short PuppiesActive

float DLC03StartTimer

begin menumode
	; player has the Deep Sleep perk and is sleeping
	if Player.HasPerk DLC03DeepSleep == 1 && IsPCSleeping == 1
set playerSleep to 2
	endif

	; player has the Puppies! perk
	If DogmeatRef.GetDead == 1 && Player.HasPerk DLC03Puppies
If Player.GetDistance DogmeatRef > 8000
	If PuppiesActive == 0
Set PuppiesActive to 1
DogmeatRef.SetActorFullName DLC03Freshmeat
DogmeatREF.AddSpell DLC03PuppiesEffect
	EndIf
	DogmeatRef.Enable
	DogmeatRef.Resurrect
	DogmeatRef.AddToFaction FollowerFaction 0
	Set Followers.PlayerHasFollower to 1
	Set Followers.DogmeatHired to 1
	Set DogmeatRef.Waiting to 1
	Set DogmeatRef.IsFollowingDefault to 1
	Set DogmeatRef.IsFollowingLong to 0
	Set DogmeatRef.IsFollowingShort to 0
	Set DogmeatRef.CombatStyleRanged to 0
	Set DogmeatRef.CombatStyleMelee to 1
	DogmeatRef.SetCombatStyle FollowersCombatStyleMelee
	DogmeatRef.SetPlayerTeammate 1
	DogmeatRef.AddToFaction TeammateFaction 1
EndIf
	EndIf

end

begin gamemode



; if Enclave Radio ref has been enabled, it means the player is out of the vault, which means it's time to run the message box

	if ( DLC03MessageRan == 0 )
if ( RadioEnclaveRef.GetDisabled == 0 )

	Set DLC03MessageRan to 1
	set DLC03StartTimer to 60
elseif ( GetStage MQ09 >= 60 )
	Set DLC03MessageRan to 1
	Set DLC03StartTimer to 60
endif
	elseif ( DLC03MessageRan == 1 )
if ( DLC03StartTimer <= 0 )
	ShowMessage DLC03StartMessage
	Set DLC03MessageRan to 2
else
	set DLC03StartTimer to ( DLC03StartTimer - GetSecondsPassed )
endif

	endif



	if playerSleep == 2
; player has actually slept in this bed
; give player Well-Rested spell and then clear variable
player.CastImmediateOnSelf WellRestedSpell
set playerSleep to 0
	endif

	; player has Quantum Chemist perk
	If Player.HasPerk DLC03QuantumChemist == 1
If Player.GetItemCount NukaCola > 9
	Set NukaCount to Player.GetItemCount NukaCola
	Set Quantums to NukaCount / 10
	Set NukaConverted to Quantums * 10
	Player.RemoveItem NukaCola NukaConverted
	Player.AddItem MS05NukaColaQtm Quantums
EndIf
	EndIf

;These are for the Level 30 Achievements

	If ThirtyBad == 0
If Player.GetLevel >= 30
	 If Player.GetAv Karma < -250
AddAchievement 62
Set ThirtyGood to -1
Set ThirtyNeutral to -1
Set ThirtyBad to 1 
	endif
endif
	endif

	If ThirtyNeutral == 0
If Player.GetLevel >= 30
	If Player.GetAv Karma >= -250
If Player.GetAv Karma <= 250
	AddAchievement 63
	Set ThirtyGood to -1
	Set ThirtyNeutral to 1
	Set ThirtyBad to -1 
endif
	endif
endif
	endif


	If ThirtyGood == 0
If Player.GetLevel >= 30
	 If Player.GetAv Karma > 250
AddAchievement 64
Set ThirtyGood to 1
Set ThirtyNeutral to -1
Set ThirtyBad to -1 
	endif
endif
	endif

end

а именно вот эта часть

Код:
; player has Quantum Chemist perk
	If Player.HasPerk DLC03QuantumChemist == 1
If Player.GetItemCount NukaCola > 9
	Set NukaCount to Player.GetItemCount NukaCola
	Set Quantums to NukaCount / 10
	Set NukaConverted to Quantums * 10
	Player.RemoveItem NukaCola NukaConverted
	Player.AddItem MS05NukaColaQtm Quantums
EndIf
	EndIf

ну я посмотрел айди ледяной MS05IceNukaCola и добавил в скрипт такой же кусок, в результате скрипт получается такой:

Код:
ScriptName DLC03CreatorQuestScript

short playerSleep
short DLC03DeathClawControl
short NukaCount
short Quantums
Short FEVaquaPuraCount
Short NukaConverted
Short DLC03MessageRan
short ThirtyGood
short ThirtyBad
short ThirtyNeutral
short PuppiesActive

float DLC03StartTimer

begin menumode
	; player has the Deep Sleep perk and is sleeping
	if Player.HasPerk DLC03DeepSleep == 1 && IsPCSleeping == 1
set playerSleep to 2
	endif

	; player has the Puppies! perk
	If DogmeatRef.GetDead == 1 && Player.HasPerk DLC03Puppies
If Player.GetDistance DogmeatRef > 8000
	If PuppiesActive == 0
Set PuppiesActive to 1
DogmeatRef.SetActorFullName DLC03Freshmeat
DogmeatREF.AddSpell DLC03PuppiesEffect
	EndIf
	DogmeatRef.Enable
	DogmeatRef.Resurrect
	DogmeatRef.AddToFaction FollowerFaction 0
	Set Followers.PlayerHasFollower to 1
	Set Followers.DogmeatHired to 1
	Set DogmeatRef.Waiting to 1
	Set DogmeatRef.IsFollowingDefault to 1
	Set DogmeatRef.IsFollowingLong to 0
	Set DogmeatRef.IsFollowingShort to 0
	Set DogmeatRef.CombatStyleRanged to 0
	Set DogmeatRef.CombatStyleMelee to 1
	DogmeatRef.SetCombatStyle FollowersCombatStyleMelee
	DogmeatRef.SetPlayerTeammate 1
	DogmeatRef.AddToFaction TeammateFaction 1
EndIf
	EndIf

end

begin gamemode



; if Enclave Radio ref has been enabled, it means the player is out of the vault, which means it's time to run the message box

	if ( DLC03MessageRan == 0 )
if ( RadioEnclaveRef.GetDisabled == 0 )

	Set DLC03MessageRan to 1
	set DLC03StartTimer to 60
elseif ( GetStage MQ09 >= 60 )
	Set DLC03MessageRan to 1
	Set DLC03StartTimer to 60
endif
	elseif ( DLC03MessageRan == 1 )
if ( DLC03StartTimer <= 0 )
	ShowMessage DLC03StartMessage
	Set DLC03MessageRan to 2
else
	set DLC03StartTimer to ( DLC03StartTimer - GetSecondsPassed )
endif

	endif



	if playerSleep == 2
; player has actually slept in this bed
; give player Well-Rested spell and then clear variable
player.CastImmediateOnSelf WellRestedSpell
set playerSleep to 0
	endif

	; player has Quantum Chemist perk
	If Player.HasPerk DLC03QuantumChemist == 1
If Player.GetItemCount NukaCola > 9
	Set NukaCount to Player.GetItemCount NukaCola
	Set Quantums to NukaCount / 10
	Set NukaConverted to Quantums * 10
	Player.RemoveItem NukaCola NukaConverted
	Player.AddItem MS05NukaColaQtm Quantums
EndIf
	EndIf

	If Player.HasPerk DLC03QuantumChemist == 1
If Player.GetItemCount MS05IceNukaCola > 9
	Set NukaCount to Player.GetItemCount MS05IceNukaCola
	Set Quantums to NukaCount / 10
	Set NukaConverted to Quantums * 10
	Player.RemoveItem MS05IceNukaCola NukaConverted
	Player.AddItem MS05NukaColaQtm Quantums
EndIf
	EndIf

;These are for the Level 30 Achievements

	If ThirtyBad == 0
If Player.GetLevel >= 30
	 If Player.GetAv Karma < -250
AddAchievement 62
Set ThirtyGood to -1
Set ThirtyNeutral to -1
Set ThirtyBad to 1 
	endif
endif
	endif

	If ThirtyNeutral == 0
If Player.GetLevel >= 30
	If Player.GetAv Karma >= -250
If Player.GetAv Karma <= 250
	AddAchievement 63
	Set ThirtyGood to -1
	Set ThirtyNeutral to 1
	Set ThirtyBad to -1 
endif
	endif
endif
	endif


	If ThirtyGood == 0
If Player.GetLevel >= 30
	 If Player.GetAv Karma > 250
AddAchievement 64
Set ThirtyGood to 1
Set ThirtyNeutral to -1
Set ThirtyBad to -1 
	endif
endif
	endif

end

все работает но одно НО, надо модифицировать эту часть скрипта так чтоб различия между ледяной и обычной ядеркой небыло, поясняю... если я беру 10 ледяной ядерки то перк срабатывает и у меня в инвентаре квантовая ядерка, если я беру 10 просто ядерки то перк срабатывает и у меня в инвентаре квантовая ядерка, а вот если 3 ледяной ядерки плюс семь просто ядерки то шиш с маслом...

толи создавать список в который кинуть оба вида ядерки и модифицировать скрипт чтоб он считал 10 предметов тупо из списка, несмотря на то что они разные предметы,
толи вводить переменную которая приравняет ледяную ядерку к просто ядерке и оперировать переменной при расчете количества ядерки в инвентаре...

вощем я незнаю. знаю что в этом скрипте все навыки\перки\эффекты брокенстила хранятся и решение должно быть наиболее логичным и наименее затратным  :shine:

Отредактировано 7755 (2011-06-11 07:53:03)

0

318

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

а вот если 3 ледяной ядерки плюс семь просто ядерки

Ну, я бы добавил еще три переменные и дальше примерно так:
short AllBottles   ;Общее кол-во бутылок
short IseNukaCount   ;Количество ледяной колы
short DeltaBottle       ;разница

If Player.HasPerk DLC03QuantumChemist == 1
    Set NukaCount to Player.GetItemCount NukaCola ;определяем кол-во ядер колы
Set IseCount to Player.GetItemCount MS05IceNukaCola   ;определяем кол-во ледяной ядер колы
set AllBottles to NukaCount + IseNykaCount ;определяем общее количество

If AllBottles > 9

Set Quantums to AllBottles / 10 ; определяем кол-во полученной квантовой колы
Set NukaConverted to Quantums * 10 ;определяем общее количество конвертированной колы
Player.AddItem MS05NukaColaQtm Quantums ; добавляем игроку квантовую колу
set DeltaBottle to AllBottles - NukaConverted ; определяем общий остаток бутылок

if NukaCount >= IseNukaCount ; если первоначально обычной колы было больше, чем ледяной
    set DeltaBottle to NukaCount - DeltaBottle ;вычисляем разницу, которую нужно отнять
    Player.RemoveItem MS05IceNukaCola IseCount ;удаляем всю ледяную колу
    Player.RemoveItem NukaCola DeltaBottle    ;удаляем часть обычной колы, оставляя разницу
else        ;если же первоначально было больше ледяной колы
    set DeltaBottle to IseNukaCount - DeltaBottle ;вычисляем разницу, которую нужно оставить
    Player.RemoveItem MS05IceNukaCola DeltaBottle ;Удаляем часть ледяной колы, оставляя разницу.
    Player.RemoveItem NukaCola NukaCount    ;удаляем всю обычную колу
endif
EndIf
EndIf

0

319

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

0

320

Привет всем!
Помогите решить такую не простую для меня задачу.
Условия таковы.
Есть контейнер и активатор.
Контейнер выполняет роль ремонтного бокса. Если туда поместить изношенное оружие, то через некоторое время (в зависимости от степени износа), допустим при полном - 6 дней, среднем 4 дня и малом - 2 дня. Контейнер открывается и игрок получает оружие в 100% состоянии.
Раньше окончания времени реконструкции - контейнер не открыть. Сообщение - Идёт процесс восстановления, до окончания осталось (колл-во) дней.
Плюс звук работы.
Трудность в том, что оружия много допустим 30 разных моделей.
Как решить вопрос проверки, какое именно из списка оружия находиться в контейнере.
Писать для каждого ствола свой блок?
Назначит общую переменную для всего списка - MyWeap
Set  MYWEAP to Weap10mmSubmachineGun || Weap10mmPistol || WeapNV357Revolver || WeapLaserPistol
и проверять так
If AAAKainRepairBoxRef.GetItemCount MYWEAP == 1
И в конце при замене написать так
AAARepairBox.Remove MYWEAP 1
AAARepairBox.AddItem MYWEAP 1
Будет это работать или нет.
Я читал про одежду (выше) там то же списки, но немного не так.
Подскажите пожалуйста. Хотя бы в общих чертах. Но лучше подробнее!
И ещё, а что означает вот это / в этой строке Set Quantums to AllBottles / 10
И вот это !=
== равно, >= больше или равно, а это  != ?
Пока.

Отредактировано K.A.I.N. (2011-06-16 09:47:30)

0

321

В продолжение вопроса.
Вот так выглядит скрипт одного человека Gensher. Я то вообще начал мудрить с тремя контейнерами и прочим, как обычно. Но вот нам только не нравиться, что много блоков - на каждое оружие блок.

Код:
scn zzRepairing

Ref CurrentObject ;Переменная для объектов инвентаря контейнера
Short cou         ;Количество объектов данного вида в инвентаре контейнера
Short DTO         ;Переменная для вычисления оставшихся дней ремонта
Begin onActivate
If zzRepair.GetLocked == 1                  ;Если контейнер закрыт, то вещи в данный момент на ремонте
If TTO <= GameDaysPassed            ;Проверяем пора ли открывать
ShowMessage zzRepairingMessage        ;Открывать пора Сообщение "Ваши вещи отремонтированы"
zzRepairButton.Activate               ;Меняем положение лампочки на кнопке
zzRepair.UnLock                       ;Открываем контейнер
Else                                               ;Иначе открывать не пора
Set DTO to TTO - GameDaysPassed            ;Считаем сколько дней ремонта осталось
ShowMessage zzRepairingMessageEarly DTO    ;Сообщение "Вещи еще не готовы, осталось дней:"
EndIf
Else  ;иначе контейнер открыт, значит надо начинать ремонт

;начинаем ремонт

zzRepair.Lock 255                              ;Закрываем контейнер
Set TTO to GameDaysPassed + 2                  ;TTO - TimeToOpen - Заранее созданная глобальная переменная, 
                                                       ;чтоб не терять значение при выходе из локации. В нее 
                                                       ;заносим день окончания ремонта
Activate                                       ;Зажигаем лампочку на кнопке
Playsound3D AMBRoomtoneVaultUtility01LP1200    ;Контейнер начинает гудеть, эмулируя бурную деятельность

;начинаем перебирать объекты в инвентаре, перебирая вообще все объекты и проверяя их количество в контейнере
	
If zzRepair.GetItemCount DLC02WeapGaussRifleWasteland > 0    ;например гаусс
Set cou To zzRepair.GetItemCount DLC02WeapGaussRifleWasteland    ;Вычисляем сколько гауссов в инвентаре
zzRepair.RemoveItem DLC02WeapGaussRifleWasteland cou             ;Удаляем объект
zzRepair.AddItem DLC02WeapGaussRifleWasteland cou                ;добавляем новый объект
EndIf

;далее таких блоков в скрипте делаем столько, сколько видов оружия наш скрипт должен уметь ремонтировать.
EndIf
End

Может есть способ, как то ограничить кол-во блоков.
Пока.

Отредактировано K.A.I.N. (2011-06-16 15:50:09)

0

322

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

0

323

!= - не равно

0

324

Как сделать следующий эфект для брони: если броня одета и у игрока имеется несколько ядерных батарей, то жизни у игрока не будут кончаться во время боя, но за каждые 2 часа игрового времени из инвентаря игрока исчезала 1 яд. батарея. Когда все батареи кончатся, то броня не будет защищать вообще.

0

325

Привет всем!
Помогите разобраться вот с этим скриптом, мне его написал один человек Hedge. Скрипт для серии атак, через заданный интервал.
При входе в триггер начинаются атаки, а триггер отключается.
Мне нужно, что бы он снова включался, когда ГГ уйдёт на определённое расстояние от триггера.
Но он не включается!

Код:
scn AAAKainAttackScript

short StartAttack
float fTimer
short e1
short e2
short e3
short Trigger
Begin OnTriggerEnter player
Set fTimer to 60
  Set StartAttack to 1
Set e1 to 0
Set e2 to 0
Set e3 to 0
     AAAKainTriggerAtackRef.Disable
End
Begin GameMode
if StartAttack == 1
Set fTimer to (fTimer - GetSecondsPassed)
if (fTimer<20) && (e1 == 0)
AAAKainXMarkerRef.PlaceAtMe AAAKain188MercA 1 5 0 ;пошла первая группа
Set e1 to 1
Endif
if (fTimer>20) && (Ftimer<40) && (e2 == 0)
AAAKainXMarkerRef.PlaceAtMe AAAKain188MercB 1 5 0 ;пошла вторая группа
Set e2 to 1
Endif
if (fTimer>40) && (e3 == 0) 
AAAKainXMarkerRef.PlaceAtMe AAAKain188MercC 1 5 0 ;пошла третья группа
Set e3 to 1
Endif
If (e1+e2+e3) == 3
Set StartAttack to 0
EndIf
EndIf
if (AAAKainTriggerAtackRef.Getdistance Player >= 256) 	
AAAKainTriggerAtackRef.Enable	
Endif
End

С этим местом
if (AAAKainTriggerAtackRef.Getdistance Player >= 256)
AAAKainTriggerAtackRef.Enable
Endif
что то не так или стоит не там. Но я уже пробовал его ставить и в блок триггера - то же самое. Новые нападения не происходят. Или происходят постоянно, пока входишь в триггер (Сам уже запутался! Пойду ещё раз проверю и подправлю вопрос)
Пока.

Отредактировано K.A.I.N. (2011-06-30 08:48:54)

0

326

Да! проверил  и когда написано так. Триггер постоянно включён, почему то if (AAAKainTriggerAtackRef.Getdistance Player >= 256)
не работает, он постоянно включаться  AAAKainTriggerAtackRef.Enable  как это и должно быть в блоке GameMode.
А если переносишь
if (AAAKainTriggerAtackRef.Getdistance Player >= 256)
AAAKainTriggerAtackRef.Enable в блок триггера. Он после выключения не включается.

Отредактировано K.A.I.N. (2011-06-30 09:01:49)

0

327

K.A.I.N. написал(а):

GameMode

Гм. А разве у триггера этот блок работает? Если мне память не отшибает, то у триггера три блока OnTriggerEnter, OnTrigger, OnTriggerLeave (вход в триггер, работа триггера, выход из триггера).
Так, что генерацию волны нужно располагать в блоке OnTrigger. Пока ГГ будет в триггере, то волны генерируются. Как только вышел, то всё прекратилось. И дизаблить не надо. А если блок GameMode всё-таки работает, то имеет смысл при входе в триггер энаблить маркер, на котором и будет висеть скрипт на проверку расстояния до ГГ с последующим включением триггера. Я так думаю.

0

328

Wulf Привет! Спасибо за подсказку. Сейчас попробую сделать в блоке триггера. Наверное получиться - ведь всё логично. Пока ГГ в зоне триггера скрипт работает и атаки идут. Но гадать не буду - лучше проверю!
Пока.

0

329

K.A.I.N. написал(а):

Сейчас попробую сделать в блоке триггера.

Ты только обрати внимание, что блок должен вот так вызываться "begin OnTrigger player". Что-бы он реагировал только на ГГ, а не на всех подряд.

0

330

K.A.I.N. написал(а):

Мне нужно, что бы он снова включался, когда ГГ уйдёт на определённое расстояние от триггера.
Но он не включается

1. Не убирайте триггер из ячейки, сам себя он в нее потом не загрузит. Поэтому и не работает. Зачем он дисеблится, если нужно, чтобы он работал постоянно?
2. Блок gamemode выполняется на всех известных типах активаторов, в том числе и на триггерах.
3. Переменная trigger для чего?

K.A.I.N. написал(а):

С этим местом
if (AAAKainTriggerAtackRef.Getdistance Player >= 256)
AAAKainTriggerAtackRef.Enable
Endif

4. Плохое место. Кривоватое. Будет выполняться в каждом фрейме. Спрашивается, зачем?

0


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