может все же дублировать...а то удалять как то стремно
Та ради работы моего ненаглядного мода ничего не жалко ! (тем более что копировать всё равно некуда, объект коллизий для камеры имеет строго заданное имя, поэтому копия с другим именем просто ни на что влиять не будет)
А теперь отчёт о проделанной работе: - опыт с очисткой списка коллизий камеры завершился полной победой разума над окружающей действительностью !!! Теперь камера проходит сквозь объекты как по маслу и не взаимодействует с ними !
Так что по большому счёту мод уже готов. Теперь осталось самое нудное - проверка его работы в реальных условиях и выявление "особенностей" ... не найдётся ли желающих помочь мне в этом деле ?
(одну "особенность" я уже споймал - моя формула расчёта времени не очень хорошо работает на очень маленьких или очень больших дистанциях до цели, так что с коэффициентом придётся ещё немного поработать ...)
PS: немного подправил, теперь если движение камеры будет в радиусе до 2000 юнитов, всё будет плавненько. (для справки: высота НПС где то 120-130 юнитов)
ребят... уже задолбался с маркерами и навмешом... создал сетку, финализировал, поставил маркеры, связал их... нпс доходит до какого то маркера и после него встает как вкопанный... хорошо.. начинаю двигать маркер тем самым проталкивать нпс. до какойто точки он всё таки проходит. изменяю навмеш.. нпс идёт дальше.. но пути то 2 то там нарушится то там..
Добавлено (11.09.2013, 23:52) --------------------------------------------- не понимаю я расчет пути навмешов!.. два маркера связаны с друг другом стоящие рядом в 2х треугольниках навмеша друг от друга! просто от одного до другого дойти по этим треугольникам и всё! нет какого то фига прётся по десятку треугольников в обход! что за фигня??
Изменение репутации для пользователя BileraON
BileraONOffline
Сообщение №5496
написано: 12 сентября 2013, 18:20
| Отредактировано: BileraON - 12 сентября 2013, 18:29
Парни сори за повтор, но я не могу дальше делать мод пока не найду ответ на свой вопрос:
Всем доброго времени суток!
Парни у меня опять проблема с манекеном теперь уже с другим.
Короч, в Форте Стражи Рассвета в комнате игрока, я вашей помощью, одел дефолтный манекен и удалил у него дефолтные вещи - здесь все чин по чину.
Далее я создал свой манекен рядом с дефолтным, проверил - все работает. Далее хочу его одеть через Quest - фиг там, вещи в манекен добавляются, а сам манекен их не одевает (если их самому взять и дать вещи он их оденет, а через квест не хочет):
Могу еще добавить, что когда я в "Quest" добавляю оружие (у меня стоит "Mannequin Script") то оружие манекен - берет, а одеваться не хочет? Еще (может это прояснит ситуацию) я привязал созданный манекен к Х-маркеру, к которому дефолтный манекен привязан - может здесь собака порылась?
Ребят столкнулся с другой проблемой, пытаюсь изменить мод Hideout (заменить 3 маникена на 9 поменьше и повесить сзади флаги городов) как только я это делаю и сохроняю мод его больше не видит программа СК и в игре разумеется ничего нет.... в чем проблема?
У мня один раз СК выдал не полны список возможный к загрузке esp/esm в окне Data. Это было связано с тем что в названии новодобавленного мода присутствовала буква немецкого алфавита. Вы случайно не называли мод по русски? Я так делать не пробовал.
Изменение репутации для пользователя alexwar
alexwarOffline
Сообщение №5499
написано: 13 сентября 2013, 04:57
| Отредактировано: alexwar - 13 сентября 2013, 04:57
ESM редактировать средствами СК нельзя. Можно сделать ESP который будет пере записывать что-то в ESM
Подключите этот ESM в качестве ресурса(при загрузке отметьте ESM крестиком и жмите Ок.) и сделайте новый мод(то есть не надо нажимать Set as Active File).
ПС возможно тот ESM что был в папке Data вы уже испортили(на это указывает что нет ячейки). Так что его стоит заменить из архива исходного мода.
Могу еще добавить, что когда я в "Quest" добавляю оружие (у меня стоит "Mannequin Script") то оружие манекен - берет, а одеваться не хочет?
И не будет сам одевать, это надо делать принудительно. Например: манекен.AddItem(akSmotka1) манекен.EquipItem(akSmotka1) манекен.AddItem(akSmotka2) манекен.EquipItem(akSmotka2) ... и т.д. Т.е. после добавления шмотки манекену её надо на него одеть.
Изменение репутации для пользователя BileraON
BileraONOffline
Сообщение №5506
написано: 13 сентября 2013, 14:05
| Отредактировано: BileraON - 13 сентября 2013, 14:06
И не будет сам одевать, это надо делать принудительно.
Например:
манекен.AddItem(akSmotka1)
манекен.EquipItem(akSmotka1)
манекен.AddItem(akSmotka2)
манекен.EquipItem(akSmotka2)
...
и т.д.
Т.е. после добавления шмотки манекену её надо на него одеть.
Что то я совсем запутался . Почему тогда у меня получилось одеть через "Quest" дефолтный манекен, а мной созданный не одевается? Все делал как мне сказали (Сообщение №5341 - страница №357). А принудительно одевать это имеется ввиду вешать скрипт на манекен на одевание вещей? Если это аналогично тому как мы удаляли дефолтные вещи из манекена, может напишите мне полный текст скрипта , пожалуйста, а я попробую сам этот скрипт повесить на манекен, как вы меня учили
Так и не могу разобраться с квестом. Не понимаю. Опыт 1. Создала перк. Создала квест. Написала для перка скрипт. Скомпиллировала, прицепила скрипт к перку и квесту, указав что нужно в properties. Квесту прописала условие старта Start Game Enabled либо Change Location Event. Запускаю игру - и ничего. Принудительно стартую квест консолью - снова ничего. Ни одного отладочного месседжбокса, перк, само собой, не работает. Скрипт на перк:
Perk Property aaaAlliriaMaterialPerk auto bool Function HasPerk(Perk aaaAlliriaMaterialPerk) native
Event OnReset(Actor akActor) If(akActor.HasPerk(aaaAlliriaMaterialPerk)) akActor.RemovePerk(aaaAlliriaMaterialPerk) Debug.MessageBox("Perk was removed from missed Actors on reset") endIf EndEvent
Event OnCellLoad(Actor akActor) akActor.AddPerk(aaaAlliriaMaterialPerk) Debug.MessageBox("Perk was added to Actors") EndEvent
Event OnCellAttach(Actor akActor) If(akActor.HasPerk(aaaAlliriaMaterialPerk)) Debug.MessageBox("Perk has been Added to Actors already") ElseIf(akActor.HasPerk(aaaAlliriaMaterialPerk)) akActor.AddPerk(aaaAlliriaMaterialPerk) Debug.MessageBox("Perk was added to missed Actors") endIf EndEvent
Event OnCellDetach(Actor akActor) If(akActor.HasPerk(aaaAlliriaMaterialPerk)) akActor.RemovePerk(aaaAlliriaMaterialPerk) Debug.MessageBox("Perk was removed from Actors") endIf EndEvent
Ладно, подумала я. Значит, действительно нельзя прицепить работающий перк на актора через квест. Опыт 2. Делаю то же самое, но через абилку. Т.е. создаю перк. Создаю новый маг.эффект. Создаю спелл-абилку. Вещаю перк скриптом на маг.эффект, маг.эффект на абилку, абилку вешаю скриптом через квест (условия запуска те же). Опять ноль эффетка, ни одного отладочного месседжбокса. Значит, не отрабатывает скрипт на добавление спелла акторам. Почему? Через квест можно добавлять только игроку и акторам, для которых в данном квесте прописаны Alias? Тогда как решить простую в общем-то задачу прицепить на всех акторов в локации спелл/перк при загрузке локации, не прибегая к триггерам? Скрипт на добавление перка в эффекте:
Spell Property AbAlliriaMaterialAbility auto bool Function HasSpell(Spell AbAlliriaMaterialAbility) native
Event OnReset(Actor akActor) If(akActor.HasSpell(AbAlliriaMaterialAbility)) akActor.RemoveSpell(AbAlliriaMaterialAbility) Debug.MessageBox("Spells were removed from missed Actors on reset") endIf EndEvent
Event OnCellLoad(Actor akActor) akActor.AddSpell(AbAlliriaMaterialAbility) Debug.MessageBox("Spells were added for Actors") EndEvent
Event OnCellAttach(Actor akActor) If(akActor.HasSpell(AbAlliriaMaterialAbility)) Debug.MessageBox("Spells have been Added for Actors already") ElseIf(akActor.HasSpell(AbAlliriaMaterialAbility)) akActor.AddSpell(AbAlliriaMaterialAbility) Debug.MessageBox("Spells were added for missed Actors") endIf EndEvent
Event OnCellDetach(Actor akActor) If(akActor.HasSpell(AbAlliriaMaterialAbility)) akActor.RemoveSpell(AbAlliriaMaterialAbility) Debug.MessageBox("Spells were removed from Actors") endIf EndEvent
№1 Сделать квест с запуском по событию Change Location Event, это делается так:
1. Сделать свой квест с запуском по событию Change Location Event. 2. В разделе SM Event Node зарегистрировать свой квест. 3. Для регистрации квеста открываем SM Event Node, находим Change Location Event и открываем его. 4. В самой верхней строке правой кнопкой выбираем позицию New Quest Node. 5. Появится новый Stacked Quest Node. В его настройках привсаиваем ID и необходимые условия для запуска квеста. В данном случае "определённая новая локация" - Subject -> GetEventDate -> GetIsId - New Location - ID_myLocation -> == 1 6. Добавляем другие условия, если необходимо (стадия квеста и т.д.) 7. Правой кнопкой на свою только что сделанную позицию Stacked Quest Node и выбираем Add Quests. Там выбираем свой квест. 8. Жмём ОК.
В этом квесте можно сделать: Алиас на ГГ с вложенной в него способностью, а в её маг.эффекте вложить перк. Повесить квестовый скрипт Event OnStoryChangeLocation(ObjectReference akActor, Location akOldLocation, Location akNewLocation) ; добавляем, удаляем, меняем и всё прочее endEvent Добавить алиасу скрипт с нужными командами и т.д.
Для автоудаления спелла/перка и выключения квеста в скрипте алиаса или в способности добавляется событие на смену локации, а в способности можно использовать OnEffectFinish с командами "Удалить способность" и "Стоп квест".
**Все квесты, запускаемые по какому-либо событию, должны быть зарегистрированы в менеджере событий, иначе запуска не будет.** ******************** №2 - самый простой.
Любым удобным способом добавить ГГ способность с условием на эффекте: Player -> GetCurrentLocation() -> ID_myLocation == 1
В маг.эффекте повесить скрипт:
Event OnEffectStart(Actor Target, Actor Caster) if !Game.GetPlayer().HasPerk(myPerk) Game.GetPlayer().AddPerk(myPerk) endif EndEvent
Event OnEffectFinish(Actor Target, Actor Caster) if Game.GetPlayer().HasPerk(myPerk) Game.GetPlayer().RemovePerk(myPerk) endif EndEvent
В этой же способности можно добавить и другие эффекты (повышение чего-то, понижение... и т.д.) и с таким же условием.
В квестовых скриптах все события, которые ты применяла, не работают. OnCellLoad/OnCellAttach/OnCellDetach/OnReset - это событие работает на конкретном объекте, находящимся в игровом мире. Квест не находится в игровом мире и не может быть загружен/присоединён к локации. Если нужен квестовый объект, то для этого применяют алиасы, а вот они уже реальные объекты из игрового мира и все эти события будут на них работать.
Добавлено (14.09.2013, 17:04) --------------------------------------------- №3 вообще самый простой.
На любом постоянном объекте (статик, активатор и т.д.) в нужной локации повесить скрипт:
Event OnCellAttach() if !Game.GetPlayer().HasPerk(myPerk) Game.GetPlayer().AddPerk(myPerk) endif EndEvent
Event OnCellDetach() if Game.GetPlayer().HasPerk(myPerk) Game.GetPlayer().RemovePerk(myPerk) endif EndEvent
Добавлено (14.09.2013, 17:13) --------------------------------------------- №4 самый-самый простой
Любым удобным способом добавить ГГ способность с условием на эффекте: Player -> GetCurrentLocation() -> ID_myLocation == 1 В маг.эффект в графе Perk to Apply назначить свой перк. Скриптов не надо.
Подскажите, как задать отдельный период респауна для контейнера?
"Кнопок" и настроек на респаун для отдельных объектов нет (по крайней мере мне такие не известны). Это можно сделать, повесив скрипт на сам контейнер, тем более, нужно респаснить именно определённые контейнеры (общий респаун есть в настройках). Пример такого скрипта написан в теме про скрипты.
Изменение репутации для пользователя Alliria
AlliriaOffline
Сообщение №5513
написано: 15 сентября 2013, 04:05
| Отредактировано: Alliria - 15 сентября 2013, 04:37
AleksTirex, огромное спасибо за развернутый ответ. А если нужно вообще в любой, в которую зайдет игрок, то в способе 1 в Node Conditions я могу указать: Subject->GetInSameCell->Reference:'PlayerRef'==1 ?
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №5514
написано: 15 сентября 2013, 09:46
| Отредактировано: AleksTirex - 15 сентября 2013, 09:55
Alliria, не-е, Subject в способе №1 вообще ни в каком виде не прокатывает, ведь Subject == "Я", поэтому квест или менеджер ну никак не может находиться в той же локации, что и игрок. *(Subject == "Я" когда условие относится к конкретному объекту/референсу - GetAV, IsDisabled, в противном случае параметр Subject игнорируется - GetStage, GetGlobalValue, т.к. сами объекты будут определяться в самих условиях)
Запуск квестов (в способе №1 используется именно такой вариант) происходит по событию, в нашем варианте по смене локации, вот и надо применять условия событий - GetEventData, а уже это условие можно расширить. Например: 1. Можно определить не одну локацию, а сразу кучу, прописав их в форм-лист и тогда вместо GetIsId надо выставить GetInList и указать свой форм-лист. Тогда квест запустится в любой из этих локаций. 2. Можно использовать кейворд - HasKeyword, например LocTypeHouse, тогда квест запустится, если ГГ зайдёт в любой дом (все жилые дома отмечены этим кейвордом). 3. При необходимости можно дополнить другими условиями, например "если на ГГ одета шапка" и т.д. *** "нужно вообще в любой, в которую зайдет игрок" - это не имеет смысла, тогда этот перк всегда будет у ГГ, а для этого достаточно просто добавить ГГ этот перк на постоянку. Надо обязательно определять конкретную локацию или группу локаций.
********** **********
Alliria, ты когда выставляешь условия или пишешь скрипт, то смотри, на чём именно они работают. Если условия или скрипт для квеста, то и Subject == квест и скрипт == квест. Т.е. и условия и события будут относится к этому квесту. Поэтому событие OnLoad() никогда не отработает, т.к. квест не может загрузится в игровой мир, а GetInSameCell никогда не будет "==1", т.к. квест не может находиться в одной ячейке с чем-нибудь.
AleksTirex, ок, в целом ясно. Т.е. локацию или хотя бы форм-листы придется задавать всегда... Тогда еще пара вопросов, и больше не буду тебя пытать.
Цитата AleksTirex
Если условия или скрипт для квеста, то и Subject == квест и скрипт == квест. Т.е. и условия и события будут относится к этому квесту.
Ок, а если я вешаю скриптом перк на актера при экипировке оружия? Например, есть серебряный меч, я к нему целяю ванильный SilverScript, который при экипировке вешает на актера ванильный SilverPerk. В Perk Entries я выбираю Entry Point->CalculateWeapondamage, во вкладке Weapon применяю проверку по HasKeyword для Subject и во вкладке Target - по HasKeyword, HasSpell, GetIsRace и т.п. для Subject или Player. Но в первом случае subject - это оружие, а во втором - уже актер, так? Причем, когда оружие экипирует игрок, то он должен становится subject? Но если сделать проверку только по subject - для игрока перк работать уже не будет. С другой стороны, если для такого перка в Perk Entries вместо Entry Point->CalculateWeapondamage задать Entry Point->ModIncomingDamage, во вкладке Perk Owner сделать проверку WornHasKeyword по Subject или Player, это уже не будет работать - по крайней мере для игрока. Но ведь здесь PerkOwner - это актер, экипировавший оружие, как же так? Ведь если теперь такой перк повесить скриптом на броню - он будет работать. Но какая разница, при экипировке какого именно объекта на актера и игрока вешается перк? Таким образом, я не могу одновременно регулировать наносимый урон и урон получаемый в Perk Entries одного перка, если он вешается на актера через ObjectScript. В общем-то, поэтому и пытаюсь найти способ вешать на актеров перки "динамически" - чтобы не перелопачивать все оружие и броню.
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №5516
написано: 15 сентября 2013, 16:37
| Отредактировано: AleksTirex - 15 сентября 2013, 17:53
И вещи оделись на дефолтный манекен, а когда я попробывал таким способом на мной созданый манекен одеть вещи - ничего не получилось
И не получится, ведь ты сразу удаляешь все вещи у манекена скриптом и назначаешь пустой оутфит. Если хочешь, чтобы твой манекен стоял в твоей одежде, то должен сперва решить - можно ли эту одежду брать ГГ, должна ли она быть в инвентаре у манекена, для каких именно целей этот манекен: для показа этой одежды или он просто манекен с возможностью надевать на него любую броню. От всех этих условий и будет зависеть принцип одевания той твоей брони.
Изменение репутации для пользователя BileraON
BileraONOffline
Сообщение №5517
написано: 15 сентября 2013, 17:58
| Отредактировано: BileraON - 15 сентября 2013, 19:24
Так ведь этот скрипт с пустым оутфитом, который мы сделали, он ведь только на дефолтный манекен распространяется, верно? Или на мой созданный рядом также этот скрипт действует?
Скрипт действует на тот манекен, на который ты его повесил. Если на твоём манекене скрипта нет, то он на него не действует. А в инвентаре у манекена появляется эта броня? В любом случае, проверь на чистом сейве: сохранись, выключи мод, загрузи и сохрани, потом включи мод и загружайся.
Изменение репутации для пользователя BileraON
BileraONOffline
Сообщение №5519
написано: 15 сентября 2013, 22:38
| Отредактировано: BileraON - 15 сентября 2013, 20:54