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

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

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

MaGoth

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

Вложения

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

Tranfer_Locus

Участник форума
Регистрация
8 Окт 2008
Сообщения
8
Благодарности
0
Баллы
145
ukur написал(а):
Попробуй AI_WaitTillEnd(other, self);
Вот только от расположения other, self будет зависит, кто кого будет ждать.
У меня нет других персонажей. Только гг - анимация происходит в фунции использования предмета и в обработчике горячих клавиш.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.716
Баллы
1.625
Root_Locus написал(а):
Такой вопрос:
При использовании в скриптах функции AI_PlayAni, экзешник идет дальше по коду не дожидаясь завершения анимации. Можно ли этого избежать? (AI_Wait - не помогает)

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

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
MEG@VOLT написал(а):
Обычно это делается отдельной функцией и в конце диалога. т.е. проходит диалог, потом вызывается функция в которой и происходит анимация. Если же у тебя анимация должна происходить в середине диалога, то придется разбивать его на несколько частей...
Он же написал что анимация вызывается не в диалоге, а при использовании предмета ;)
 
Последнее редактирование модератором:

Tranfer_Locus

Участник форума
Регистрация
8 Окт 2008
Сообщения
8
Благодарности
0
Баллы
145
MEG@VOLT написал(а):
Обычно это делается отдельной функцией и в конце диалога. т.е. проходит диалог, потом вызывается функция в которой и происходит анимация. Если же у тебя анимация должна происходить в середине диалога, то придется разбивать его на несколько частей...
Дело говоришь, но как подметил vmazz, малец не к тому ;)
 
Последнее редактирование модератором:

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
914
Баллы
385
Root_Locus написал(а):
MEG@VOLT написал(а):
Обычно это делается отдельной функцией и в конце диалога. т.е. проходит диалог, потом вызывается функция в которой и происходит анимация. Если же у тебя анимация должна происходить в середине диалога, то придется разбивать его на несколько частей...
Дело говоришь, но как подметил vmazz, малец не к тому ;)

Я прошу оставлять в этом разделе более осмысленные сообщения. Это такие сообщения, в которых есть или ответ на вопрос, или уточнение, или хотя бы просто какой-то смысл. Для бессмысленного флуда есть Курилка. Спасибо.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.716
Баллы
1.625
vmazz написал(а):
Он же написал что анимация вызывается не в диалоге, а при использовании предмета ;)
Мда, невнимательность убивает...
Ну в этом случае. Также у предметов есть свои диалоги, в этом диалоге сделать тоже что я прописал выше - не вижу в этом проблумы.
 
Последнее редактирование:

RusSuckOFF


Модостроитель
Регистрация
30 Дек 2008
Сообщения
64
Благодарности
37
Баллы
165
Собратья по оружию, возникла вот такая проблема. Захотел во время игры не только увеличить уровень навыка владения одноручником/двуручником, а и уменьшит его с "мастера"(2) до"бойца"(1) или совсем до "новичка"(0).
Возникла проблема:"мастер"/"боец"меняется и туда и обратно без всяких разногласий. Но если уровень стал выше новичка, то обратно на"новичек"не устанавливается (анимация боя остается прежней - либо мастера, либо новичка.
Для теста поставил это изменение на кнопку"Н".
Код:
var int index;
func void PLAYER_HOTKEY_LAME_HEAL ()
{
if (!Npc_IsInState (hero,ZS_Dead) && !Npc_IsInState (hero, ZS_Unconscious))
{
//hero.aivar[REAL_TALENT_1H] = index*30;
//hero.aivar[REAL_TALENT_2H] = index*30;
//Npc_SetTalentValue(hero, NPC_TALENT_1H, index*30);
//Npc_SetTalentValue(hero, NPC_TALENT_2H, index*30);
Npc_SetTalentSkill(hero, NPC_TALENT_1H,index);
Npc_SetTalentSkill(hero, NPC_TALENT_2H,index);
index += 1;
if(index >1)
{
index = 0;
};
};
};
В этом варианте навык должен меняется с "новичка"на"боец". Строчка index += 2; - и должен менять с"мастера"на "новичек". Кому не трудно, может лично протестировать - анимация боя на новичка не возвращается. Закомментированные строчки на анимацию никак не влияют.
Кто знает, в чем проблема и как ее можно решить, пожалуйста, напишите.
 
Последнее редактирование модератором:

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Попробуй добавить это:

MdlRemoveOverlayMds(hero,humans_1hst2)- убрать оверлей одноручника, уровень 2
MdlRemoveOverlayMds(hero,humans_1hst1)- убрать оверлей одноручника, уровень 1

MdlRemoveOverlayMds(hero,humans_2hst2)- убрать оверлей двуручника, уровень 2
MdlRemoveOverlayMds(hero,humans_1hst1)- убрать оверлей двуручника, уровень 1

После манипуляций их, естественно, придётся вернуть на место через ApplyOverlay.
 

RusSuckOFF


Модостроитель
Регистрация
30 Дек 2008
Сообщения
64
Благодарности
37
Баллы
165
2alex_draven:
Спасибо. Хорошая идея. Пошел тестить.

Вернулся с результатами.
Если задействовать навык, то все рушиться, если просто подключать/отключать анимацию, то все работает.
Вот код:
var int index;
func void PLAYER_HOTKEY_LAME_HEAL ()
{
if (!Npc_IsInState (hero,ZS_Dead) && !Npc_IsInState (hero, ZS_Unconscious))
{
//Print(inttostring(index));
//Npc_SetTalentSkill(hero, NPC_TALENT_1H,index); - если менять навык, то работает.
//Npc_SetTalentSkill(hero, NPC_TALENT_2H,index);
if(index == 0)
{
Mdl_RemoveOverlayMds(hero,"humans_1hst2"); //- убрать оверлей одноручника, уровень 2
Mdl_RemoveOverlayMds(hero,"humans_1hst1"); //- убрать оверлей одноручника, уровень 1
Mdl_RemoveOverlayMds(hero,"humans_2hst2");//- убрать оверлей двуручника, уровень 2
Mdl_RemoveOverlayMds(hero,"humans_2hst1");//- убрать оверлей двуручника, уровень 1
}
else if(index == 1)
{
Mdl_ApplyOverlayMds(hero,"humans_1hst1");
Mdl_ApplyOverlayMds(hero,"humans_2hst1");
}
else
{
Mdl_ApplyOverlayMds(hero,"humans_1hst2");
Mdl_ApplyOverlayMds(hero,"humans_2hst2");
};
index += 1;
if(index >2)
{
index=0;
};
};
};
 
Последнее редактирование модератором:

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Не могу точно сказать, как точно выкрутиться в Г2, т.к. сам имел дело только с Г1.
Да и сама система начисления опыта там другая.
В одном почти уверен- оверлеи умений накладывает двиг (при навыке >30 первый уровень, при навыке >60 второй). Циферка якобы выражается в увеличении шанса крита. Оверлей лишь иллюзия-анимация, что герой лучше дерётся. На самом деле урон только цыфры определяют, а не боевая стойка (процент + уровень силы ГГ).
При откате на более низкий уровень, если до этого был высокий, надо вручную снимать оверлей, и потом вручную его возвращать (и то неизвестно как поведёт себя игра при комбинации save-load).

В Г1 была команда вида Npc_SetTalentValue, которая просто задавала процент навыка. И я мог делать через неё кучу проверок на условия и менять значения по вкусу. А оверлеи раскидывал вручную поверх уже созданных. Не знаю, осталась ли она в Г2.

Ещё мысль- сделать свой оверлей "раненого инвалида"и накидывать в нужный момент через ApplyOverlay. Тут надо выдрать блоки скрипта HUMANS.MDS по оружию (там нулевой уровень владения) и вставить в новый скрипт. Таким образом, не придётся шелушить то, что отрабатывает Npc_SetTalentSkill, а просто перекрывать его результат своим ОДНИМ оверлеем.
 
Последнее редактирование модератором:

p-zenia

Участник форума
Регистрация
6 Апр 2009
Сообщения
38
Благодарности
0
Баллы
150
Скажите чтоя сделал не так когда вставлял НПС:
Я открыл соурс создал новое решение. В папке со всеми НПС я создал новый фаил BAU_99999_MAX. Написал скрипт в этом файле. Открыл Startup и под строкой WldInsert Npc BAU_950_Lobart прописал WldInsert Npc BAU_99999_MAX. Выбрал вкладку действие-компилировать при компиляции исправлял ошибки. Потом зашел в игру а возле Лобарта никого нет.
 

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
p-zenia написал(а):
Скажите чтоя сделал не так когда вставлял НПС:
Я открыл соурс создал новое решение. В папке со всеми НПС я создал новый фаил BAU_99999_MAX. Написал скрипт в этом файле. Открыл Startup и под строкой WldInsert Npc BAU_950_Lobart прописал WldInsert Npc BAU_99999_MAX. Выбрал вкладку действие-компилировать при компиляции исправлял ошибки. Потом зашел в игру а возле Лобарта никого нет.

Игра была продолжена с места сохранения или начата заново?
И куда был помещён файл GOTHIC.DAT после компиляции?
 
Последнее редактирование модератором:

p-zenia

Участник форума
Регистрация
6 Апр 2009
Сообщения
38
Благодарности
0
Баллы
150
Игру начал заново А Gothic.dat не появился я перед тем как компилировать удолил его так надо делать?
 

Marvіn

Участник форума
Регистрация
17 Апр 2008
Сообщения
99
Благодарности
9
Баллы
180

Viscountex

Участник форума
Регистрация
13 Июн 2009
Сообщения
3
Благодарности
0
Баллы
145
Уважаемые господа мододелы, может кто подсказать как задавать значение переменным находящимся в меню.дат из скриптов? А то ввел меню статуса гг строку Должность, а как прописать напротив например Кузнец или Пекарь не знаю
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Viscountex
Посмотри файл «Text.d» как там это реализовано…
Задать переменную также можно так:
Код:
String sProfessional = “кто-то там”;
Если ты про это…
 

Viscountex

Участник форума
Регистрация
13 Июн 2009
Сообщения
3
Благодарности
0
Баллы
145
я искал в этом файле, и во многих других тоже, пробовал и поиском по всем файлам, нет даже намека ни на одно слово из скриптов статусов меню.дат. В текст.д есть только надписи типа 'да, я точно желаю выйти из игры' и то я этой переменной в меню.дат не нашел. Хотелось бы узнать в каком все же месте связь этих двух датников, если не видно ссылок даже на существующие характеристики типа уровень, круг, гильдия, сила, ловкость, защиты, умения и тд, не говоря о том, что я создал новую. О том что ты предложил я не совсем понял, может это на уже существующее? Я ввел новую строку с переменной, только не знаю как значение придать, и общую переменную сразу для двух датников не объявить... Простите за пунктуацию и тп, с телефона писать тяжело
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Viscountex
Вот пример файла «Text.d» из адонна «Возращение»...

Код:
const string TXT_TALENTS[22] =
{
	"",
"Одноручное",
"Двуручное",
"Лук",
"Арбалет",
"Взлом замков",
"Выносливость",
"Магия",
"Подкрадывание",
"Интеллект",
"Демонология",
"Акробатика",
"Карманная кража",
"Кузнечное дело",
"Создание рун",
"Алхимия",
"Разделка зверей",
"Знание языков",
"Риторика",
"Варганить стрелы",
"Добыча золота",
"Добыча руды"};

const string TXT_TALENTS_SKILLS[22] =
{
	"",
"Новичок|Боец|Мастер",
"Новичок|Боец|Мастер",
"Новичок|Стрелок|Мастер",
"Новичок|Стрелок|Мастер",
"-|Обучен|-",
"",
"0|1|2|3|4|5|6",
"-|Обучен",
"1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|2831|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен",
"-|Обучен"};

Что тут не понятно, просто подставляй своё новое значение,… что так пробовал? ??? Не уж-то не катит? ???
Или ты не об этом, тогда я не пойму о чём… ::)
 
Последнее редактирование модератором:

Viscountex

Участник форума
Регистрация
13 Июн 2009
Сообщения
3
Благодарности
0
Баллы
145
Хм. Об этом. Только у меня этого в текст.д почему то нет... вроде... Да и все равно, мне же нужна переменная, значение которой можно было бы менять по ходу игры как гильдии, например

Текст.д сегодня возьму из оригинала г2а, у меня видимо измененный, так брал не оригинальную скриптовую основу

И еще вопрос в догонку, если никто не против)) в каком файле хранятся стандартные диалоги неписей, типа Кто главный в городе, Где тут что расположено и тд как у горожан
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.716
Баллы
1.625
В папке \Story\B_AssignAmbientInfos\ Тут лежат эти файлы.
На счет того что у тебя нет того что написал Джорж в файле ТЕКСТ, э то как онже и сказал что из возвращения(неоффаддон), так что в оригинале этого практически нет.
 
Сверху Снизу