• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 578
Последнее редактирование модератором:

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
Bragi, что-то типа этого?


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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
Bragi, Тело не проблема увеличить, для него скорее всего максимум будет около 12 000 без падений игры, так как раньше уже вставляли модели на 10 000 в игру. А вот с головой беда, максимум 2000 - 2500...
 

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
проверил вот буквально только что: взял голову, вставленную ранее в наш мод (1300 поликов), скопировал, развернул на 180%, сделал единой моделью в 2600 полигонов, отэкспортил мэш и анимации-пустышки, и скомпилировал всё это движком, вместо старой версии головы...

движок покряхтел чуток, но модель скомпилировал успешно, всё отображалось как надо (т.е. лицо у головы было и спереди и сзади :D)

побегал в игре не долго, на глюкавость ессно не проверил, но то что модель уже скомпилилась - это плюс.

так что предположительный порог полигонов для голов всё же не менее 3 000 *wink* (я мог бы научно потыкать и назвать более точную цифру, но мне лень на ночь глядя...)
-------
......и спустя некоторое время: модель 3500 (3476 если быть точным) поликов - компиляция и отображение головы успешное, 3800 - модель не отображается после компиляции. Вот какие то такие пределы *sorry*
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Вопросик возник:
как зная ID предмета получить его itemInstance или ссылку на инстанцию?
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
463
Благодарности
288
Баллы
230
Dimmell, попробуй разобраться ;)

func void UseItPo_Mana_01()
{
var int ID;
ID = Hlp_GetInstanceID(ItFo_Addon_Shellflesh);//Предположим, что здесь целое число и запишем его в переменную для уверенности в том, что нету никакого подвоха с ID и инстанцией

//Всё!, ID дано также как и по условию, т.е. определённое число в оперативной памяти.

Npc_GetInvItem(hero,ID);//инициализируем глобальную переменную item по ID "???", только проблема в том, что вещь должна быть в инвентаре.
PrintScreen(item.name,-1,-1,FONT_Screen,2);
};

самая главная строчка в скрипте - это Npc_GetInvItem(hero,ID)
Ссылка на вещь получена? ДА! ч.т.д.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Jr13San,
Мне надо получить ItFo_Addon_Shellflesh зная его ID (ID получить не проблема, и он сохраняется в сейвах и похоже не меняется).
Методом перебора и сравнения - слишком немаленький будет обработчик.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Dimmell, а зачем так извращаться, напиши конкретно, что ты хочешь сделать, думаю найдутся другие методы решения.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Myxomop,
я делаю заточку любого оружия и затупление по времени. Уже вроде разобрался - немного внимательней надо было свои скриптовые заготовки посмотреть и хоть иногда делать записи на бумаге, а не пытаться держать все в бестолковке. :)
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
463
Благодарности
288
Баллы
230
я делаю заточку любого оружия и затупление по времени.
Какой тогда смысл в ID был?

не проще ли было создать int переменную для хранения степени затупленности оружия?
Или через константы цен мб можно что-то придумать...

проблема не в степени затупленности, а в корректном отображении урона заточенного оружия в инвентаре, даже если его не используешь. Особенно после перезагрузки.
Да, встречался с такой проблемой отображения. Не помню решил или нет это дело. Помню только то, что пробовал использовать переменные.

Тут вообще то прикол в том, что при загрузке игры вещь и её свойства берутся из скриптов т.е. не те динамические, которые ей присвоили в процессе, а те, что там были забиты, НО
если сделать сылку на переменную, то будет наверное всё норм.

Да, вспомнил про Лареса из порта...
Короче менял через пузырёк(как обычно) его name свойство. Менялось, но при сохранении и последующей загрузке имя было "Ларес" , что подтверждает вышесказанные слова.

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

И где собираешься хранить данные о износе?
ID даёт лишь обращение к конкретной вещи. Так и так придётся где-то хранить все значения износа о каждой вещи. Динамически присвоенные свойства не сохраняются.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Jr13San,
не проще ли было создать int переменную для хранения степени затупленности оружия?
проблема не в степени затупленности, а в корректном отображении урона заточенного оружия в инвентаре, даже если его не используешь. Особенно после перезагрузки.

добавлено:
Ларес - один, а шпаг бандитов - десятки, и все с одним именем инстанции. ;)
Но. ID у всех шпаг разный.
 

Tosyk

Участник форума
Регистрация
30 Окт 2010
Сообщения
20
Благодарности
0
Баллы
150
Огорчён, ошибся, оказывается у меня в голове было 9000 треугольников. Понял это когда начал оптимизировать.

Исход таков:

голова: 3122
растительность: 2342
глаза: 544

итого: 6008

Можно каким-то образом добавить голову, а потом приаттачить остальные части?
 

Вложения

  • diegon_prev_019.jpg
    diegon_prev_019.jpg
    301,7 KB · Просмотры: 361
  • diegon_prev_020.jpg
    diegon_prev_020.jpg
    235,8 KB · Просмотры: 300
  • diegon_prev_021.jpg
    diegon_prev_021.jpg
    238,6 KB · Просмотры: 306

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Огорчён, ошибся, оказывается у меня в голове было 9000 треугольников. Понял это когда начал оптимизировать.

Исход таков:

голова: 3122
растительность: 2342
глаза: 544

итого: 6008

Можно каким-то образом добавить голову, а потом приаттачить остальные части?

Модели головы и тела это две разные модели. Их сочетание прописываеться в скрипте НПС.

B_SetNpcVisual (self, MALE, "Hum_Head_FatBald", Face_N_NormalBart03, BodyTex_N, ITAR_Bau_M);

MALE - пол. Насколько я понимаю, он определают, какая модель будет использоваться в качестве тела.
Hum_Head_FatBald - модель головы. Тут лысая толстая рожа.
Face_N_NormalBart03 - текстура лица.
BodyTex_N - текстура тела.
ITAR_Bau_M - одежка.

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

Удачи.
 

Tosyk

Участник форума
Регистрация
30 Окт 2010
Сообщения
20
Благодарности
0
Баллы
150
Я вот, что то не понимаю.

B_SetNpcVisual (self, MALE, "Hum_Head_FatBald", Face_N_NormalBart03, BodyTex_N, ITAR_Bau_M);

строчку нашёл, а вот это где найти?:

Hum_Head_FatBald - модель головы. Тут лысая толстая рожа.
Face_N_NormalBart03 - текстура лица.
BodyTex_N - текстура тела.
ITAR_Bau_M - одежка.

в архивах игры у текстур, брони совсем другие названия.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Tosyk,
в архивах игры у текстур, брони совсем другие названия.
Это название не текстуры брони, а ее инстанция в скриптах. Текстура лица и тела - это числовые константы описанные также в скриптах.

И вообще B_SetNpcVisual - это также внешняя функция, которая передает аргументы в Mdl_SetVisualBody.

func void B_SetNpcVisual(var C_Npc slf,var int gender,var string headMesh,var int faceTex,var int bodyTex,var int armorInstance)
{
slf.aivar[AIV_Gender] = gender;
Mdl_SetVisual(slf,"HUMANS.MDS");
if(gender == MALE)
{
Mdl_SetVisualBody(slf,"hum_body_Naked0",bodyTex,0,headMesh,faceTex,0,armorInstance);
if(slf.attribute[ATR_STRENGTH] < 50)
{
Mdl_SetModelScale(slf,0.9,1,1);
};
if(slf.attribute[ATR_STRENGTH] > 100)
{
Mdl_SetModelScale(slf,1.1,1,1);
};
}
else
{
if((bodyTex >= 0) && (bodyTex <= 3))
{
bodyTex = bodyTex + 4;
};
Mdl_SetVisualBody(slf,"Hum_Body_Babe0",bodyTex,0,headMesh,faceTex,0,armorInstance);
};
};

Глянь еще мою статью http://mod.worldofgothic.ru/textures/faces-convert-1
 

Tosyk

Участник форума
Регистрация
30 Окт 2010
Сообщения
20
Благодарности
0
Баллы
150
2Myxomop:
А где эти соответствия искать.

Открыл я к примеру SLD_800_Lee.d из второй готики и вижу там:

Код:
B_SetNpcVisual 		(self, MALE, "Hum_Head_Pony", Face_N_Lee, BodyTex_N, ITAR_SLD_H);

с головой ещё более-менее понятно, но как найти текстуры, модель остального?

Объясните пожалуйста.
 

Tosyk

Участник форума
Регистрация
30 Окт 2010
Сообщения
20
Благодарности
0
Баллы
150
Я так и думал! С лицом всё предельно ясно. Только BodyTex_N непонятно откуда берётся. Ему соответствует

Код:
const int BodyTex_N			= 1;	//Normal

как это понимать?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Tosyk,
как это понимать?
const int BodyTex_N = 1; //Normal
HUM_BODY_NAKED_V1_C0-C.TEX
В Г1 используется еще и номер палитры Сх, прочитай статью, все аналогично головам.
 

Tosyk

Участник форума
Регистрация
30 Окт 2010
Сообщения
20
Благодарности
0
Баллы
150
Блин, а я эту текстуру путал с бронёй, думал да как же так, почему я на неё всё время выхожу. А как тогда броню определить?

есть значение ITAR_SLD_H. В AI_Constants.d ничего подобного нет!

Но я методом тыка определил, что это текстура Hum_SldS_Armor_V0.tex
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Tosyk,
есть значение ITAR_SLD_H. В AI_Constants.d ничего подобного нет!
Это не значение - это инстанция, поэтому там ничего и нет.

Здесь инстанции доспехов, текстуры прописаны в ASC файлах доспехов.
\Items\IT_Armor.d
\Items\IT_Addon_Armor.d
 
Сверху Снизу