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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, спешите принять участие в поэтическом конкурсе "Весенние поэты 2024"!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

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

MaGoth

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

Вложения

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

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Спасибо, но а что в скриптах прописывать та надо? что нужно прописать для исчезания НПС?
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.048
Благодарности
1.163
Баллы
340
void AI_GotoWP (c_npc n0, string s0); - НПС n0 перемещается в указанную WP s0.

void AI_GotoFP (c_npc self, string fpName); - НПС n0 перемещается в указанную FP fpName, расположенную в пределах 20 метров. Критерий поиска FP аналогичен используемому в функции Wld_IsFPAvailable.

А вообще, изучение тутора Вама избавит юного падавана от таких вопросов.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Спасибо, но а что в скриптах прописывать та надо? что нужно прописать для исчезания НПС?
Есть такая функция:
func void B_RemoveNpc (var int npcInstance)
npcInstance - ссылка на твоего непеся
А может стоит прописать через зацикленные функции. Просто прописать условие дистанции нпс до заданного фри пойнта?
Ilot
3)
к WP GB_BERGUNTER_02 поставь за место FP FP_STAND_GVARDBERG_02 просто FP STAND
также во втором скрине...
Ну на первом и так все работает, а зачем на втором если он там шпрехать должен? Да и насколько я знаю, первое, два одинаковых фри пойнта не допустимы, а второе все что стоит после комбинации FP_STAND не важно ведь этот префикс говорит движку какие распарядки на данном фри пойнте выполняются далее идет уникальный индификатор фри пойнта.
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
Ilot написал(а):
А может стоит прописать через зацикленные функции. Просто прописать условие дистанции нпс до заданного фри пойнта?
Оба способа хороши.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Ах да чуть не забыл. Нестоит слепо пользоваться этой функцией я привел ее для примера. Стоит немного изменить код. Примерно так:
func void B_MeinModTeleportNpc (var int npcInstance)
{
var C_NPC npc;
npc = Hlp_GetNpc(npcInstance);

if (Hlp_IsValidNpc (npc))
&& (!Npc_IsDead (npc))
{
AI_Teleport (npc,"Teleport"); //Joly: Fьrs removen innerhalb der 40 Meter Glocke!
B_StartOtherRoutine (npc,"MeinRountine");
AI_Teleport (npc,"Teleport"); //Joly: Fьrs removen innerhalb der 40 Meter Glocke!
};
};
Teleport - имя точки телепортации.
MeinRountine - название нового распарядка.
Midlight, а если ГГ пройдет через триггер или другой непись, монстр. Ну это легко исправить. А если нужно сделать точки телепортации для десятка нпс или цепь точек телепортации для одного непеся (например сопровождение ГГ) и если этот механизм используется вообще неоднократно и на разных локах? Может стоит написать одну функцию и разместить один триггер? Это более универсально и редактировать придется только один скрипт. Согласен оба способа подходят, но когда у тебя большой мир легче работать с одной функцией и триггером чем с целой кучей.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.236
Благодарности
6.222
Баллы
1.565
Ну на первом и так все работает, а зачем на втором если он там шпрехать должен? Да и насколько я знаю, первое, два одинаковых фри пойнта не допустимы, а второе все что стоит после комбинации FP_STAND не важно ведь этот префикс говорит движку какие распарядки на данном фри пойнте выполняются далее идет уникальный индификатор фри пойнта.
не, в фрипоинте это допустимо, недопустимо в вайпоинтах. хотя полтора года уже не занимался модостроем, вполне возможно что ты прав.
а просто для теста попробуй....:)
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
Ах да чуть не забыл. Нестоит слепо пользоваться этой функцией я привел ее для примера. Стоит немного изменить код. Примерно так:
Он вроде делает мод на Готику 2, так что все в порядке.
Нужно лишь упомянуть, что в распорядках у НПСа должно быть что-то вроде:
func void Rtn_TOT_5015()
{
TA_Sleep(8,0,18,0,"TOT");
TA_Sleep(18,0,8,0,"TOT");
};
Чтобы скрипт правильно сработал.

Midlight, а если ГГ пройдет через триггер или другой непись, монстр.
Можно сделать проверку ID НПСа при входе в триггер.
Это более универсально и редактировать придется только один скрипт.
Ну тут в общем-то тоже один.
Согласен оба способа подходят, но когда у тебя большой мир легче работать с одной функцией и триггером чем с целой кучей.
Ну тут кажется только на один случай. Зачем загромождать мир циклическим триггером, если только для одного раза.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Midlight похоже история повторяется:D.
А теперь по факту. По поводу первых двух коментов прочитай внимательно мой пост я говорил то же самое, зачем вы повторяете не понимаю.
Ну а по поводу следующих коментов. Если триггеров несколько то по любому придется прописывать различные функции, либо добавлять дополнительное условие на проверку триггера, что эквивалентно проверке на дистанцию к определенному фрипойнту. А по поводу зацикленного триггера то ты не прав какое загромождение если по любому вставлять как минимум один триггер?
P.S. MEG@VOLT я думаю тему можно оставить так как непись нормально выполняет заявленный распорядок и мод будет начинаться не в крепости поэтому даже если ГГ придет в крепость ровно 8, непись даже будучи вставленным не в том вайпонте, переместится к точке FP_STAND пока ГГ добежит до крепости. Даже если такая ситуация будет возможна какая нафиг разница если непись будет гулять по крепости. Просто было интересно в чем был косяк и как работают эти готические скрипты...
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
Ilot, :D
Ilot написал(а):
По поводу первых двух коментов прочитай внимательно мой пост я говорил то же самое, зачем вы повторяете не понимаю.
Где я что-то повторял? Это я тебя не всегда понимаю. :D
Ilot написал(а):
Если триггеров несколько то по любому придется прописывать различные функции, либо добавлять дополнительное условие на проверку триггера, что эквивалентно проверке на дистанцию к определенному фрипойнту.
Так в нашем-то случае только один триггер можно...
Ilot написал(а):
А по поводу зацикленного триггера то ты не прав какое загромождение если по любому вставлять как минимум один триггер?
Если через зону, то выполнится один раз, а циклический триггер продолжит работать и после. В принципе это не очень важно, но все же.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Такой вопрос. Я меняю визуализацию для Когтя Белиара, а у меня пропадает дополнительный урон. Т.е. молния врагов больше не бьет. Где может быть ошибка кто знает. Вот скрипт:
instance ItMw_BeliarWeapon_1H_20 (BeliarWeaponPrototype_1H)
{
name = "Клинок темного война";

damageTotal = Damage_AM_SchwarzSword_1H_01;

on_equip = Equip_1H_03;
on_unequip = UnEquip_1H_03;

cond_atr[1] = ATR_STRENGTH;
cond_value[1] = Condition_str_SchwarzSword_1H_01;
cond_atr[2] = ATR_DEXTERITY;
cond_value[2] = Condition_dex_SchwarzSword_1H_01;

visual = "ITMW_1H_ANABASIS_SCHWARZSWORD_01.3ds";

value = Value_AM_SchwarzSword_1H_01;

description = name;

TEXT[1] = "Урон"; COUNT[1] = damageTotal;
TEXT[2] = "Необходимо сила"; COUNT[2] =cond_value[1] ;
TEXT[3] = "Необходимо мастерство"; COUNT[3] = cond_value[2];
TEXT[4] = "Бонус к одноручному умению"; COUNT[4] =bonus_SchwarzSword_1H_01 ;
TEXT[5] = "Стоимость"; COUNT[5] = value;

};
Все константы нормально описаны и с моделью все в порядке.


Нас модмейкеров голыми руками не возьмешь:p! Все разобрался почему не было дополнительного урона.
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Подскажите пожалуйста функцию воспроизведения во время диалога анимации, это анимация когда нпс хватается за голову и засыпает.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
В скрипте ZS_MagicSleep.d есть такая строчка:

AI_PlayAniBS (self, "T_STAND_2_VICTIM_SLE", BS_LIE );
Похоже она отвечает за то что вам нужно.
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Вот вопросик сформировался. Когда я использую исходники с вырезанным наполнением для Г2 все равно спейсер выдает ошибки. Эт нормально? Просто я думал если эти исходники предназначены для написания модов не связанных по сюжету с Г2НВ они должны компилироваться без проблем, а у меня компиляция не проходит. Может я чего то не понимаю?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Ilot, Эмм поподробнее можно, какие исходники, какие и где ошибки, а главное причем тут Спейсер?! ::) Эта тварь вообще все баги жрет на прополую, и не давится... :D
Может Сурсер имелось ввиду? ;)
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Так это вот скриптовая болванка от WSA. Ошибка - не определена функция B_GETPLAYERMAP. К тому же уважаемый MaGoth я работаю со спейсером. Для Соурса у меня мозгов не хватает. Да и вообще мой набор модмейкера: мод кит, плагины Kerrax'а и блокнот:D.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Ilot, В самой болванке вроде значимих багов не было, если я правильно помню хотя ее не смотрел толком. Функция B_GETPLAYERMAP откуда, твоя или из оригинала игры? Если оригинал то может там что не до- удалено глянь откуда ноги у нее растут, и удали или наоборот допиши что требуется.

Зы, И все-же, лучше в Сурсере работать, он баги не пропустит в отличие от Спейсера. Другое дело если скрипты на Лего Икарусах и прочих Г2екстах, тут да без вариантов онли блокнот++. :)
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Вах, вах совсем помогло. Все верно в gothic.src была прописана строчка:
STORY\Dialog_Mobsis\*.d
Из-за чего функция вызывалась ранее чем была инициализирована.
А можно вкраце какие именно ошибки не отслеживает спейсер?
P.S. Внатуре пол ночи провозился. Но теперь ou.bin весит 700кб. Дело того стоило:D.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Ilot, Спейсер пропустит практически все фатальные ошибки для игры, и скомпилирует, не зависимо от того, синтаксические они или программные... ;)
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
По-моему Соурсер лучший вариант для скриптинга в Готике. :D
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Учусь работать в Соурсе, а от сюда вопрос при компиляции он создал мне бин и дат файлы. Про бин я чет понимаю, а зачем дат файл нужун и будет ли без него мод работать?
P.S. Перенес скрипты своего мода, что заняло вторую половину ночи - ошибок нет. Так кьто там ругал спейсер. Может просто он у меня ручной?
 
Сверху Снизу