Если я не ошибаюсь то никак. Место в сундуке бездонное! Тут нужно хитрить. Например создать персонажа и запихнуть его в любую локацию (Невидимую для игрока). Затем нужно поставить ему выносливость на 0 (Чтоб переносимый вес тоже был 0) и добавить нужные вам предметы в инвенталь. Затем написать скрипт на открытие инвентаря нужного вам персонажа. Создать модель сундука как активатор и прилепить к нему скрипт)
Короче жесть))))
HAIKYGA,
Там ничего сложного. В Creation Kit ищешь свою модель. Например ботинки бандита... Они называются ArmorBanditBoots к ним идет АА модель, называется BanditBootsAA
открываешь ее и в поле Biped Object выбираешь ее слот. Например ноги feet. Если это шлем то голова head и так далее.
Мостик, я делаю играбельный улей. Создал с модели улья контейнер и положил в него ингредиенты, но нужно так, чтобы нельзя было туда что-то впихнуть. На оригинальном улье (гнездо на дереве) висят скрипты BeeHiveHavokOnHit и critterspawn, но я не знаю что там указано, наверно можно их будет прицепить к моему улью.
;---------------------------------------------- ; Properties to be set for this Critter spawn ;----------------------------------------------
; The type of critter (base object) to create FormList property CritterTypes auto { The base object to create references of to spawn critters}
; The distance from this spawner that Moths are allowed to be float property fLeashLength = 500.0 auto { The distance that moths are allowed to be from this spawner} float property fLeashHeight = 50.0 auto { The distance that dragonflies are allowed to be from above spawner} float property fLeashDepth = 50.0 auto { The distance that fish are allowed to be from below spawner} float property fMaxPlayerDistance = 2000.0 auto { The distance from the player before the Spawner stops spawning critters}
int property iMaxCritterCount = 10 auto { The maximum number of critters this spawner can generate} float property fFastSpawnInterval = 0.1 auto { When spawning critters, the interval between spawns} float property fSlowSpawnInterval = 5.0 auto { When spawning critters, the interval between spawns}
GlobalVariable property GameHour auto { Make this point to the GameHour global } float property fStartSpawnTime = 6.0 auto { The Time after which this spawner can be active} float property fEndSpawnTime = 11.0 auto { The Time before which this spawner can be active}
float property fLeashOverride auto {Optional: Manually set roaming radius for critters spawned}
bool property bSpawnInPrecipitation auto {Should this critter spawn in rain/snow? DEFAULT: FALSE}
;---------------------------------------------- ; Constants (shouldn't need to modify these) ;---------------------------------------------- float fCheckPlayerDistanceTime = 2.0
;---------------------------------------------- ; Variables to keep track of spawned critters ;---------------------------------------------- int property iCurrentCritterCount = 0 auto hidden bool bLooping bool bPrintDebug = FALSE ; should usually be set to false. int recursions
; Do initial stuff when my 3D has loaded up. EVENT OnLoad() ; The Spawner will register for update and periodically check whether the player is close or not ; - JOEL REFACTOR - Going to use onLoad() & onUnload() instead of states? ; GotoState("WaitingForPlayer") ; - JOEL REFACTOR - also no longer need to update ; RegisterForSingleUpdate(fCheckPlayerDistanceTime)
; set our control bool to start the loop bLooping = TRUE
while bLooping == TRUE if bPrintDebug == TRUE recursions += 1 ; debug.trace("spawner " + self + " while loop #" + recursions) endif
if shouldSpawn() == FALSE ; wait a bit, then see if the player is close again. ; Removing this to eliminate some TPLOG spam ; ; debug.TraceConditional("player not yet near spawner " + self, bPrintDebug) utility.wait(fCheckPlayerDistanceTime) else ; ; debug.TraceConditional("spawner " + self + " ready to spawn!!!", bPrintDebug) ; player must be nearby - spawn our initial critters ; don't follow up as we no longer wish to re-generate new critters until the player leaves entirely spawnInitialCritterBatch() bLooping = FALSE endif endWhile
endEVENT
EVENT onUnload() ; when our 3D unloads, stop looping until loaded again. bLooping = FALSE ; ; debug.TraceConditional("spawner " + self + " unloading due to onUnload() EVENT.", bPrintDebug) endEVENT
EVENT onCellDetach() bLooping = FALSE ; ; debug.TraceConditional("spawner " + self + " unloading due to onCellDetach() EVENT.", bPrintDebug) endEVENT
Function SpawnInitialCritterBatch() ; How many do we need to spawn? int icrittersToSpawn = iMaxCritterCount - iCurrentCritterCount
; Create that many critters int i = 0; while (i < icrittersToSpawn) ; Create one critter at a time SpawnCritter()
; Wait a bit before the next spawn ;Wait(fFastSpawnInterval)
; Next i = i + 1 endWhile endFunction
; Called by critters when they die Event OnCritterDied() ; Decrement current critter count, next time OnUpdate ; gets called, we'll spawn a new one if iCurrentCritterCount > 0 iCurrentCritterCount = iCurrentCritterCount - 1 elseif iCurrentCritterCount == 0 ; don't do anything if already @ zero else ; iCurrentCritterCount must be in the negatives. Something is up, but for now increment towards zero iCurrentCritterCount = iCurrentCritterCount + 1 endif endEvent
; Spawns one Critter bool Function SpawnCritter() if (iCurrentCritterCount < iMaxCritterCount) && (iCurrentCritterCount >= 0) ; Go ahead with the actual spawn SpawnCritterAtRef(self) ; Increment count iCurrentCritterCount = iCurrentCritterCount + 1 return true elseif iCurrentCritterCount < 0 ; debug.trace("("+self+") has invalid iCurrentCritterCount of "+iCurrentCritterCount+", abort!") ; turn off loop bLooping = FALSE else ; debug.trace("("+self+") SpawnCritter() failed because iCurrentCritterCount is "+iCurrentCritterCount) ; ;debug.trace("("+self+") iMaxCritterCount: "+iMaxCritterCount) endif endFunction
; Spawns one Critter at a specific location Function SpawnCritterAtRef(ObjectReference arSpawnRef) ; Pick a random critter type Activator critterType = CritterTypes.GetAt(RandomInt(0, CritterTypes.GetSize() - 1)) as Activator
; Create the critter and cast it to the critter base class ObjectReference critterRef = arSpawnRef.PlaceAtMe(critterType, 1, false, true) Critter thecritter = critterRef as Critter
; Set initial variables on the critter ; ; Debug.TraceConditional("Spawner " + self + " is creating Critter " + thecritter, bPrintDebug); thecritter.SetInitialSpawnerProperties(fLeashLength, fLeashHeight, fLeashDepth, fMaxPlayerDistance + fLeashLength, self) endFunction
; Utility method that returns the player's distance float Function GetPlayerDistance() return Game.GetPlayer().GetDistance(self) endFunction
; Utility method that tells the spawner whether it should spawn critters bool Function ShouldSpawn() ;DREW - Added an extra safety measure for if the object is stuck in the spawn check loop while the 3d is not loaded ; NOTE - is3dLoaded dumps an error when the 3d is not loaded, but the function still returns false which should ; set bLooping to false and jump out of the bLooping While, at which point no additional errors will be thrown if self.is3dLoaded() if !(GetPlayerDistance() <= fMaxPlayerDistance) return false endIf ; Otherwise, base value on time of day (no handling of wrap around though...) return IsActiveTime() else ;if the 3d is not loaded jump out of the looped state. Just an extra safety measure. ; ;debug.Trace(self + ": should be setting bLooping to False") bLooping = FALSE return false endif endFunction
Чёт не могу впилить, как сделать так, чтобы при вхождении в игру к ГГ прибегал бы гонец и вручал бы записку. Где брать гонца, как к нему "прицепить" нужную записку? Где-то об этом уже писалось?
Ещё вопросик... Возможно ли как-то оптимизировать большое количество статиков в экстерьере так, чтобы поменьше грузить компьютер? Я сделал большую цветочную клумбу, но комп на 1\4 засаженности цветами уже глючит по-страшному. Может создать эти цветы как статику? И назначить ту же модель на лоды, а то за десяток метров всё ищезает. Такая же фигня с домом, при наведении на него камеры резко проседает фпс, оптимизировал как мог (двухэтажная вилла с огромным количеством статики). Слыхал есть такое разбиение на части в интерьере, где все грузится по частям, может есть что-то подобное для экстерьера?
Положить можно и игроку, и через редактор, всунул туда то, что и в оригинальном улье и поставил на респавн, должно все это появлятся через время. Но прикол в том, что игрок может хранить там свое барахло. Я туда запихал весь свой инвентарь, а надо чтобы только бралось оттуда то, что я запихнул через редактор, и ничего лишнего не ложилось.
Изменение репутации для пользователя Gargule
GarguleOffline
Сообщение №6760
написано: 31 января 2014, 09:59
| Отредактировано: Gargule - 31 января 2014, 12:34
друзья, нужно поменять анимацию ходьбы на анимацию левитации драконьего жреца. вроде надо просто найти в скайрим.есп файл анимации жреца, и выкачать, но как выкачать не помню. и вообщ хватит ли этих действий? или есть способ сделать лучше?
Такой вопрос: почему мои источники света без теней работают нормально а те источники что должны отбрасывать тень не работают, то есть маркер в виде лампочки красный и на даёт ни света ни тени?
Иероним, 1) В локации может быть слишком много источников света, из-за чего источники света с тенями отключаются. 2) Установлен слишком низкий радиус свечения или яркость.
Изменение репутации для пользователя DarkVetal
DarkVetal
Сообщение №6764
написано: 31 января 2014, 14:26
| Отредактировано: DarkVetal - 31 января 2014, 14:28
Иероним, в окне рендера клацнеш правой кнопкой мышки по пустому месту, в выскочившем меню выбереш строку render window properties, вкладка shaders и поставиш галочку напротив shadows. Это включит тени в редакторе, но возрастет нагрузка на комп.
После добавления мода (Бронь+армораддоны) появился странный глюк: при переходе из локи в локу, на женских персонажах перестаёт отрисовываться текстура тела. (Чернеет) Кто знает, где я накосячить мог?
Ещё пара вопросов: Что отвечает за то, что супруг(а) может поселиться в выбраном интерьере? МБ маркер какой-то? Реально ли сделать "дом" из нескольких интерьеров так, чтобы супруг(а) расхаживал(а) и там и там?
Gargule, я делал замок, в котором слуги ходят из интерьера в интерьер или наружу. Но там все принудительно, по привязке через маркеры. С AI пакетами у меня ничего не вышло, но там есть все настройки для этого. Если не подскажут здесь, поищи в нэте работу с AI пакетами.
Gargule, за это отвечают Алиасы... И скрипты. Допустим для того чтоб супруг поселился в вайтране, есть Алиас в квесте, который во время выбора диалога включается. Алиас идет со своими пакетами (С распорядком дня). Так же в алиасах можно выбрать одежду и прочие фишки. Обалденная штука если в ней разобраться.
Изменение репутации для пользователя Gargule
GarguleOffline
Сообщение №6770
написано: 1 февраля 2014, 14:23
| Отредактировано: Gargule - 1 февраля 2014, 14:29
Можно поподробнее? + скриптовый язык. А ещё лучше на примере моей проблемы. (Мне так понятнее, честно) Вот допустим я хочу поселить жену в новый интерьер. С чего начать?
Gargule, это таааак много писать)))))))))))) Короче, постараюсь
Для начала открой квест RelationshipMarriageFIN. Там найти вкладку Quest Aliases. Видишь там есть SolitudeHouse, MarkarthHouse и так далее? Именно эти Алиасы и отвечают за переселение жен в разные дома. Создай подобный алиас с нужным тебе домом и дальше тепе нужно перейти в диалоги квеста а именно в RelationshipMarriageFINMovingView. Дальше создаешь новый топик например Давай переедем к "Черту на кулички" и соединяешь его с веткой "Давай переедем в другое место". Дальше открываешь свой топик "К Черту на кулички " и пишешь то, что тебе ответит твой супруг. Например "Конечно дорогой, я буду всегда готовить тебе жрать и давать деньги пока ты шляешься с непонятными бабами по скайриму". Тут пока закончили.
Теперь тебе нужно открыть сам скрипт прилепленный к данному квесту, а именно RelationshipMarriageSpouseHouseScript и после строки
ReferenceAlias Property SpouseHouse Auto
Добавь ReferenceAlias Property MyNewHouse Auto ; Твой новый дом
дальше после
If SpouseHouse SpouseHouse.Clear() EndIf
Добавляешь
If MyNewHouse MyNewHouse.Clear() EndIf
Компилируешь и сохраняешь скрипт. Потом клацаешь на скрипте и выбираешь Properties. Находишь свой дом MyNewHouse клацаешь на него и выбираешь именно тот алиас, который ты создавал ранее. (Надеюсь что ты создал такой же Алиас, как и в других домах только с другим пакетом, который будет ссылаться на marker твоего дома.)
Теперь идешь обратно в Диалоги, выбираешь тот где тебе супруг отвечает "Конечно дорогой, я буду всегда готовить тебе жрать и давать деньги пока ты шляешься с непонятными бабами по скайриму", клацаешь на него и в поле Script и end
дописываешь
(GetOwningQuest() as RelationshipMarriageSpouseHouseScript).MoveSpouse(akspeaker, MyNewHouse)
Gargule, Тебе не нужно создать новый вариант ответа. Тебе нужно создать новый топик. Клацаешь правой кнопкой на желтом месте и нажимаешь AddTopic. В нем вводишь то уникальный ID и что ты будешь говорить например "Давай переедем".
Дальше снизу на сером фоне клацаешь правой кнопкой и нажимаешь NEW и в появившемся окне во вкладце Responce Text вводишь то что тебе ответит супруг. Нажимаешь OK и дальше дописываешь свой скрипт и обязательно ставишь условия - Conditions! Чтоб только твой твой определенный супруг отвечал тебе, а не все персонажи в скайриме) Например по ViceType, Алиасу.
Добавлено (01 Февраля 2014, 20:38) --------------------------------------------- Давно хотел создать обучающие уроки. Никак руки не дойдут.
Кальян очень много бреда говорит. Вернее говорит что нереально сделать то, что на самом деле сделать очень легко. Короче куча глупостей. А по нудности я уверен я переплюнул бы его)
Проблема решилась или никак? Если все делаешь как я написал, все должно быть окей.
Что пишет, почему не может создать?
П.С. Если хочешь получать более точный ответ, пиши свою проблему более подробно.
Изменение репутации для пользователя Gargule
GarguleOffline
Сообщение №6780
написано: 1 февраля 2014, 16:55
| Отредактировано: Gargule - 1 февраля 2014, 16:56