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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

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

MaGoth

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

Вложения

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

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
2 варианта:
1. переменная CurrentLevel не обьявлена. (Такое встречается во всякого рода "скриптовых болванках")
2. Обьявлена, но ПОСЛЕ того как вызывается. (врятли так, но ведь я не в курск что за скрипты ты юзаеш ::))
Решения:
1. Собсно, обьявить ее. В оригинале она обьявлена в StoryGlobals.d. var int CurrentLevel;
2. Отредактировать Gothic.src чтоб обьявлялась переменная ДО ее использования.

Да и кстати, в ГС есть руководства, в том числе и по ошибкам, которое если не знаком с программированием - крайне желательно почитать.
 

_ZEN_

Участник форума
Регистрация
9 Фев 2010
Сообщения
45
Благодарности
3
Баллы
170
Возникли проблемы с экспортом в 3dsMax 2010 плагином импорта-экспорта (KrxImpExp ) от Kerrax.

У меня в 3dsMax 2010 только один объект ZenGin0. В его свойствах указано:
Verts = 31923
Faces = 61533

При экспорте, плагин Керракса выдаёт ошибку превышения количества вершин в файле:
Имя в файле = ZenGin0
Имя в сцене = ZenGin0
Граней = 61533
Вершин в сцене = 31923
Вершин в файле = 67176

Что это за вершины в файле и как уменьшить их количество в 3dsMax 2010, ведь в его свойствах цифры 67176 нигде нет?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Разреж свой меш (я так понял мира) на 2 куска и и проблема пропадет а на счет вершин тут я не знаю тока заметил что там какаято борода с ними по пробуй знаешь что? В режиме редактирования вершин выделить ВСЕ что есть на сцене и по идеи дето в у углу буит Маленькая точка, и в ней как раз и лежат примерно 31к вершин берешь ее и удоляешь. у меня чета такое было оочь часто, и такой способ решения помогал.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Привет всем, кто на форуме. У меня возник вопрос...Возможно ли сделать так, чтобы на NPC нельзя было навести фокус? Т.е. не просто скрыть его НР и имя, а вообще фокус мимо него должен проходить. Попасть в такого NPC можно лишь только встав на против него и просто выстрелить, например, из арбалета. Вот, возможно ли такое сделать?
 

Facir

Участник форума
Регистрация
4 Янв 2010
Сообщения
47
Благодарности
2
Баллы
160
А как можно изменять текстуры персонажей?
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
В инстанции персонажей есть строчка
Код:
B_SetNpcVisual(self,MALE,"Hum_Head_FatBald",Face_N_Mud,BodyTex_N,ITAR_Prisoner);
Face_N_Mud - текстура лица
BodyTex_N - текстура тела
В инстанциях разных персонажей они разные
В AI_Constants прописаны номера текстур , к примеру const int BodyTex_N = 1;
В папке C:\Program Files\Akella Games\Gothic II\_work\data\Textures\NPCs\Body\ ищешь текстуру, в названии которой есть 1 (BodyTex_N) и редактируешь ее
Если ты просто хочешь поставить другую текстуру тела или лица из имеющихся, то выбираешь текстуру в той же папке, по цифре в названии текстуры ищешь ее название в AI_Constants, а затем название прописываешь в инстанции

текстуры лица в AI_Constants
начинаются с Face_
тела с Body
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Facir, Смотря какие:
Если лицо, то смотрим
Код:
B_SetNpcVisual(self,FEMALE,"Hum_Head_Babe",FaceBabe_N_BlackHair,BodyTexBabe_N,ITAR_BauBabe_L);
FaceBabe_N_BlackHair - наше лицо
лезем в файл AI_Constants.d ищем наше лицо и запоминаем цифру в данном случае 137
Лезем в текстуры и ищем файл Hum_Head_V137_C0.tga находится в папке Textures\NPCs\Head

Если текстуру тела, то смотрим
Код:
B_SetNpcVisual(self,FEMALE,"Hum_Head_Babe",FaceBabe_N_BlackHair,BodyTexBabe_N,ITAR_BauBabe_L);
BodyTexBabe_N - наше тело
лезем в файл AI_Constants.d ищем наше тело и запоминаем цифру в данном случае 5
Лезем в текстуры и ищем файл Hum_Body_Naked_V5_C0.tga находится в папке Textures\NPCs\Body

Если возникнуть вопросы по этому поводу, то тебе сюда http://forum.worldofplayers.ru/showthread.php?t=16823
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
У меня вопрос: я проинициализировал мир в скриптах, засунул зен в мод, но когда ГГ появляется в мире - у него отсутствует полоса ХР, не двигается камера и невозможно нажать Escape и выйти из игры. Так же монстры в мире не реагируют на гг. В чем может быть проблема?
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Пара вопросов по мирам:
1) Как большое количество порталов повлияет на производительность? (Например, город размером чуть больше Хориниса, в каждом из домов помимо входа «вырезано» по 2-3 окна)
2) Во всех *.3ds миров, приложенных в MDK, меши не являются единым целым, а состоят из многих не «сшитых» вместе элементов; влияет ли это на что нибудь? (в игре)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Пара вопросов по мирам:
1) Как большое количество порталов повлияет на производительность? (Например, город размером чуть больше Хориниса, в каждом из домов помимо входа «вырезано» по 2-3 окна)
Возможен перегруз по обработке альфа-каналов, но не уверен что с парталами такое возможно, нужно проверять. На производительности игры наличие большого числа порталов в меше скажется только положительно...

2) Во всех *.3ds миров, приложенных в MDK, меши не являются единым целым, а состоят из многих не «сшитых» вместе элементов; влияет ли это на что нибудь? (в игре)
Нет ни на что не влияет, можно как цельный мешь юзать (на Вог.де вроде валялся где-то)так и разрезанный на куски. С кусками просто легче работать, они быстрее грузятся... :)
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
У меня есть вопрос: "почему не работает функция при использовании вещи?"

instance ItPo_Test_01(C_Item)
{
name = NAME_Trank;
mainflag = ITEM_KAT_POTIONS;
flags = ITEM_MULTI;
visual = "ItPo_Perm_STR.3ds";
material = MAT_GLAS;
on_state[0] = San_Scr;
scemeName = "POTIONFAST";
description = "";
};

func void San_Scr()
{
ItPo_Test_01.description = "AAA";
};


//Пробовал изменять description через переменную - получилось, но только при вставке через консоль...
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
У меня есть вопрос: "почему не работает функция при использовании вещи?"

Она работает… Видимо, просто информация о предмете не может обновляться динамически
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Если работать с NPC и, например, динамически менять атрибуты, то вроде бы работает. У меня возникает такой вопрос: "Можно ли вообще так писать - ItPo_Test_01.description = "AAA"; или нужно пользоваться какими-либо функциями для получения сслылок на предмет? или это одно и то же?, или дело не в этом во всём и нужно как то схитрить в динамическом обновлении, но без использования переменной?, или пользоваться переменными и не парить мозги?

Мда.. вот что получается:
1) В инвентаре есть 20 предметов с функцией(см. ранее).
2) Вызываю 1 предмет через insert.
3) Использую 1 из 20 предметов.
4) На вызванном предмете функция заработала.

Что то как то не просто решить данную проблему. Тут либо надо искать брешь, идти на хитрость или использовать переменную.

Через несколько минут...
Мда.. ну и вот что получилось:

func void San_Scr()
{
createinvitems(self, ItPo_Test_01, 1);
ItPo_Test_01.name = "AAA";
};

//Пишу createinvitems, потому что пока что не протестировал для множества предметов.
//Впринципе сдесь есть всё, что мне и нужно, а именно поменять название вещи в инвертаре.(что description, что name, разницы нет, что поменять. Главное работает.)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Jr13San,
Мда.. ну и вот что получилось:

func void San_Scr()
{
createinvitems(self, ItPo_Test_01, 1);
ItPo_Test_01.name = "AAA";
};

//Пишу createinvitems, потому что пока что не протестировал для множества предметов.
//Впринципе сдесь есть всё, что мне и нужно, а именно поменять название вещи в инвертаре.(что description, что name, разницы нет, что поменять. Главное работает.)
а не проще ли прописать еще одну инстанцию ItPo_Test_01_1 с нужными описаниями и параметрами и создавать ее в инвентаре при использовании ItPo_Test_01 во избежание глюков? Для однотипных можно создать prototype с одинаковыми параметрами для всех, а в ее производных прописывать нужные тебе описания.
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Ну, когда тебе нужно пару предметов раскопировать, то может и лучше создать отдельную инстанцю. Ну а если тебе надо работать с большим массивом предметов?? Например со всеми мечами? В таком случае создавать отдельные инстанции считаю обыкновенным нубством. Лучше уж делать более профессионально (динамически менять парамметры) чем захламлять скрипты совершенно дишним балластом. :p
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
vmazz,
умно загнул, только какое отношение имеет изменение параметров оружия/атрибутов к описанной проблеме?
Впринципе сдесь есть всё, что мне и нужно, а именно поменять название вещи в инвертаре.(что description, что name, разницы нет, что поменять.
Ну можно поменять на разные названия пару раз, но не постоянно ("динамически") придумывать новые названия (описания) для одного и того же предмета с одними и теми же параметрами. :D
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Я ж не писал "не делай как он сказал, а делай как я". Я же ясно сказал
Ну, когда тебе нужно пару предметов раскопировать, то может и лучше создать отдельную инстанцю. Ну а если тебе надо работать с большим массивом предметов??
Это сейчас он хочет просто поменять названия, а потом захочет изменять многие параметры предметов в зависимости от некоторых действий и т.д. и т.п.
Данный пост я написал что бы человек правильно понимал ситуацию и в итоге не делал всякие глупости. Например не копировал одну и туже громадную функцию 30 раз подряд (ты понял о каком моде идет речь). Вот чтобы таких недаразумений более не повторялось я и отписался. Так сказать "если Учите, то учИте на совесть".
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Ну можно поменять на разные названия пару раз, но не постоянно ("динамически") придумывать новые названия (описания) для одного и того же предмета с одними и теми же параметрами. :D

Ну это я уже сам увижу что мне нужо, а что нет.


Данный пост я написал что бы человек правильно понимал ситуацию и в итоге не делал всякие глупости. Например не копировал одну и туже громадную функцию 30 раз подряд (ты понял о каком моде идет речь).

Само собой, но сначала то всем приходится проходить через это;). Только потом понимаешь где бы можно было бы написать проще и компактнее и экономя память и ресурсы компа. Это приходит тогда, когда много увлекаешься программированием в этой области.

Да, кстати, хорошо что написали про prototype, а то я про него совсем забыл, точнее - не думал.

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

AMARANT

Участник форума
Регистрация
12 Окт 2009
Сообщения
11
Благодарности
0
Баллы
150
Ребят, кто может подсказать. Дело в том, что в модостроении уже несколько лет, но Готикой еще не занимался. Сейчас вот решил попробовать свои силы, планируя добавить несколько новых возможностей и сразу назрело парочка вопросов.
1. Например, я отредактировал скрипты и хочу их скомпилировать, чтобы проверить то что сделал в игре. Это я и делаю, но в итоге когда я проверяю карту - у меня герой стартует с инвентарем, забитый почти или всеми предметами, что только есть в игре. Редактируя скрипты, пользовался декомпилированными от Акеллы, что вылаживали тут на сайте. Объясните пожалуйста как сделать инвентарь пустым в начале игры.
2. Второй вопрос немножко не по теме. Как сделать чтобы можно было использовать любой костер в игре? Я пробовал ставить только iMob сковородки на огне на обычный vob с анимацией костра, но получается некрасиво. Примерно нужно следующее: либо сделать этот самый iMob сковородки на огне невидимым, но чтобы было видно в руках у ГГ сковородку когда он жарит что-то или же другой какой-то вариант. Мой первый вариант не фурычит - почему-то из-за невидимого iMoba герой больше не хочет юзать костер.
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
1. Story\NPC\PC_Hero.d - отредактируй скрипт гг, а именно удали там все CreateInvItems

2. Как вариант - изменить САМ костер присвоив ему отредактированную анимацию костра, чтоб в руку бралась сковородка. Там не сложно.
Нужные тебе ссылки:
http://mod.worldofgothic.ru/3d/dynamic-model
http://mod.worldofgothic.ru/3d/event-tags
 
Сверху Снизу