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

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

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

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

MaGoth

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

Вложения

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

Korripto

Участник форума
Регистрация
14 Авг 2008
Сообщения
5
Благодарности
0
Баллы
145
2Korripto:
В декомпиллированых скриптах зайди в папку: _Intern\Constants.d в нем найди строку:
Код:
const float TRADE_VALUE_MULTIPLIER = 0.15;
И крути ее значение, другое изменять в торговле нельзя. ;)
Ну, в Г2а так, а в Г1 я не могу найти такой строки в константах, поэтому сюда и написал
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
У меня такой вопрос. Я вот лично для себя открыл очень удобный способ написания скриптов для более-менее сложных квестов - введение серьёзного кол-ва глобальных констант. Насколько это серьёзно влияет применительно именно к Готике 2.(т.к. движок насколько мне известно очень капризный, и малопропорционально зависит от возможностей ПК).

---
P.S. Прошу ответить по существу, а не учить как правильно и логично писать скрипты.
 

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
912
Баллы
385
У меня такой вопрос. Я вот лично для себя открыл очень удобный способ написания скриптов для более-менее сложных квестов - введение серьёзного кол-ва глобальных констант. Насколько это серьёзно влияет применительно именно к Готике 2.(т.к. движок насколько мне известно очень капризный, и малопропорционально зависит от возможностей ПК).

---
P.S. Прошу ответить по существу, а не учить как правильно и логично писать скрипты.

Если проанализировать скрипты оригинала, то там и так туева хуча глобальных констант :) Не думаю, что это сильно повлияет на производительность.
 

Лестер

Участник форума
Регистрация
2 Дек 2008
Сообщения
25
Благодарности
0
Баллы
150
Подскажите пожалуйста,где найти полный список распорядка дня НПЦ в ГОТИКЕ1
А как изменять распорядок дня в модах ГОТИКИ 1-ой?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.238
Благодарности
6.228
Баллы
1.565
Подскажите пожалуйста,где найти полный список распорядка дня НПЦ в ГОТИКЕ1
А как изменять распорядок дня в модах ГОТИКИ 1-ой?
для второй части в папке AI\Human\
Для второй в папке Story\ZS\

Файл называется Ta.d

Подскажите пожалуйста,где найти полный список распорядка дня НПЦ в ГОТИКЕ1
А как изменять распорядок дня в модах ГОТИКИ 1-ой?
Так же как и в оригинале...
Так, это уже превращяется в набивание постов, следующий подобный пост, буду расценивать как нарушение правил, из которых вытекет наказания!
Ну тогда объединю некоторые посты и ответы на них.
Ukur
 

Лестер

Участник форума
Регистрация
2 Дек 2008
Сообщения
25
Благодарности
0
Баллы
150
Подскажите пожалуйста как вставить какую-нибудь руну (например призыв скелета),ИЩУЩИМ,что надо изменить или добавить в их скриптах?
 

Marvіn

Участник форума
Регистрация
17 Апр 2008
Сообщения
99
Благодарности
9
Баллы
180
2Лестер:
Ну если просто добавить ее в инвентарь, то можно эту руну просто прописать в файле B_CreateAmbientInv.d.
Но если ты хочешь чтобы ищущий еще и использовал эту руну, то тебе надо править файл AI\Magic\B_SelectSpell.d. Возьми тутор Vam'a и почитай раздел "Магия", там этот файл полностью разобран.
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
Вопрос вот такой возник.
Стал использовать скрипты не связанные с сюжетом Г2а от Нефариуса вроде.
Юзаю GothicSourcer v3.14.
При компиляции возникает ошибка "Переопределенный идентификатор"
вот в такой строке:
const int VALUE_ITAR_PAL_SKEL = 500;

В чем может быть проблема?
И еще при замене оригинальных скриптов этими в папке Items остались файлы missionitems_1,2 и т.д. Это так и должно быть?
Если что вот скрипт:
Код:
const int VALUE_ITAR_PAL_SKEL = 500;

instance ITAR_PAL_SKEL(C_Item)
{
	name = "Старые рыцарские доспехи";
	mainflag = ITEM_KAT_ARMOR;
	flags = 0;
	protection[PROT_EDGE] = 100;
	protection[PROT_BLUNT] = 100;
	protection[PROT_POINT] = 100;
	protection[PROT_FIRE] = 50;
	protection[PROT_MAGIC] = 50;
	value = value_itar_pal_skel;
	wear = WEAR_TORSO;
	visual = "ItAr_Pal_H.3ds";
	visual_change = "Armor_Pal_Skeleton.asc";
	visual_skin = 0;
	material = MAT_LEATHER;
	description = name;
	text[1] = NAME_Prot_Edge;
	count[1] = protection[PROT_EDGE];
	text[2] = NAME_Prot_Point;
	count[2] = protection[PROT_POINT];
	text[3] = NAME_Prot_Fire;
	count[3] = protection[PROT_FIRE];
	text[4] = NAME_Prot_Magic;
	count[4] = protection[PROT_MAGIC];
	text[5] = NAME_Value;
	count[5] = value;
};
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
2Финкрег:
Если у тебя ошибка с переопределением, в данном случае она указана на:
const int VALUE_ITAR_PAL_SKEL = 500;

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

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Просидев весь день за компом пытаясь справиться со следующей проблемой:
Итак все мы знаем что ZS_Attack - файл отвечающий за атаку, так вот проблема такова -
Если стоять рядом с НПС (неважно хоть он и друг) то если НПС вступит в бой и мы будем ему помогать
он нас примет за цель и начнёт атаковать!. это ужастно но я так и непонимаю зачем это и как с этим бороться.
Мне нужно делать ведущего НПС чтобы он меня отвёл в город а он встретив первого жэ монстра нападает на меня
причём причина атаки остаёца неизвестной молчком лезет и добевает насмерть. помогитье плз..
я установил дажэ чистую Готу 2 там он тоже....
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
2s@m:
А если сделать ему на время похода: self.npcType = NPCTYPE_FRIEND;
Так уже делалось в оригинальной готе.
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
К сожалению тоже не помагает. Я обшарил всё, но ненашёл почему кто ссылается на AI_ATTACK.
Есть одна догадка, я смотрел что когда НПС находитсья в состоянии атаки - LOOP Npc_GetTarget(self); работает тоже частенько, как бы обновляет цель всегда. Смотрите:
За нами в Готике 2 бежит каконибудь НПС - у него TA_Foolow_Player и он член нашей группы self.aivar[AIV_PARTYMEMBER] = TRUE; и когда мы вступаем в битву с монстром он иногда нас принимает за цэль. и это очень сильно нарушает ход сюжета и баланс. Я думаю это баг он которого нужно исправляться общими силами.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.238
Благодарности
6.228
Баллы
1.565
Хм... Ниразу не видел такого бага... Скорее всего проблема в скриптах...
Тебя хоть раз избивал Ларес? Думаю нет...
Посмотри как у него работают скрипты по поводу его отвода тебя куда-либо...
В скриптах ошибки по поводу сопровождения я не увидел.

Непись после разговора начинает сопровождать ГГ к пункту назначения, после чего он нападает на монстра, если ГГ имее гильдию больше или равно СЕПЕРАТОР_ХУМ(SEPERATOR_HUM), то непись нападает на ГГ, даже если ГГ имеет гильдию доброго орка либо Ищющего.

Нужно в диалоге прописать что-то типа:

func void DIA_Nepis_GoNow()
{
AI_Output(other,self,"DIA_Nepis_GoNow_00"); //Веди меня!
Npc_ExchangeRoutine(self,"GUIDE");
};

Это в скрипте непися

func void Rtn_Guide_(номер непися)()
{
TA_Guide_Player(8,0,20,0,"(вэйпоинт)");
TA_Guide_Player(20,0,8,0,"(вэйпоинт)");
};

И тогда нормально поведет...
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
2MaGoth:
Спасибо.
Но теперь ошибка вылезла у одного из Dementor. Стандартная функция его расписания Ta_Stand_Dementor. Сюрсер говорит, что неизвестный идентификатор. Проверил. Файл ZS_Stand_Dementor есть, не понимаю в чем проблема.
 

Marvіn

Участник форума
Регистрация
17 Апр 2008
Сообщения
99
Благодарности
9
Баллы
180
2Финкрег:
А ты проверил файл AI\Human\TA.d, функция состояния TA_Stand_Dementor зарегистрирована в этом файле?
вот такое есть?
func void TA_Stand_Dementor(var int start_h,var int start_m,var int stop_h,var int stop_m,var string waypoint)
{
TA_Min(self,start_h,start_m,stop_h,stop_m,ZS_Stand_Dementor,waypoint);
};
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Хмм вот лареса я не проверял. Проверял фермеров у Лобарта. Приводил им монстра, помогал им его лупть, и в ходе сражения они переключались на меня, ну или после сражения, это чудо каоето!. Пытался менять гильдии, непосредственно ставить проверку в самом ЗС_АТТАК непомогает, Как бы я не извевался всё равно меня лупят. Думаю Ларес тоже, просто нужно полесть ему в ноги когда он будеть воевать с монстрами.
А где ты нашёл строчку ///если ГГ имее гильдию больше или равно СЕПЕРАТОР_ХУМ(SEPERATOR_HUM), то непись нападает на ГГ, даже если ГГ имеет гильдию доброго орка либо Ищющего./// ??
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.238
Благодарности
6.228
Баллы
1.565
А где ты нашёл строчку ///если ГГ имее гильдию больше или равно СЕПЕРАТОР_ХУМ(SEPERATOR_HUM), то непись нападает на ГГ, даже если ГГ имеет гильдию доброго орка либо Ищющего./// ??
45 ая строка файла B_AssessEnemy.d
Посмотри этот файл и еще вот этот ZS_AssessGuidePlayer.d
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Оставляя проблему не решённой вот создал мини скрипт.Типерь НПСы умеют собирать растения:
Вставлять в конец цикла LOOP в файлы AI\Human\TA_Human\ZS_*.d

Npc_PerceiveAll(self);
// если нпс находит еду рядом с собой
if(Wld_DetectItem(self,ITEM_KAT_FOOD) || Wld_DetectItem(self,ITEM_KAT_FOOD))
{
// если ссылка на предмет item существует
if(Hlp_IsValidItem(item))
{
// если расстояние от нпс до предмета < 5 метров
if(Npc_GetDistToItem(self,item) < 500)
{
// нпс берет предмет
AI_TakeItem(self,item);
// нпс говорит сам себе (SVM фраза "Не плохо.")
B_Say(self,self,"$NOTBAD");
};
};
};
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
2s@m:
Забавно, а ещё приписать:
if(Hlp_GetInstanceID(item) == ItFo_Beer)
{
AI_UseItem(self,ItFo_Beer);
};
B_Say(self,self,"$VERYGOOD");
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Я нашёл в чем дело. Это оказывается баг игры а всё из за того что когда НПС сражается с монстром
путаться под ногами используя Клавиши "Сколжение вправо" и " Скольжение влево" и это вовсе
не изза скриптов, это абсолютно везде, вот так. попробуйте достать оружие и помельтешиться влево вправо
перед лицом нпц, увидите результ. есть предложения как утранить данный баг?
 
Сверху Снизу