Evil
Привет! Да действительно можно не понять - надо дописать, что внутри дома.
Спасибо!
Пока
Вопросы по скриптам в Fallout 3
Сообщений 271 страница 300 из 418
Поделиться2712011-05-26 18:12:58
Поделиться2722011-05-26 18:58:15
K.A.I.N., проблема все еще актуальная (хотя только теоритически, нужно обязательно проверить)
Боюсь, что в варианте K.A.I.N. игрок выйдет голым из дома, ибо если изнутри дверь активировать, стоя в триггере - все заберется.
Вот смотри. Сделал ты дома все что нужно, хочешь уходить. Триггер стоит прямо перед самой дверью внутри дома таким образом, что игрок не может его обойти. И получается, что триггер активируется, когда игрок в нем стоит (теоритически, конечно. Но по идее триггер должен будет успеть сработать). В итоге все вещи заберутся, а игрок выйдет из дома голым.
Отредактировано Evil (2011-05-26 18:58:36)
Поделиться2732011-05-26 19:03:34
K.A.I.N.
ООО.Да.Спасибо большое.
Поделиться2742011-05-26 19:19:33
Evil
Согласен! Надо триггер отодвинуть от выходной двери. Но увы я смог только так - думаю если SpalnyVagon зайдёт он подправит и подскажет, как быть с одеждой для дома.
Я пробовал player.AddItem OutfitPrewarSpring 1 и затем player.EquipItem OutfitPrewarSpring 1 дать одежду и одеть. Работает. И на двери снимается.
Но ведь может быть так, что "хитрый" игрок захочет снять её сам и оставить дома, а придя во второй раз снова получит комплект. И начнёт на этом зарабатывать деньги! Входить, снимать - выходить. А потом на рынок!
Пробовал и с квестовой одеждой. Но одетая при входе, она уже больше не снимается. Кстати надо проверить - может и снимаеться, но только спец. командой.
Пока.
Отредактировано K.A.I.N. (2011-05-26 19:20:58)
Поделиться2752011-05-26 20:58:47
Любопытный момент. Ни о чем таком сложном автор вопроса не просил. В частности, он не просил изымать все вещи у ГГ каждый раз, как тот заходит, и не просил ничего ему выдавать на выходе. Но возникла интересная дискуссия. Спасибо за приглашение, подключаюсь.
"хитрый" игрок захочет снять её сам и оставить дома, а придя во второй раз снова получит комплект
А вы ее выдавайте только один раз (введите переменную, которая будет считать выданные комплекты).
пробовал player.AddItem OutfitPrewarSpring 1 и затем player.EquipItem OutfitPrewarSpring 1 дать одежду и одеть. Работает. И на двери снимается.
Формат команды equip:
[ActorRefID].EquipItem ObjectID:ref NoUnequipFlag:int{0, 1} HideEquipMessage:int{0, 1}
Если флаг NoUnequipFlag установлен, то такую одежду уже ни игрок ни другие актеры самостоятельно снять не смогут (только скриптом).
EvilСогласен! Надо триггер отодвинуть от выходной двери.
Триггер в любом случае надо отодвигать от двери, точнее от маркера телепорта. Иначе при перемещении в интерьер могут получаться битые автосейвы.
Поделиться2762011-05-26 22:04:29
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!
Вот я и закинул удочку, придёт и расскажет!
А если серьёзно - мне бы пример, какой нибудь проверки - например
Есть броня и есть аккумулятор в рюкзаке.
Как выполнить проверку, что именно эта броня станет крепче, если у игрока одет рюкзак, а рюкзак не оденется. если не одета именно эта броня.
Ну это я так, к слову! А может и нет.
Пока.
Поделиться2772011-05-26 22:35:18
Как выполнить проверку, что именно эта броня станет крепче, если у игрока одет рюкзак, а рюкзак не оденется. если не одета именно эта броня.
А зачем аккомулятор?
Проверка условия "на игрока надето":
Player.getEquipped [ObjectID]
что именно эта броня станет крепче
Одеты ли именно эти предметы (броня + рюкзак) определить не сложно, а вот как сделать, чтобы броня меняла по ходу дела свои свойства, я не знаю.
Отредактировано SpalnyVagon (2011-05-26 22:36:10)
Поделиться2782011-05-26 22:36:53
Что мешает броню подменить?
Отредактировано Evil (2011-05-26 22:37:08)
Поделиться2792011-05-26 22:44:00
чтобы броня меняла по ходу дела свои свойства
Можно например выводить сообщение с выбором.
Одел броню - ничего не произошло. Как только одел рюкзак - вылезло сообщение, а в нём выбор
1 увеличить скорость
2 Увеличить защиту (например за счёт снижения скорости)
3. и тп.
Можно подменой брони (защита)
Скорость просто командой (как в консоли) наверное должно быть такое.
Примерно так
Поделиться2802011-05-27 00:04:39
Что мешает броню подменить?
Корявенько будет смотреться. Звук одевания, звук раздевания, время так же требуется на все эти шаманства. Проще добавлять игроку здоровья (та же функция, что и для увеличения скорости).
Поделиться2812011-05-27 13:37:24
Привет всем!
Сделал так для рюкзака (шлем)
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)
Поделиться2822011-05-27 15:05:18
if (Player.getEquipped AAAKainArmor == 0) ; проверка какая броня одета
Player.UnequipItem AAAKainHelmet ; не даём одеть рюкзак
ShowMessage "YourMessageID" ; сообщение "Разъёмы для подключения не обнаружены"
endif
Этот блок выполняется в каждом фрейме, следовательно сообщение будет лезть постоянно.
Попробуйте не с "чужой брони" рюкзак снимать, а снимать его и выдавать сообщение, если была предпринята попытка надеть его не на "свою" броню. Примерно так (скрипт висит на рюкзаке):
begin onEquip player
if player.getequipped [броня] == 0
player.unequipitem [рюкзак]
showmessage [разъем не подходит]
end
Поделиться2832011-05-27 15:11:46
SpalnyVagon
Привет! Я уже попробывал на самом деле постоянно сообщение вылазит. Убрал и из GECK и из сообщения (наверное зря из сообщения убрал - сейчас назад допишу) и теперь думаю, как быть.
Теперь уже не думаю!
Испытал твой вариант. Действительно получше. Во первых сообщение появляется в инвентаре, и тем самым отвлекает внимание от надписи "Шлем снят"
Да и меньше в нём написано - то же плюс.
Отредактировано K.A.I.N. (2011-05-27 15:27:15)
Поделиться2842011-05-27 17:54:41
отвлекает внимание от надписи "Шлем снят"
Формат команды unequipitem точно такой же как и у equipitem, убрать флаг соощения, и оно не будет появляться вообще.
Поделиться2852011-05-28 07:16:09
Привет всем!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)
Поделиться2862011-05-28 11:07:17
Чего в моём 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)
Поделиться2872011-05-28 13:43:18
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
И не понял.
Спасибо, что помогаешь.
Пока.
Поделиться2882011-05-28 20:20:56
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щё бы вывести всё это за Пип-бой, как бывает при активации предметов с выводом сообщения и выбором кнопок. Надо посмотреть как делают оружие со сменой стрельбы (вроде через клавиатуру).
Пока.
Поделиться2892011-05-28 21:27:52
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
Поделиться2902011-05-28 22:10:21
SpalnyVagon
Вроде понял!
Раз броня может быть только одета или снята. Значит одна из двух проверок всегда не верна. Значит сообщение будет выведено - только для той условия которой выполнены.
Поэтому и объединил в один блок, и если бы ещё были перчатки - то из можно было сюда же ввести ещё одним условием. А сапоги четвёртым и так сколько нужно.
Ну всё! Большое дело сделали. Ура.
Спасибо.
Пока.
Поделиться2912011-05-31 13:45:41
Привет всем! Тысяча извинений если вопрос не в тему, но вот:
Как привязать использование предмета (не активатора,а еды,лекарств и пр.) к началу квеста\переходу на следующую его стадию?
Заранее спасибо
Поделиться2922011-05-31 15:38:05
Как привязать использование предмета (не активатора,а еды,лекарств и пр.) к началу квеста\переходу на следующую его стадию?
А более подробно? Игрок употребляет лекарства и др. Ingestible не совсем так же, как другие НПС.
Поделиться2932011-05-31 17:42:51
Игрок употребляет некий препарат, после этого начинается квест. Сначала попробовал создать условие в квесте (GetIsUsedItem), но не вышло.
А сейчас решил повесить на этот предмет скрипт. Столкнулся с двумя проблемами:
1. Не знаю имени функции, которая вызывается при использовании предмета
2.В скриптах я чайник... Но вот сейчас набросал это:
scn [i]имя скрипта[/i] begin [i]имя этой самой неизвестной мне функции[/i] setstage [i]имя квеста[/i] 10 End
Теперь имеется две просьбы: подскажите имя функции (найти нигде не могу! )
Если криво написал "скрипт" (если это можно так назвать) - пожалуйста,подправьте.
Поделиться2942011-05-31 19:24:45
подскажите имя функции (найти нигде не могу!
Там должно стоять название блока, а не функции. Какие бывают типы блоков можно посмотреть в учебнике.
Поделиться2952011-06-01 11:17:52
Привет всем!
Я посмотрел, что написал 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)
Поделиться2962011-06-01 12:21:41
Верхняя часть блок 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
Однако это будет работать только если это пиво есть в одном экземпляре это раз. А два - подсчет количества пива не вариант. Потому что игрок может его не только употребить, но и банально выкинуть. Однако для того чтобы он не сделал подобную глупость, можно это пиво сделать квестовым предметом - тогда игрок не сможет его выкинуть. Хотя не уверен что он в этом случае и выпить его сможет... В общем подсчет количества предметов в инвентаре для данной ситуации не катит.
Поделиться2972011-06-01 12:23:18
Что не так и где! Только про МОЗГ и Учебник не надо- пожалуйста!
Как говаривал Шурик из Операции Ы, надо, Федя, надо!
Но сообщение появляется сразу при старте игры (стадия меняется) - бутылки в инвентаре нет.
При старте игры у игрока еще ничего нет, естественно он и получит сообщение, как в Вашем нижнем блоке и предписано:
if (player.GetItemCount AAAKainBeer == 0)
SetStage AAAKainQuest 1
И вообще все это сделано слишком топорно. Добавили бутылку, выпили бутылку...
Ref MyItem
set MyItem to AAAKainBeer
if (player.GetItemCount AAAKainBeer == 0) это и вовсе лишнее, ведь бутылка наверняка квестовая и уникальная, зачем усложнять определение наличия ее у игрока?
И так далее. Не буду дальше разводить критику, но ЭТО никуда не годится. Это скорее эксперименты с серой, углем и селитрой (рванет или нет?), а не решение интересной задачи.
Ребята, вы зря игнорируете базовые знания, доступные всем желающим. Учебник написан русским языком, и вам не потребуется супер-мозг, чтобы понять, о чем там речь. И не надо про то, что у вас слабое зрение а букаф вы не всех учили. Хотите освоить это дело - учите матчасть. У меня учебник и список скриптовых команд с описанием из вики лежат на рабочем столе.
На самом деле задача довольно простая. Для ее решения нужно вспомнить, что такое магические эффекты и типы блоков для них.
После этого открываем ГЕКК и создаем новый базовый эффект, тип эффекта - script
Сам скрипт коротенький, (тип - магический эффект, или как он там называется, не помню, короче не квест и не объект):
begin onScriptEffectStart
[то, что мы хотим получить]
end
Следующая стадия - создаем объект, при распитии которого начинается запланированное действо, например бутылка особой ядер-колы. Берем обычную ядер-колу, даем ей новое имя, а в списке эффектов добавляем еще один - тот, который мы предварительно создали.
На этом все.
Поделиться2982011-06-01 13:28:09
SpalnyVagon, об этом я вчера думал, но неожиданная гроза заставила выключить комп. Спасибо за подтверждение идеи!
SpalnyVagon,K.A.I.N. , Igor_Ra, спасибо за внимание к моей проблеме!
Поделиться2992011-06-01 18:49:50
Привет всем!
На самом деле задача довольно простая
Я выполнил эту задачу. Действительно не особо сложно.
Самое главное при создании скрипта отметить его как Effect
А потом создав новый effect в Base Effect этот скрипт можно будет выбрать вот здесь
Назвать его, добавить описание в нижнем правом углу! Выставить нужные флаги.
Ну а затем уже на бутылке (хоть на чём) добавить новый эффект. Вот тут. И снова выбрать свой скрипт.
Но вопрос этот на самом деле интересный, там столько всего можно сделать. Я даже посмотрел в Fallout сколько раз применялась и как эта команда.
Много! Но в основном перки и способности.
И снова спасибо SpalnyVagon за очередное обучение и объяснение.
Пока.
Поделиться3002011-06-01 19:47:37
Господин К., Поожарная каска Вам не поможет, т.к. у меня главное лекарство для запоминания не учебником по голове, а пальцы в дверь.