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

Сообщений 271 страница 300 из 418

271

Evil
Привет! Да действительно можно не понять - надо дописать, что внутри дома.
Спасибо!
Пока

0

272

K.A.I.N., проблема все еще актуальная (хотя только теоритически, нужно обязательно проверить)

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

Боюсь, что в варианте K.A.I.N. игрок выйдет голым из дома, ибо если изнутри дверь активировать, стоя в триггере - все заберется.

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

Отредактировано Evil (2011-05-26 18:58:36)

0

273

K.A.I.N.
ООО.Да.Спасибо большое.

0

274

Evil
Согласен!  Надо триггер отодвинуть от выходной двери. Но увы я смог только так - думаю если SpalnyVagon зайдёт он подправит и подскажет, как быть с одеждой для дома.
Я пробовал player.AddItem OutfitPrewarSpring 1 и затем player.EquipItem OutfitPrewarSpring 1 дать одежду и одеть.  Работает. И на двери снимается.
Но ведь может быть так, что "хитрый" игрок захочет снять её сам и оставить дома, а придя во второй раз снова получит комплект. И начнёт на этом зарабатывать деньги! Входить, снимать - выходить. А потом на рынок!
Пробовал и с квестовой одеждой. Но одетая при входе, она уже больше не снимается. Кстати надо проверить - может и снимаеться, но только спец. командой.
Пока.

Отредактировано K.A.I.N. (2011-05-26 19:20:58)

0

275

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

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

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

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

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

пробовал player.AddItem OutfitPrewarSpring 1 и затем player.EquipItem OutfitPrewarSpring 1 дать одежду и одеть.  Работает. И на двери снимается.

Формат команды equip:
[ActorRefID].EquipItem ObjectID:ref NoUnequipFlag:int{0, 1} HideEquipMessage:int{0, 1}
Если флаг NoUnequipFlag установлен, то такую одежду уже ни игрок ни другие актеры самостоятельно снять не смогут (только скриптом).

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

EvilСогласен!  Надо триггер отодвинуть от выходной двери.

Триггер в любом случае надо отодвигать от двери, точнее от маркера телепорта. Иначе при перемещении в интерьер могут получаться битые автосейвы.

0

276

SpalnyVagon
Привет!
Ну да! Человек просил скорее всего такое, наверное из природной скромности или потому что не знает о "ВЕЛИКОЙ СИЛЕ СКРИПТА". Шутка!

Код:
scn AAABoxTriggerSCRIPT
short sDoOnce
BEGIN OnTriggerEnter player      
if (sDoOnce == 0)
Player.RemoveAllItems AAABoxRef    
Set sDoOnce to 1
End

Но я подумал - не в баню ведь пришёл - нет бань на Пустоши! Ужас. Вернее есть одна, но в дополнении про Советских из Метро, но в ней тазиков и веников нет. Так что можно не считать.
Ну вот я и начал  думать, а как бы я для себя сделал. Вышло так.

Код:
scn AAABoxTriggerSCRIPT
BEGIN OnTriggerEnter player       ; при входе игрока в триггер
Player.RemoveAllItems AAABoxRef     ; изымаются все предметы в контейнер
Player.AddItem ID(одежда) 1       ; добавил одежду - для дома
Player.EquipItem ID(одежда) 1    ; одел её
AAABoxTriggerRef.Disable     ; триггер отключается, что бы не изъять то, то игрок захочет унести
End

Затем решил, что у двери на выходе - одежду для дома надо снять и одеть плащ шерифа (например)
Сделал.
Но ГГ стал выходить на улицу, как заходить в баню.
Я поставил trigger  на улице и стал включать его при выходе игрока, в нём одевать плащ шерифа, а затем отключать.
Нормально!
Но тут я и подумал о хитром игроке - желающем на халяву разбогатеть на рубахах и штанах.
А так как для меня проверки на наличие и отсутствие - тёмный лес. Максимум, что я пока могу сделать так

Код:
Begin GameMode
if GetStage AAAQuest == 10
if (Player.GetItemCount (курево) >= 1 && Player.GetItemCount (спички) >= 1)
SetStage AAAQuest 20
endif
endif
end

И то за это спасибо Wulf!
Вот я и закинул удочку, придёт и расскажет!
А если серьёзно - мне бы пример, какой нибудь проверки - например
Есть броня и есть аккумулятор в рюкзаке.
Как выполнить проверку, что именно эта броня станет крепче, если у игрока одет рюкзак, а рюкзак не оденется. если не одета именно эта броня.
Ну это я так, к слову! А может и нет.
Пока.

0

277

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

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

А зачем аккомулятор?
Проверка условия "на игрока надето":
Player.getEquipped [ObjectID]

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

что именно эта броня станет крепче

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

Отредактировано SpalnyVagon (2011-05-26 22:36:10)

0

278

Что мешает броню подменить?

Отредактировано Evil (2011-05-26 22:37:08)

0

279

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

чтобы броня меняла по ходу дела свои свойства

Можно например выводить сообщение с выбором.
Одел броню - ничего не произошло. Как только одел рюкзак - вылезло сообщение, а в нём выбор
1 увеличить скорость
2 Увеличить защиту (например за счёт снижения скорости)
3. и тп.
Можно подменой брони  (защита)
Скорость просто командой (как в консоли) наверное должно быть такое.
Примерно так

0

280

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

Что мешает броню подменить?

Корявенько будет смотреться. Звук одевания, звук раздевания, время так же требуется на все эти шаманства. Проще добавлять игроку здоровья (та же функция, что и для увеличения скорости).

0

281

Привет всем!
Сделал так  для рюкзака (шлем)

Код:
Begin GameMode
if (sDoOnce == 0)
if (Player.getEquipped AAAKainArmor == 1) ; проверка какая броня одета
Player.EquipItem AAAKainHelmet             ; одеваем рюкзак
showmessage AAAKainHelmetON
Set sDoOnce to 1
endif   
endif   
if (Player.getEquipped AAAKainArmor == 0) ; проверка какая броня одета
Player.UnequipItem AAAKainHelmet          ; не даём одеть рюкзак
showmessage AAAKainHelmetNO
endif   
end

В принципе работает, но при попытке одеть шлем с другой бронёй постоянно выводиться сообщение " Удалено из экипировки" примерно так.
Надо попробовать с флагом Если NoEquipFlag = 1 написано, что этот флаг не позволяет одеть предмет.

Что скажите! Ваше слово SpalnyVagon - поправляй, советуй.
Пока.

Отредактировано K.A.I.N. (2011-05-27 15:28:34)

0

282

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

if (Player.getEquipped AAAKainArmor == 0) ; проверка какая броня одета
Player.UnequipItem AAAKainHelmet          ; не даём одеть рюкзак
ShowMessage "YourMessageID"               ; сообщение "Разъёмы для подключения не обнаружены"
endif

Этот блок выполняется в каждом фрейме, следовательно сообщение будет лезть постоянно.
Попробуйте не с "чужой брони" рюкзак снимать, а снимать его и выдавать сообщение, если была предпринята попытка надеть его не на "свою" броню. Примерно так (скрипт висит на рюкзаке):
begin onEquip player
if player.getequipped [броня] == 0
player.unequipitem [рюкзак]
showmessage [разъем не подходит]
end

0

283

SpalnyVagon
Привет! Я уже попробывал на самом деле постоянно сообщение вылазит. Убрал и из GECK и из сообщения (наверное зря из сообщения убрал - сейчас назад допишу)  и теперь думаю, как быть.
Теперь уже не думаю!
Испытал твой вариант. Действительно получше. Во первых сообщение появляется в инвентаре, и тем самым отвлекает внимание от надписи "Шлем снят"
Да и меньше в нём написано - то же плюс.

Отредактировано K.A.I.N. (2011-05-27 15:27:15)

0

284

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

отвлекает внимание от надписи "Шлем снят"

Формат команды unequipitem точно такой же как и у equipitem, убрать флаг соощения, и оно не будет появляться вообще.

0

285

Привет всем!SpalnyVagon
Не вышло, что у меня с этим

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

убрать флаг сообщения

Сделал так

Код:
Player.EquipItem AAAKainHelmet  HideEquipMessage = 1

Не сохраняется скрипт
Почитал на Wiki Здесь и сделал так

Код:
Player.EquipItem AAAKainHelmet 
If HideEquipMessage = 1
endif

Не сохраняется
Ещё почитал и сделал так

Код:
Player.UnequipItem AAAKainHelmet  1 HideEquipMessage = 1
Player.AddItem AAAKainHelmet 1
Player.RemoveItem AAAKainHelmet 1

потом так

Код:
Player.UnequipItem AAAKainHelmet  1 
Player.AddItem AAAKainHelmet 1
Player.RemoveItem AAAKainHelmet 1
If HideEquipMessage = 1
endif

результат тот же не сохраняеться!
Чего в моём GECK не хватает - соли! Или в голове - перца!
Пока.

Отредактировано K.A.I.N. (2011-05-28 07:16:44)

0

286

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

Чего в моём GECK не хватает

Мне кажется, я знаю, чего не хватает - желания прочитать учебник.
Формат команды equip:
[ActorRefID].EquipItem ObjectID:ref NoUnequipFlag:int{0, 1} HideEquipMessage:int{0, 1}
Где:
[ActorRefID] - имя акера
. (точка) - команда переадрессации
EquipItem - функция одевания
ObjectID:ref - ID костюма (шляпы)
NoUnequipFlag:int{0, 1} - флаг запрета на снятие (int - целое число, т.е. не дробь, не число с плавающей точнкой)
HideEquipMessage:int{0, 1} флаг запрета выдачи сообщения

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

В скрипте это выглядит так:
Player.equipitem SuperHelmet 1 1
Что означает: Игрок одевает Супершлем, не может его снять, даже если очень сильно захочет, при этом не будет никаких сообщений про одевание. Последняя единица в строке - это и есть тот самый флаг запрета выдачи сообщения, по английски HideEquipMessage.

А если сделать так:
Player.equipitem SuperHelmet 0 0
Игрок наденет супершлем, сможет его при желании снять, при этом на экране появится сообщение о том, что шлем был надет. Нолики можно не рисовать, это значение по умолчанию.

По поводу того, будет ли выдаваться сообщение, если команда одевания применена не к игроку - не знаю, не пробовал. На игроке я это все использовал, могу подтвердить, все честно, если запретить снятие - не снимишь, сообщение или выдается, или не выдается, в зависимости от того, как установлен флаг сообщений.

Отредактировано SpalnyVagon (2011-05-28 11:12:46)

+2

287

SpalnyVagon
Привет!
Прочитал, что я могу сказать. Да ничего! Прав ты.
Но кто мог подумать, что здесь и там
Функция UnequipItem принуждает игрока снять объект (ObjectID). Если NoEquipFlag = 1, актеры (включая игрока) не смогут надеть предмет.
    If NoEquipFlag = 1, actor (including the player) will be unable to equip the item. Once the item is equipped with the EquipItem function, the item can be equipped and unequipped as normal.
    If HideEquipMessage = 1, the item unequipped message will be hidden from the player.
Написана не функция - такое звучное название NoEquipFlag = 1!
Постоял немного в углу, написал здесь, а теперь пойду в GECK проверять, обидно ведь видел
UnequipItem ObjectID 0 1
AddItem ObjectID 1 1
RemoveItem ObjectID 1 1
И не понял.
Спасибо, что помогаешь.
Пока.

0

288

SpalnyVagon
Привет!
А я немного украсил.

Код:
scn AAAPowerBox02Script 
begin onEquip player
if player.getequipped AAAKainArmor == 0
player.unequipitem AAAKainHelmet 0 1
showmessage AAAKainHelmetNO     ;Внешние разъёмы не обнаружены - Отказ подключения.
endif 
end
begin onEquip player
if player.getequipped AAAKainArmor == 1
showmessage AAAKainHelmetON      ;Внешние разъёмы задействованы - Питание подключено.
endif
end
begin OnUnequip Player
if player.getequipped AAAKainArmor == 1
showmessage AAAKainHelmetOFF     ;Разрыв цепи - Питание отключено. Переход в стандартный режим.
endif
end

Eщё бы вывести всё это за Пип-бой, как бывает при активации предметов с выводом сообщения и выбором кнопок. Надо посмотреть как делают оружие со сменой стрельбы (вроде через клавиатуру).
Пока.

0

289

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

scn AAAPowerBox02Script
begin onEquip player
if player.getequipped AAAKainArmor == 0
player.unequipitem AAAKainHelmet 0 1
showmessage AAAKainHelmetNO     ;Внешние разъёмы не обнаружены - Отказ подключения.
endif
end
begin onEquip player
if player.getequipped AAAKainArmor == 1
showmessage AAAKainHelmetON      ;Внешние разъёмы задействованы - Питание подключено.
endif
end

Не есть хорошо ставить в скрипт два одинаковых блока, причем именно таких, которые выполняются только один раз, при этом провряя одно и то же условие. Вот так гораздо красивее:
begin onEquip player
if player.getequipped AAAKainArmor == 0
player.unequipitem AAAKainHelmet 0 1
showmessage AAAKainHelmetNO     ;Внешние разъёмы не обнаружены - Отказ подключения.
elseif player.getequipped AAAKainArmor == 1
showmessage AAAKainHelmetON      ;Внешние разъёмы задействованы - Питание подключено.
endif
end

0

290

SpalnyVagon
Вроде понял!
Раз броня может быть только одета или снята. Значит одна из двух проверок всегда не верна. Значит сообщение будет выведено - только для той условия которой выполнены.
Поэтому и объединил в один блок, и если бы ещё были перчатки - то из можно было сюда же ввести ещё одним условием. А сапоги четвёртым и так сколько нужно.
Ну всё! Большое дело сделали. Ура.
Спасибо. 
Пока.

0

291

Привет всем! Тысяча извинений если вопрос не в тему, но вот:
Как привязать использование предмета (не активатора,а еды,лекарств и пр.) к началу квеста\переходу на следующую его стадию?
Заранее спасибо

0

292

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

Как привязать использование предмета (не активатора,а еды,лекарств и пр.) к началу квеста\переходу на следующую его стадию?

А более подробно? Игрок употребляет лекарства и др. Ingestible не совсем так же, как другие НПС.

0

293

Игрок употребляет некий препарат, после этого начинается квест. Сначала попробовал создать условие в квесте (GetIsUsedItem), но не вышло.
А сейчас решил повесить на этот предмет скрипт. Столкнулся с двумя проблемами:
1. Не знаю имени функции, которая вызывается при использовании предмета
2.В скриптах я чайник...  Но вот сейчас  набросал это:

Код:
scn [i]имя скрипта[/i]
begin [i]имя этой самой неизвестной мне функции[/i]
setstage [i]имя квеста[/i] 10
End

Теперь имеется две просьбы: подскажите имя функции (найти нигде не могу! :angry: )
                                              Если криво написал "скрипт" (если это можно так назвать) - пожалуйста,подправьте.

0

294

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

подскажите имя функции (найти нигде не могу!

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

0

295

Привет всем!
Я посмотрел, что написал Bitnik  и подумал, а ведь на самом деле интересно такое сделать.
Предмет в инвентаре, не броня, не книга OnActivate и onEquip не подходят.
Решил через наличие в инвентаре попробовать player.GetItemCount
Сделал так

Код:
scn AAAKainEatScript

Short count 
short sDoOnce
begin OnAdd player
if (sDoOnce == 0)
Player.AddItem AAAKainBeer  1
Set sDoOnce to 1
endif
end 
Верхняя часть блок begin OnAdd player по идее должна добавлять в инвентарь бутылку одну и один раз.
А нижняя часть выполнить проверку и если бутылки нет - запустить квест (установить стадию)
begin GameMode
Ref MyItem 
set MyItem to AAAKainBeer
if (player.GetItemCount AAAKainBeer == 0) 
SetStage AAAKainQuest 1
endif
end

Нижний блок работает - без верхнего. Но сообщение появляется сразу при старте игры (стадия меняется) - бутылки в инвентаре нет.
А вот верхний блок не работает. При старте - зависает, или вылетает игра.
Что не так и где! Только про МОЗГ и Учебник не надо- пожалуйста!
Пока.

Отредактировано K.A.I.N. (2011-06-01 11:19:25)

0

296

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

Верхняя часть блок begin OnAdd player по идее должна добавлять в инвентарь бутылку одну и один раз.
А нижняя часть выполнить проверку и если бутылки нет - запустить квест (установить стадию)

Для этого скрипт должен висеть на каком-то объекте, который игрок может забрать в инвентарь. Блок OnAdd означает, что все что находится в этом блоке сработает в тот момент, когда игрок добавит себе в инвентарь тот предмет, на котором и будет висеть скрипт.
То есть если у нас есть уникальное пиво и нам нужно, чтобы при его поглощении стадия квеста перешла на другую то сделать было бы нужно так (скрипт вешается на пиво):

Код:
scn AAAKainEatScript

short sDoOnce
begin OnAdd player
Set sDoOnce to 1
endif
end 
begin GameMode
if (sDoOnce == 1) && (player.GetItemCount AAAKainBeer == 0) 
SetStage AAAKainQuest 1
endif
end

Однако это будет работать только если это пиво есть в одном экземпляре это раз. А два - подсчет количества пива не вариант. Потому что игрок может его не только употребить, но и банально выкинуть. Однако для того чтобы он не сделал подобную глупость, можно это пиво сделать квестовым предметом - тогда игрок не сможет его выкинуть. Хотя не уверен что он в этом случае и выпить его сможет... В общем подсчет количества предметов в инвентаре для данной ситуации не катит.

0

297

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

Что не так и где! Только про МОЗГ и Учебник не надо- пожалуйста!

Как говаривал Шурик из Операции Ы, надо, Федя, надо!

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

Но сообщение появляется сразу при старте игры (стадия меняется) - бутылки в инвентаре нет.

При старте игры у игрока еще ничего нет, естественно он и получит сообщение, как в Вашем нижнем блоке и предписано:
if (player.GetItemCount AAAKainBeer == 0)
SetStage AAAKainQuest 1
И вообще все это сделано слишком топорно. Добавили бутылку, выпили бутылку...
Ref MyItem
set MyItem to AAAKainBeer
if (player.GetItemCount AAAKainBeer == 0)  это и вовсе лишнее, ведь бутылка наверняка квестовая и уникальная, зачем усложнять определение наличия ее у игрока?
И так далее. Не буду дальше разводить критику, но ЭТО никуда не годится. Это скорее эксперименты с серой, углем и селитрой (рванет или нет?), а не решение интересной задачи.
Ребята, вы зря игнорируете базовые знания, доступные всем желающим. Учебник написан русским языком, и вам не потребуется супер-мозг, чтобы понять, о чем там речь. И не надо про то, что у вас слабое зрение а букаф вы не всех учили. Хотите освоить это дело - учите матчасть. У меня учебник и список скриптовых команд с описанием из вики лежат на рабочем столе.

На самом деле задача довольно простая. Для ее решения нужно вспомнить, что такое магические эффекты и типы блоков для них.
После этого открываем ГЕКК и создаем новый базовый эффект, тип эффекта - script
Сам скрипт коротенький, (тип - магический эффект, или как он там называется, не помню, короче не квест и не объект):
begin onScriptEffectStart
[то, что мы хотим получить]
end
Следующая стадия - создаем объект, при распитии которого начинается запланированное действо, например бутылка особой ядер-колы. Берем обычную ядер-колу, даем ей новое имя, а в списке эффектов добавляем еще один - тот, который мы предварительно создали.
На этом все.

+1

298

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

SpalnyVagon,K.A.I.N. , Igor_Ra, спасибо за внимание к моей проблеме!

0

299

Привет всем!

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

На самом деле задача довольно простая

Я выполнил эту задачу. Действительно не особо сложно.
Самое главное при создании скрипта отметить его как Effect
http://savepic.ru/2630298.jpg
А потом создав новый effect в Base Effect  этот скрипт можно будет выбрать вот здесь
http://savepic.net/1339755.jpg
Назвать его, добавить описание в нижнем правом углу! Выставить нужные флаги.
Ну а затем уже на бутылке (хоть на чём) добавить новый эффект. Вот тут. И снова выбрать свой скрипт.
http://savepic.ru/2631325.jpg
Но вопрос этот на самом деле интересный, там столько всего можно сделать. Я даже посмотрел в Fallout сколько раз применялась и как эта команда.
Много! Но в основном перки и способности.
И снова спасибо SpalnyVagon за очередное обучение и объяснение.
Пока.

0

300

Господин К., Поожарная каска Вам не поможет, т.к. у меня главное лекарство для запоминания не учебником по голове, а пальцы в дверь.

0


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