Перейти к содержимому


Фотография
* * * * - 12 Голосов

Вопросы по плагиностроению

как создать торговца oblivion cs торговец cs как создать торговца oblivion моделирование

  • Авторизуйтесь для ответа в теме

#3261 Ссылка на это сообщение X-command

X-command
  • Следопыт
  • 70 сообщений

Отправлено

Здесь задавать вопросы по плагиностроению для Обливиона.

Тема по Обливиону. Тема по Морровинду тут.


<a href="http://profile.xfire.../xcommand"><img src="http://miniprofile.x...2/xcommand.png" border="0" class="linked-sig-image" /></a>
Сила - способность улыбаться © Белльмере-сан "One Piece"<img src="http://www.kolobok.u...zer/pirate.gif" border="0" class="linked-sig-image" />


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3640

#3262 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Как вставить имя игрока в виде текста в какой-нибудь документ или книгу? Или в TES4 такой возможности попросту нет?

Есть такой мод, FormID Finder. Так вот там, вроде бы, используется скриптовое заполнение пустой записки через String_Var'ы. Стоит смотреть в ту сторону.


Ничто не истинно, все потрачено

#3263 Ссылка на это сообщение piramis

piramis
  • Талант
  • 234 сообщений
  •    

Отправлено

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

 

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


Сообщение отредактировал piramis: 07 сентября 2021 - 16:24


#3264 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

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

 

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

Фракция дает только модификатор расположения на указанное кол-во единиц. Если агрессия актера больше, чем уровень его расположения к другому НПС смежной фракции, то первый НПС будет атаковать второго.
Я, как правило, когда создаю новую фракцию, то для сопартийцев всегда ставлю расположение в 200 единиц, а у самих НПС - агрессию 100. Ибо даже если кто-то кого-то зацепит в бою (пусть и не раз), то актеры не начнут друг друга валить.
Стоит еще помнить, что фракции пишутся в сейвы и чтобы их обновить, нужно загружаться на более раннее сохранение, где актеры еще не были заспавнены в мире. У меня лично была такая проблема и приходилось вовсе отключать плагин для обновления этих параметров. Не берусь утверждать, что так будет везде и у всех, но такую странность стоит учитывать.
Никакого штрафа не будет, если был атакован априори агрессивный актер.
На счет оружия у личей - ничего не могу сказать, как-то не встречался с таким дефектом.


Ничто не истинно, все потрачено

#3265 Ссылка на это сообщение piramis

piramis
  • Талант
  • 234 сообщений
  •    

Отправлено

где в NIF файлах привязка/отвязка частей тела к расовой текстуре ?

Сам нашел, за это отвечает подпись skin в свойствах текстуры. Чтобы изменить на привязку к любой другой обычной текстуре, нужно  написать что угодно другое, например default.

Прикрепленные изображения

  • e47yrujm89.jpg - Размер: 139,94К, Загружен: 240
  • e47yrujm90.jpg - Размер: 132,32К, Загружен: 242

Сообщение отредактировал piramis: 19 сентября 2021 - 21:55


#3266 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Есть ли возможность получить ссылку на дочерний объект? Есть функция получения ссылки на родителя (GetParentRef), а вот подобного для дочернего найти не могу.



#3267 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Есть ли возможность получить ссылку на дочерний объект? Есть функция получения ссылки на родителя (GetParentRef), а вот подобного для дочернего найти не могу.

Поможет связка OBSE-функций "GetNumChildRefs" и "GetNthChildRef". Если дочерний объект один, то получит реф можно по типу:

Ref rChild

Let rChild := ObjectRef.GetNthChildRef 0

Где "0" - индекс первого такого объекта. Все дочерние объекты можно извлечь с помощью цикла while-loop.


  • EdMSL это нравится
Ничто не истинно, все потрачено

#3268 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Поможет связка OBSE-функций "GetNumChildRefs" и "GetNthChildRef". Если дочерний объект один, то получит реф можно по типу:

Ref rChild

Let rChild := ObjectRef.GetNthChildRef 0

Где "0" - индекс первого такого объекта. Все дочерние объекты можно извлечь с помощью цикла while-loop.

Спасибо. Правда, я и сам уже нашел эту функцию. Странно, что в базовой игре такого важного функционала не завезли.



#3269 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Как вывести в консоль значение переменной? Я видел, что в консоль можно добавлять какие-либо сообщения.

И, я так понимаю, другого способа дебажить код нет в игре?



#3270 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Как вывести в консоль значение переменной? Я видел, что в консоль можно добавлять какие-либо сообщения.

И, я так понимаю, другого способа дебажить код нет в игре?

Ну да, нет другого способа.
Выводить значения переменных можно примерно вот так:

PrintToConsole "Значение величины - %g" sValue

Где "%g" - числовое значение, "%n" - имя объекта, "%i" - его RefID. В документации к OBSE есть еще несколько подобных кодировок для передачи величин в текстовые значения. Ну, а "sValue" - переменная, в конкретном случае типа Short или Float.


  • EdMSL это нравится
Ничто не истинно, все потрачено

#3271 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Есть подсвечник и объект Light. Light является дочерним объектом для подсвечника (во вкладке Enable Parent указан объект подсвечника). На подсвечнике скрипт

ref current
ref children

begin OnActivate
	set current to this;
	set children to current.GetNthChildRef 0;
	
	if ( IsActionRef Player )
		if children.GetDisabled
			children.Enable
			current.AddFlames
		else
			current.Disable
			current.RemoveFlames
		endif
	endif
end

При активации гаснут свечи, но объект Light не отключается. Получается, я не могу таким образом управлять дочерними объектами, т.е. нельзя отключить дочерний объект, не отключив родителя?
 


Сообщение отредактировал Ed101: 16 октября 2021 - 16:17


#3272 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

т.е. нельзя отключить дочерний объект, не отключив родителя?

Все верно. Это - механика и тут ничего не сделаешь.


Ничто не истинно, все потрачено

#3273 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Есть какой-то способ хранить состояния копий объектов (рефов)? Я уже заметил, что если в скрипте, допустим, есть onLoad и onActivate, и если, допустим, в onLoad присвоить переменной short значение (5 например), то в onActive будет 0, дефолтное значение, т.е. значение переменной не хранится в копии объекта.


Сообщение отредактировал Ed101: 17 октября 2021 - 07:40


#3274 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Есть какой-то способ хранить состояния копий объектов (рефов)? Я уже заметил, что если в скрипте, допустим, есть onLoad и onActivate, и если, допустим, в onLoad присвоить переменной short значение (5 например), то в onActive будет 0, дефолтное значение, т.е. значение переменной не хранится в копии объекта.

Ну, начнем с того, что на каждой копии базового объекта, скрипт выполняется отдельно. Естественно, что и значения переменных там тоже будут разные.
Покажи свой скрипт.


Ничто не истинно, все потрачено

#3275 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Покажи свой скрипт.
short a

begin OnLoad
	set a to 5;
end

begin OnActivate
	print $a;
end

Вот пример. Создаю новый объект-подсвечник. Вешаю скрипт на  него, размещаю в ячейке. Активирую, и в консоли будет 0, а не 5.
 

Вообще что я пытаюсь сделать. Есть подсвечники со светом. И для каждого подсвечника сделан отдельный скрипт на вкл.\откл. света. Я хотел сделать один универсальный. Но в итоге, свет нельзя отключить без родителя-подсвечника, состояния переменных объектов не сохраняются или я не понимаю чего-то.


Сообщение отредактировал Ed101: 17 октября 2021 - 09:03


#3276 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Вот пример. Создаю новый объект-подсвечник. Вешаю скрипт на  него, размещаю в ячейке. Активирую, и в консоли будет 0, а не 5.

Задан неверный формат. Попробуй дебажить так: PrintToConsole "Значение - %g" a. Скорее всего, там все ок с назначением переменных, просто консоль не то значение выводится.
Сам по себе блок OnLoad срабатывает отлично в случае, если ты через PlaceAtMe размещаешь объект или же сам объект, на котором висит скрипт, впервые загружается в ячейке. Важно, чтобы тебя в ней не было на момент его появления там. Данный блок не всегда работает так, как хочется.
Как инициализатор, можно использовать условие-ограничитель типа:

Short sLoad

Begin GameMode
if (sLoad == 0)
   Let sLoad := 5
   Return
Endif
End

Begin OnActivate
   PrintToConsole "Значение - %g" sLoad
End

Ничто не истинно, все потрачено

#3277 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Ed101, дружище, а мы с тобой по другому можем сделать) Раз нельзя отключить дочерний источник света без отключения родителя, его ведь всегда можно перенести за пределы ячейки с помощью SetPos и обновить его координаты через Update3D)
А есть еще один вариант - с помощью OBSE-функций управлять самим источником света, в нужный момент загоняя радиус свечения в 0, что должно полностью его отключить. Но тут есть несколько проблем, одна из которых - отсутствие сохранения внесенных изменений в сейв игры, как и возврат в исходное. Это еще +геморрой и лишний код.


Ничто не истинно, все потрачено

#3278 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Ed101, дружище, а мы с тобой по другому можем сделать) Раз нельзя отключить дочерний источник света без отключения родителя, его ведь всегда можно перенести за пределы ячейки с помощью SetPos и обновить его координаты через Update3D)
А есть еще один вариант - с помощью OBSE-функций управлять самим источником света, в нужный момент загоняя радиус свечения в 0, что должно полностью его отключить. Но тут есть несколько проблем, одна из которых - отсутствие сохранения внесенных изменений в сейв игры, как и возврат в исходное. Это еще +геморрой и лишний код.

Ты предлагаешь убирать его в -30000 по оси Z, например?


Кстати да, с сейвами беда. Я не знаю всех данных, что хранятся в сейве. Enabled/Disabled точно есть.


Сообщение отредактировал Ed101: 17 октября 2021 - 09:47


#3279 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Ты предлагаешь убирать его в -30000 по оси Z, например?

Как вариант. И возвращать на исходные координаты, когда это необходимо. Проверить стоит, дело может выгореть)


Ничто не истинно, все потрачено

#3280 Ссылка на это сообщение Takirell

Takirell
  • <~Broken Steel~>
  • 901 сообщений
  •    

Отправлено

Кстати да, с сейвами беда. Я не знаю всех данных, что хранятся в сейве. Enabled/Disabled точно есть.

Практически все, что могут менять OBSE-функции (имена, пути к моделям\текстурам, какие-то параметры освещения\погоды\рас, шейдера и так далее) - все это не хранится в сейвах и требует возвращения значений на исходные. НО! Это не применимо к новым базовым объектам, созданных функцией CloneForm. Ну и CreateFullActorCopy. Иными словами, в редакторе и в плагинах нет объектов, созданных скриптом, они существуют только в сохранениях, как динамические объекты. Следовательно - игре просто неоткуда взять какие-то исходные параметры объекта из того же мастер-файла, т.к объекта в нем просто нет.
Но тут стоит понимать, что если установлен плагин EngineBugFixes, то все объекты, созданные функцией CloneForm будут удалены в случае, если они не задействованы (не находятся в мире\контейнере\инвентаре игрока\или не используются в данный момент где-либо).


Ничто не истинно, все потрачено

#3281 Ссылка на это сообщение EdMSL

EdMSL
  • Авантюрист
  • 107 сообщений
  •  

Отправлено

Как вариант. И возвращать на исходные координаты, когда это необходимо. Проверить стоит, дело может выгореть)

Ну что, работает твой вариант. Сразу видно опытного скриптера) Мне в Unity так изощраться не приходилось.

ref current;
ref children;

begin onLoad
set current to this;
set children to current.GetNthChildRef 0;

if (children.GetPos z <= -3000)
  current.RemoveFlames
else
  current.AddFlames;
endif
children.Update3D;
end

begin OnActivate
set current to this;
set children to current.GetNthChildRef 0;

if (children.GetPos z <= -3000)
  current.AddFlames;
  children.setPos z, -90;
else
  current.RemoveFlames;
  children.setPos z, -30000;
endif
children.Update3D;
end

 







Темы с аналогичным тегами как создать торговца, oblivion cs торговец, cs как создать торговца, oblivion, моделирование

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых