как вырубить в моем мире музыку?в смысле у меня есть арена,я туда напихал кнопок с своей музыкой,как только вызываю противника,моя музыка обрывается и начинается стандартная комбат музыка..
Для начала, выставь на своей музыке приоритет "1" (это максимальный) и добавь там условия "если ГГ в конкретной локации" (т.е. в твоей локации).
То есть можно дефолтные предметы просто кнопкой "Delete" удалять и даже не отвязывать их от Х-маркера? Краша игры не будет? (Это облегчит мою работу если что)
Можно удалять, СТД не будет.
********** Или я сегодня совсем туплю или уже затупился в корень... Но я не могу найти этих удалённых вещей в СК, причём в дефолте. Где ты их нашёл, чтобы удалить?
Да, действительно эти объекты сваливаются в кучу. Но после посещения этой локации и перезапуске игры - они пропадают. Не видел раньше такого эффекта (никогда не удаляю дефолтные предметы, особенно связанные с квестами). Он похож на баг со скелетами убитых драконов, когда они появляются около места телепортации ГГ. Поищу варианты борьбы с этим эффектом.
Как эрзац решения: 1. Initial Disabled 2. Убрать за пределы видимого пространства, под уровень.
Это лучший выход.
BileraON, в твоём варианте желательно сперва отвязать эти предметы от маркера, а потом п.1 или п.2 или лучше оба сразу.
************ Как выяснилось, виновата опять сохранка. При инициализации локации все эти предметы были выключены через парент-маркер, и это прописалось в сохранке, поэтому при отработке маркера движок включает выключенные парентом объекты, и без разницы, удалены они твоим модом или нет. Потом он эти объекты складывает в "географический" центр локации (0.00, 0.00, 0.00). При любых вариантах галочек, отвязки или привязки, ресете и т.д. - этот процесс всё равно будет. В принципе, при начале новой игры такого эффекта может и не быть. *** *** Хотя, есть пара вариантов, как удалять такие лишние объекты (но делать этого не надо, это полная глупость, хоть и работает): 1. Выделить всё помещение и сдвинуть его выше нулевой отметки на 300-500 (и навмеши с маркерами дверей тоже). 2. В отметке 0.0 0.0 0.0 поставить триггер на уничтожение попадающих туда предметов, включается уничтожение на несколько секунд при загрузки локации.
ребят никак нпс не хотят ходить как нужно.. средний встаёт как вкопанный и утыкается носом в сторону верхнего и нижнего. как навмешами не играл, маркеры не переставлял без результата..
Ты хоть расскажи: какие пакеты используешь и как именно, как сделана сама локация и т.д.
два верхних работают как нужно - появились и побрели по связям от маркера к маркеру, а вот средний - появился пошел к своему первому маркеру а дальше разворачивается и встаёт напротив тех маркеров что находятся этажами выше и ниже.
onActivate(objectReference actronaut) - это событие, а не команда.
Если тебе хочется, чтобы кто-то кого-то активировал, то надо так: akActor.Activate(akAtorActivator)
actronaut.Activate(triggered_object)
actronaut - актёр, которого активируют (второй актёр) triggered_object - актёр, который активирует другого актёра (первый актёр, который прошёл через триггер)
честно говоря синхронизировать работу нпс регулировкой времени работы на маркере вкладкой patrol data у меня не вышло...((( думаю синхронизировать через скрипт...
Для таких целей в СК есть механизм - сцены. Вот на них и будет полная синхронизация действий всех нужных актёров.
А где вообще выставляется само положение оружия относительно оружейной стойки (Допустим если я хочу, его немного поднять-опустить или сдвинуть влево-вправо)?
Положение оружия выставляется в нифе активатора этой стойки. У стойки 3 элемента - деревянная рама статик, деревянный держатель активатор-триггер, маркер-бокс активатор. На маркере-боксе скрипт, в нём можно перназначить "Node" на другой тип оружия, и тогда, например булава, может занять положение топора. Но гораздо лучше отрегулировать сами "Node" в нифе держателя WeaponRackMidPlayerHouse. Так Node булавы можно перевернуть и выставить нужное положение по всем координатам. Там же можно и все остальные типы оружия отрегулировать.
Для этого надо открыть NifSkope и там в соответствующем Node поменять данные (координаты и углы). Потом или сделать свой активатор с этим нифом, или положить в дефолтную папку в Data\Clutter\WeaponRack\WRSingle01.nif, тогда этот заменит дефолтный ниф (файлы в папках имеют приоритет над BSA).
http://yadi.sk/d/TNa-E97M9nChK Это уже перевёрнутый и более-менее отрегулированный держатель. Можешь при желании сам выставить нужные координаты.
как в скрипте написать управление параметром patrol data у маркера??
Никак. Нет возможности влиять на эти параметры извне. К тому же, в каком скрипте? В результирующем скрипте Patrol Data этого не сделать, это окно нерабочее. Сама процедура Patrol имеет окончание (даёт событие окончания пакета) только при достижении последнего маркера в цепочке, а не на всех промежуточных маркерах. Т.е. отследить по событию "дошёл до этого маркера" нельзя. Хотя, можно отследить такое, но только при использовании не Patrol, а Travel. Можно сделать свой пакет с несколькими последовательными процедурами Travel (по всем маркерам пути), и тогда через условия на самих процедурах можно регулировать сами эти процедуры. (как бы имитация сцены)
Если это слишком сложно, то попробуй через время ожидания на маркере в Patrol Data. Т.е. Первый НПС дошёл до этого маркера и стоит ждёт №время, пока второй НПС не подойдёт к своему маркеру (чисто опытным путём вычислять это время).
А есть какие то мысли как это исправить? Сейчас у меня категорически отказывается вешаться "Молот Стражи Рассвета", и Эбонитовый клинок и еще было оружие, которое не вешалось(сейчас не вспомню)
Проверил молот стражей... действительно не хочет висеть, гад такой. Как исправить пока не знаю, но посмотрю, что можно сделать. (эбонитовый меч висит нормально)
Да, мефаловский клинок тоже не висит. Сдаётся мне, что сие не исправить "малой кровью", надо править сами модели в Максе. Все "невесячие" предметы имеют разнос центров от базового Node, зачем такое сделано, не понятно. Модели без такого разноса висят нормально. Вот с правкой моделей я не помогу, в Максе не работаю. (возможно, есть другой способ борьбы с этой бякой, но пока он неизвестен)
А в нормальном оружии как? Что бы я товарищу показал на сравнении двух скриншотов, а то боюсь он такого чайника как я не поймет
Не торопись показывать, дело не в моделях/нифах, а скорее всего в Папирусе. Если удалить скрипт с оружия, то оно прекрасно вешается. Пока ясно только то, что некоторые функции возвращают не те значения, т.е. некорректно работает или Папирус, или сам СК так создаёт оружие.
AleksTirex, не знаю, поможет или нет. Большой орочий топор на стойку тоже не вешается. Помню, столкнулся с этим пол года назад, когда возился с оружием орков в своём моде "Кольценосцы". Было давно, сейчас деталей не помню, но проблему решил правкой НИФа. Сейчас залез туда посмотреть и обнаружил, что я там отключил NiTransformController.
С орочьим топором - это частный случай с "кривым" нифом. А вот все остальные не вешаются из-за самого принципа скрипта стойки: из инвентаря ГГ выбрасывается экипированное оружие командой Drop, при этом данная команда возвращает референс выброшенного оружия, потом команда референс.MoveToNode(стойка), и оружие висит на стойке. Так вот, скриптованные модели не отдают референс (точнее совсем криво отдают), поэтому просто невозможно применить к этому референсу команду "повесить на стойку". Этот референс не отдаёт FormID, поэтому ни одна функция/команда не срабатывает применительно к объекту или оружию.
Я конечно, поищу варианты переделки дефолтного скрипта, а вот нифы оружия ковырять надо только в том случае, если оружие простое не скриптованное.
Добавлено (25.09.2013, 19:54) --------------------------------------------- Вопрос с "невисячим" оружия решил, теперь всё оружие будет помещаться на стойку. Пришлось переделать дефолтный скрипт и добавить один свой. Если кому интересно, то вот так это делается:
В любом своём квесте делается алиас с ID/названием akAliasDrop типа Specific Reference и ставится галочка Optional. На алиас вешается скрипт с ID/названием aAliasDropObjectScript
; ...and doesn't have a dagger then place the weapon.
PlayersDroppedWeapon = StartingWeapon
HandleWeaponPlacement(TRUE)
endif
elseIf (RackType == 2)
; If this is a shield rack...
if StartingWeapon.HasKeyword(ArmorShield)
PlayersDroppedWeapon = StartingWeapon
HandleWeaponPlacement(TRUE)
else
;don't do anything
endif
elseIf (RackType == 3)
; If this is a COA weapon rack...
if StartingWeapon.HasKeyword(WeaponTypeDagger)
;Don't do anything
elseif StartingWeapon.HasKeyword(ArmorShield)
;Don't do anything
elseif StartingWeapon.HasKeyword(WeaponTypeBow)
;Don't do anything
else
; ...and doesn't have a dagger then place the weapon.
PlayersDroppedWeapon = StartingWeapon
HandleWeaponPlacement(TRUE)
endif
endif
EndFunction
И не забудьте в активаторе назначить ваш созданный алиас в Properties ID надо назначать именно такие, а если ID хотите свои, то надо их будет заменить и в самих этих скриптах (в одном скрипте ссылки на другой скрипт). На всякий случай исходники а архиве http://yadi.sk/d/yDzgLDZy9st8y
AleksTirex, а подскажи пожалуйста,как сделать,чтоб при активации одной музыки выключалась другая?у меня несколько рычагов с разными композициями и если одна уже играет,то другую я смогу включить лишь после окончания первой.
int instanceID instanceID = mySound1.Play(self) ; включаем музыку №1 ; музыка №1 играет Sound.StopInstance(instanceID) ; выключаем музыку №1 instanceID = mySound2.Play(self) ; включаем музыку №2 ; Sound.StopInstance(instanceID) ; выключаем музыку №2
попробовал и откомпилировать все скрипты и просто вынуть их из скайримовского архива
Не надо компилировать скрипты, их не должно быть в папке Scripts, движок пользуется файлами скриптов из BSA архива, СК тоже так делает. В той папке лежат только добавленные модами скрипты. Свойства прописываются в ESP/ESM, а не в файле .pex
Поэтому наличие или отсутствие файлов скрипта не может дать вылета.
какой оператор даёт нпс в скрипте стоять на месте и ждать? а также какой оператор даёт команду продолжать движение?
Такого "оператора" нет. Можно командой заставить НПС прекратить перемещение, но это будет не красиво смотреться. НПС перемещается согласно процедуре действующего пакета, и стоит на месте тоже согласно процедурам. Но если ни одна процедура не может сработать из-за условий на ней, то НПС просто останется стоять на месте (типа в непонятке, что надо делать). Вот этим свойством можно и воспользоваться: Открываешь действующий пакет НПС, если он свой, а не дефолтный, Package Template выставляешь None, и тогда будет возможность редактировать этот пакет. В окне Procedure Tree в самом верхнем бранче прописываешь условие, например "этот НПС в ... фракции == 0" . И тогда если НПС назначить эту фракцию, то он просто остановится на месте, т.к. ни одна процедура не запустится. (время на пересмотр процедур и остановку ~ до 2-5 секунд)
С галочкой автозапуска квеста диалоги появляются только после сохранения и перезапуска игры. Поэтому надо снимать эту галочку (как показал mayor на скрине) и делать запуск по событию или свой скриптовый автозапуск. Для этого надо просто повесить на квест скрипт:
Scriptname имя_квеста_Script extends Quest
Event OnInit() if !isRunning() Start() endif endEvent
Это аналог галочки автозапуска квеста (галочку автозапуска надо обязательно снимать). Тогда диалоги будут сразу появляться при первом запуске игры без всяких перезагрузок. (не забывая написать своё имя/название скрипта)
***************** Так же проверь правильность создания самого диалога и условий на топике.
Прошу прощения, это я по запарке лажу написал, ведь OnInit() не совсем событие, поэтому не работает внутри статуса. Я там исправил (в предыдущем посте), работать будет.
можно ли сделать так что бы когда ГГ умирает он как бы телепортировался в другое место? Ну например довакин умер и вместо загрузки сохранения я бы появлялся в какой либо местности (которой я захочу)?
Когда ГГ умирает, то игра автоматически заканчивается и сама загружает последнее сохранение. Сделать же "отмену" смерти ГГ нельзя. Все данные с момента последнего сохранения однозначно пропадут. Хотя, если этот факт "пропажи" не слишком смущает, то в принципе, можно попробовать сделать при автоматическом старте последнего сохранения (а именно так делает игра при смерти ГГ, если не ошибаюсь) перемещение ГГ в нужную локацию. В общем, пробуйте такое.
можно ли сделать так что бы когда ГГ умирает он как бы телепортировался в другое место? Ну например довакин умер и вместо загрузки сохранения я бы появлялся в какой либо местности (которой я захочу)?
Делается в своём квесте алиас с назначенным на него ГГ, ставится галочка Essential. На алиас вешается скрипт:
ObjectReference Property akMarker Auto ; маркер, куда должен телепортироваться ГГ
у меня почему то при взятии предмета (т.е. получил в инвентарь) стадия квеста также не меняется
Так с чего стадия должна измениться? Движок игры пока не обладает телепатией, ему надо сообщить, что если в определённый инвентарь попадает определённый предмет - то стадия должна смениться.
********** Кстати, ни один из читающих эту тему тоже не обладает телепатией, и поэтому никто не скажет, почему у тебя "при взятии предмета стадия не меняется".
разъясняю: 1) гг подходит к нпс1 берёт квест - в топике скрипт SetStage(10) 2) понимает что нужно найти нпс2 и мы двигаемся в его поиске - 3) должен подойти и поговорить после чего нпс даёт вещь - топике нпс2 условие GetStage == 10 и скрипт SetStage(20) + ГГ.AddItem(вещь, 1) 4) возвращаемся к нпс1 и отдаём вещь - топике нпс1 условие GetStage == 20 & GetItemCount ID_вещь > 0, и скрипт SetStage(30) + ГГ.RemoveItem(вещь, 1, false, akSpeaker) + akSpeaker.EvaluatePackage() 5) нпс1 дёргает за рычаг - у нпс1 пакет Activate с условием GetStage == 30 в пакете или на нпс1 скрипт "по окончании пакета Activate - SetStage(40) финал. квест закончен
Как дёргать рычаг - посмотри на НПС в самом первом квесте игры "Золотой коготь", там в руинах бандит перед ГГ дёргает рычаг и его убивает стелами.
читаю алекс.. только если посмотреть по выше то будет видно что некоторые вопросы повторяются.. а видео практически с вики и сделано...
Проблема не том, с чего сделано видео, а в том, что вырабатывается шаблонное мышление. И когда в работе возникает расхождение с "видео шаблоном", то сразу ступор - "а что мне делать, ведь на видео было так, а мне надо иначе". Учитесь думать самостоятельно. На форуме люди только подсказывают и дают наводки, в каком направлении надо повернуть свою мысль, а уж реализовывать её надо самому. Хотя, дело хозяйское, как и что делать, я только советую, не более.
вкладка Quest Stages: index Log Entry kmyQuest ------------------------------------------------------ 10 найти нпс2 и получить вещь SetObjectiveDisplayed(10)
------------------------------------------------------ 30 вещь получена надо отдать нпс1 SetObjectiveCompleted(10) SetObjectiveDisplayed(30) ----------------------------------------------------- 40 SetObjectiveCompleted(30) AliasNPC1.TryToEvaluatePackage() (надо сделать свойство AliasNPC1 и назначить на него свой алиас нпс1, а потом писать команды скрипта) нпс1 согласно пакету пойдёт дёргать рычаг на рычаге (тебе так будет проще) скрипт OnActivate с условиями: "стадия №40" и "akActivator == ID_нпс1" там команда myQuest.SetStage(50) и телепортация ГГ. ( сделать свойство myQuest и назначить на него свой квест) ------------------------------------------------------ 50 конец (галочки Shut Down Stage и Complete Quest)
вкладка Quest Objectives: - index Display Text Target Ref 10 найти нпс2 получить вещь нпс2 30 отдать вещь нпс1 ---------------------------------------------------------------- вкладка Quest Aliases: - Name type Fill нпс1 ref uniqeActors нпс2 ref uniqeActors вещь ref Created ********************************************** вещь-Created естественно, назначив ID своей вещи
топики - блок №1 (оранжевый), в нём топики: - топик №1 getStage - quest < 10 GetIsId - нпс1 == 1 - топик №2 "нет" GetIsId - нпс1 == 1 - топик №3 "да" GetIsId - нпс1 == 1 - скрипт: GetOwningQuest().SetStage(10) ----------------------------------------------------------------- блок №2 (оранжевый), в нём топики: - топик №1 getStage - quest == 10 GetIsId - нпс2 == 1 - скрипт: GetOwningQuest().SetStage(30) akSpeaker.RemoveItem(AliasItem.GetRef(), 1, false, Game.GetPlayer()) - (надо сделать свойство AliasItem и назначить на него свой алиас вещи, а потом писать команды скрипта) ------------------------------------------------------------------------------- блок №3 (оранжевый), в нём топики: - топик №1 getStage - quest == 30 GetIsId - нпс1 == 1 - скрипт: Game.GetPlayer().RemoveItem(AliasItem.GetRef(), 1, false, akSpeaker) GetOwningQuest().SetStage(40) - (надо сделать свойство AliasItem и назначить на него свой алиас вещи, а потом писать команды скрипта) ****************************************************** - топик №3 (из тп №2) - это совсем не понятно, но если это связь топиков, то не правильно.