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

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

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в следующих номинациях:
    "Знаток года по игровым разделам", "Знаток года по НЕ игровым разделам", "Литератор года", "Лучший ведущий темы", "Шутник года", "Новостник года", "Модостроитель года", "Модератор года", "Редактор года", "Машинима-режиссёр года", "Мастер скринов года" и "Форумчанин года".
    Также проводится выбор лучших раздела/подраздела, темы/цикла тем и мода (вышедшего в этом году)

    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.
  • Внимание!
    — Требуется примерно по 3-5 человек на каждую из версий ОС:: - Windows® XP SP3, Windows® Vista SP2, Windows® 7 SP1, Windows® 8, Windows® 8.1, Windows® 10(build 10 1607) и Windows® 10(build 10 1703). Для стационарных ПК и ноутбуков. Заявку на участие можно оставить здесь...

Для чайников

Olhado

Участник форума
Регистрация
17 Май 2007
Сообщения
129
Благодарности
1
Баллы
165
#1
Я, конечно, не модостроитель и становиться им не собираюсь... Но что охота мне стало поковыряться в скриптах Готики, мож че-нить интересное отыщу :D

Но вот вопрос, где их искать? Все скрипты про НПС, оружие, квесты, диалоги и прочее? Всякие туториалы, которые я читал, говорят, мол "Заходим в папку Gothic II\_work\Data\Scripts\Content\NPC"например... но у меня ничего в папке Scripts\Content нету! Только одна папка Cutscene... никаких НПС, Dialogs или еще чего вообще нигде в папке Готики нету! Где все это искать? Или может эти папки надо просматривать особыми программами?
 
Последнее редактирование модератором:

kor.angar

Забанен
Регистрация
28 Ноя 2017
Сообщения
89
Благодарности
20
Баллы
40
Я проверил, все работает, Ксардас кинулся когда я одел дубину. Осталось только приделать забор оружия после поражения гг и все.(Хотя может тебе это не надо)
отлично! А как теперь это зациклить? а то при повторном заходе уже нет реакции :)
 

WoOliN

Участник форума
Регистрация
13 Окт 2012
Сообщения
88
Благодарности
23
Баллы
175
permanent = FALSE; изменить на permanent = TRUE;
 

kor.angar

Забанен
Регистрация
28 Ноя 2017
Сообщения
89
Благодарности
20
Баллы
40
permanent = FALSE; изменить на permanent = TRUE;
теперь Диего пытается вернуть себе свой меч. И снова и снова :)

Но вот с Кор Ангаром возник затык. Диалог появляется и меч он достаёт, а потом просто замирает
Код:
instance DIA_AngarDJG_ItMw(C_Info)
{
    npc = DJG_705_Angar;
    nr = 1 ; //важность,т.е в где будет стоять строка в начале в конце в середине.
    condition = DIA_AngarDJG_ItMw_Condition;
    information = DIA_AngarDJG_ItMw_Info;
    permanent = TRUE;
    important = TRUE; //если false то диалог начинаете вы,если TRUE нпс начинает разговор с вами!
};

func int DIA_AngarDJG_ItMw_Condition()
{
var C_Item EquipWeap;
EquipWeap = Npc_GetEquippedMeleeWeapon(hero);
if (Hlp_IsItem(EquipWeap,ItMw_Roter_Wind) == TRUE)

{
return TRUE;
};

};

func void DIA_AngarDJG_ItMw_Info()
{
AI_Output(self,other,"DIA_Addon_Xardas_Hello_14_00"); // У тебя мое оружие, отдавай
AI_StopProcessInfos(self);
B_Attack(self,other,AR_NONE,1);
};





 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
762
Благодарности
479
Баллы
180
Но вот с Кор Ангаром возник затык. Диалог появляется и меч он достаёт, а потом просто замирает
Попробовал сейчас на своем кор Тестере,возник такой же затык.Проверил его инстанцию,отсутствовала строчка fight_tactic = ...Прописал ее,и тестер напал.Ты в инстанции своего ангара ничего не менял?
 

kor.angar

Забанен
Регистрация
28 Ноя 2017
Сообщения
89
Благодарности
20
Баллы
40
убирал fight_tactic = как раз на Ангаре и разбирался с навыком владения оружием. вот кстати как оно устанавливается
Npc_SetTalentSkill(self,NPC_TALENT_1H,1); // навык 0,1,2
HitChance [NPC_TALENT_1H] = 100; //Владение Одноручником
Npc_SetTalentSkill(self,NPC_TALENT_2H,2); // навык 0,1,2
HitChance [NPC_TALENT_2H] = 100; //Владение Двуручником

вообщем всё хорошо, что хорошо кончается. разобрались таки мы с этим делом. Теперь криминальные авторитеты не позволят себя дурачить на ровном месте :)
конечно есть ещё над чем подумать, но принципиально с вопросом разобрались. Огромное спасибо!
 
Последнее редактирование:

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
230
Благодарности
108
Баллы
100
убирал fight_tactic = как раз на Ангаре и разбирался с навыком владения оружием. вот кстати как оно устанавливается
Npc_SetTalentSkill(self,NPC_TALENT_1H,1); // навык 0,1,2
HitChance [NPC_TALENT_1H] = 100; //Владение Одноручником
Npc_SetTalentSkill(self,NPC_TALENT_2H,2); // навык 0,1,2
HitChance [NPC_TALENT_2H] = 100; //Владение Двуручником

вообщем всё хорошо, что хорошо кончается. разобрались таки мы с этим делом. Теперь криминальные авторитеты не позволяет себя дурачить на ровном месте :)
конечно есть ещё над чем подумать, но принципиально с вопросом разобрались. Огромное спасибо!
Советую, чтобы оружие не появлялось у НПС, добавить строчку
[B_RemoveInvItems(other,self,ItMw_1H_Mace_L_03,1); // Забирает палку во время разговора, сделано, чтобы после диалога, не напал повторно ввиду того, что оружие не экипированно.../spoiler], В таком случае предмет будет удален из инвентаря полностью.
Эта функция используется и в триггерах, при забирании предмета, например при активации телепорта, юнитор исчезает из инвентаря ГГ.

убирал fight_tactic = как раз на Ангаре и разбирался с навыком владения оружием. вот кстати как оно устанавливается
Npc_SetTalentSkill(self,NPC_TALENT_1H,1); // навык 0,1,2
HitChance [NPC_TALENT_1H] = 100; //Владение Одноручником
Npc_SetTalentSkill(self,NPC_TALENT_2H,2); // навык 0,1,2
HitChance [NPC_TALENT_2H] = 100; //Владение Двуручником

вообщем всё хорошо, что хорошо кончается. разобрались таки мы с этим делом. Теперь криминальные авторитеты не позволяет себя дурачить на ровном месте :)
конечно есть ещё над чем подумать, но принципиально с вопросом разобрались. Огромное спасибо!
Озвучка немецкая просто прекрасна, сразу так впомнился 2002 год...
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2005
Сообщения
14.924
Благодарности
6.313
Баллы
740
Kreol Nekr,
Тебя правила ни хрена не касаеются чтоль ?!
 

kor.angar

Забанен
Регистрация
28 Ноя 2017
Сообщения
89
Благодарности
20
Баллы
40
Советую, чтобы оружие не появлялось у НПС, добавить строчку
так НПС же должен отобрать оружие, а не забрать. лучшее это враг хорошему. сейчас все натурально:
НПС видит на герое оружие и вступает с ним в поединок. если НПС отдубасил ГГ, то поднимает оружие с земли, а если не отдубасил, то сам значит в пыли:-D значит в следующий раз отдубасит.
Код:
instance DIA_AngarDJG_ItMw(C_Info)
{
    npc = DJG_705_Angar;
    nr = 1 ; //важность,т.е в где будет стоять строка в начале в конце в середине.
    condition = DIA_AngarDJG_ItMw_Condition;
    information = DIA_AngarDJG_ItMw_Info;
    permanent = TRUE;
    important = TRUE; //если false то диалог начинаете вы,если TRUE нпс начинает разговор с вами!
};

func int DIA_AngarDJG_ItMw_Condition()
{
var C_Item EquipWeap;
EquipWeap = Npc_GetEquippedMeleeWeapon(hero);
if (Hlp_IsItem(EquipWeap,ItMw_Roter_Wind) == TRUE) // проверка на экипированное оружие

{
return TRUE;
};

};

func void DIA_AngarDJG_ItMw_Info()
{
B_Say_Overlay(self,other,"$DIRTYTHIEF"); // мотивационная фраза ах ты грязный воришка
AI_StopProcessInfos(self);
B_Attack(self,other,AR_NONE,1);
};
есть конечно вероятность что НПС отдубасит ГГ до того, как ГГ успеет достать оружие и по хорошему надо дописать, что в таком случае НПС обыскивает ГГ пока он без сознания и забирает оружие из инвентаря
lorddemonik1 написал(а):
З.ы.ы можно сделать отбор оружия после поражения в бою, но тогда придется тонну написать, какой персонаж какое оружие при обыске/победе над гг, должен забрать
но это уже следующий этап. нельзя же прям за раз сделать всё идеально :-D

ещё раз всем спасибо, сори если был оффтоп.
 
Последнее редактирование:

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
230
Благодарности
108
Баллы
100
так НПС же должен отобрать оружие, а не забрать. лучшее это враг хорошему. сейчас все натурально:
НПС видит на герое оружие и вступает с ним в поединок. если НПС отдубасил ГГ, то поднимает оружие с земли, а если не отдубасил, то сам значит в пыли:-D значит в следующий раз отдубасит.
Код:
instance DIA_AngarDJG_ItMw(C_Info)
{
    npc = DJG_705_Angar;
    nr = 1 ; //важность,т.е в где будет стоять строка в начале в конце в середине.
    condition = DIA_AngarDJG_ItMw_Condition;
    information = DIA_AngarDJG_ItMw_Info;
    permanent = TRUE;
    important = TRUE; //если false то диалог начинаете вы,если TRUE нпс начинает разговор с вами!
};

func int DIA_AngarDJG_ItMw_Condition()
{
var C_Item EquipWeap;
EquipWeap = Npc_GetEquippedMeleeWeapon(hero);
if (Hlp_IsItem(EquipWeap,ItMw_Roter_Wind) == TRUE) // проверка на экипированное оружие

{
return TRUE;
};

};

func void DIA_AngarDJG_ItMw_Info()
{
B_Say_Overlay(self,other,"$DIRTYTHIEF"); // мотивационная фраза ах ты грязный воришка
AI_StopProcessInfos(self);
B_Attack(self,other,AR_NONE,1);
};
есть конечно вероятность что НПС отдубасит ГГ до того, как ГГ успеет достать оружие и по хорошему надо дописать, что в таком случае НПС обыскивает ГГ пока он без сознания и забирает оружие из инвентаря

но это уже следующий этап. нельзя же прям за раз сделать всё идеально :-D

ещё раз всем спасибо, сори если был оффтоп.
За то, что НПС побит или не побит отвечает файл ZS_Unconscious, Если хотите, чтобы НПС забирал у вас оружие, после того как побил, то обьявите там переменную, которая будет принимать значение TRUE в случае, если вас избили, при этом значении допишите туда убирание предмета у ГГ и появление этого предмета у НПС, не надо там расписывать ничего.
if(Npc_IsPlayer(other) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Angar) && (angarisfight == TRUE) && (Npc_HasItem(ITMW_SWord_01)>=1))
{

B_GiveInvItems(other,self,ITMW_SWord_01, 1)

}
Ну и если наоборот, то соответственно все наоборот переверните и вместо Angar допишите Hero
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
762
Благодарности
479
Баллы
180
есть конечно вероятность что НПС отдубасит ГГ до того, как ГГ успеет достать оружие и по хорошему надо дописать, что в таком случае НПС обыскивает ГГ пока он без сознания и забирает оружие из инвентаря
Гляди в скрипт ZS_RansackBody.d(Обработчик состояния грабежа предметов с тел НПС).Там это реализовано с Гарвигом и Святым молотом,Родом и его мечом,Френсисом и ключом от хибары Грега.
А вообще,советую обзавестись скриптами с комментариями от Nifariusа(MaGoth здесь оставлял рабочую ссылку ).Кое-что,да станет понятнее.
 
Последнее редактирование:

RPGamer

Участник форума
Регистрация
23 Дек 2016
Сообщения
149
Благодарности
43
Баллы
65
Ребят подскажите пожалуйста как создать одноручное оружие с минимальным радиусом и 0 урона и желательно что бы было невидимым! очень надо)
 

lorddemonik1

Участник форума
Регистрация
15 Мар 2012
Сообщения
359
Благодарности
129
Баллы
210
Ребят подскажите пожалуйста как создать одноручное оружие с минимальным радиусом и 0 урона и желательно что бы было невидимым! очень надо)
Если мне не изменяет память, у оружия минимальный урон = 5 (Берется отсюда const int NPC_MINIMAL_DAMAGE = 5), поэтому урон всегда будет наносится (Кроме случаев иммунитета, или если поставишь NPC_MINIMAL_DAMAGE = 0)
А в остальном, думаю такое сойдет:
instance ItMw_1hh(C_Item)
{
name = "Кинжал";
mainflag = ITEM_KAT_NF;
flags = ITEM_SWD;
range = 0;
};
 

RPGamer

Участник форума
Регистрация
23 Дек 2016
Сообщения
149
Благодарности
43
Баллы
65
Ребят после Декомпеляции Gothic.Dat постоянно вылазят 3 ошибки которые в последствии мешают успешно всё скомпелировать! подскажите пожалуйста как их поправить! или подскажите где я могу найти испраные варианты и вставить их на место тех которые выдают ошибку!заранее спасибо! если скриншотов не достаточно скопирую текст сюда! я просто в этих делах чайник не знаю как лучше сделать!
Desktop 01.16.2018 - 11.41.48.11.png
Desktop 01.16.2018 - 11.42.15.12.png
Desktop 01.16.2018 - 11.42.27.13.png
 

Dimus

★★★★★★★
Модератор
Регистрация
19 Июл 2010
Сообщения
4.120
Благодарности
2.313
Баллы
540
@RPGamer:
1. Ищи, где в функции пропущен оператор return, возвращающий значение константы COLL_APPLYDOUBLEDAMAGE.
2. Смотри правильный фрагмент кода из G2 MDK:
Код:
FUNC INT DIA_Dar_Kameradenschwein_Condition()
{
    if (Dar_LostAgainstCipher == TRUE)
    {
        self.aivar[AIV_LastFightComment] == FALSE; //geht NUR bei ECHTER Important-Info!
        return TRUE;
    };
};
3. Для тебя существует разница между присваиванием (=) и сравнением значений на равенство (==)?

Ещё после декомпиляции тебе придётся исправлять кучу мест, где PB забыли вставить операторы return, возвращающие значение у функций, например, в обработчиках ZS состояний циклическая часть ZS_xxx_Loop() всегда должна возвращать значение LOOP_CONTINUE (продолжить цикл) или LOOP_END (закончить цикл).
 
Последнее редактирование:

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
762
Благодарности
479
Баллы
180
я просто в этих делах чайник не знаю как лучше сделать!
Не знаю,ты принципиально сам декомпилишь датник,и пользуешся сорсером 3.15,но я бы посоветовал тебе скачать уже декомпилированные акелловские скрипты с правками.Ссылка в моем посте чуть выше(там же ты можешь скачать и скриптовую болванку с пояснениями).И пользовать сорсер 3.14,судя по твоим скриншотам,он несколько информативнее относительно ошибок.
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
910
Благодарности
480
Баллы
230

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
762
Благодарности
479
Баллы
180
Возник такой вопрос:
По сюжету ГГ рассказывает НПСу что-то.Диалог заканчивается.НПС должен это что-то осмыслить какое-то время(минуты,секунды,НЕ СУТКИ),и только после этого обратиться к ГГ.Можно ли в инстанции самого диалога выставить границы времени,в которых НПС после предыдущего разговора с ГГ "уйдет в несозанку ненадолго"? Или же надо лезть куда дальше?
Экспериментировал с B_ASSESPLAYER..
Прописывая в нем переменную,которая становится TRUE при встрече с данным НПС,и если ГГ с ним ранее имел разговор о нужной теме.Потом в диалоге выставлял условие для этой переменной.Работает,как-бы сносно.НПС,после разговора отвлекается на свой распорядок,но при виде ГГ сразу обращается к нему.То есть,пауза присутствует,но не контролируемая.
Можно ли самому ее задать,ведь распорядки бывают разные,и не известно,как какой НПС у разных игроков,в разное время суток отреагирует.ВОТ!
 
Последнее редактирование:

lorddemonik1

Участник форума
Регистрация
15 Мар 2012
Сообщения
359
Благодарности
129
Баллы
210
Возник такой вопрос:
По сюжету ГГ рассказывает НПСу что-то.Диалог заканчивается.НПС должен это что-то осмыслить какое-то время(минуты,секунды,НЕ СУТКИ),и только после этого обратиться к ГГ.Можно ли в инстанции самого диалога выставить границы времени,в которых НПС после предыдущего разговора с ГГ "уйдет в несозанку ненадолго"? Или же надо лезть куда дальше?
Экспериментировал с B_ASSESPLAYER..
Прописывая в нем переменную,которая становится TRUE при встрече с данным НПС,и если ГГ с ним ранее имел разговор о нужной теме.Потом в диалоге выставлял условие для этой переменной.Работает,как-бы сносно.НПС,после разговора отвлекается на свой распорядок,но при виде ГГ сразу обращается к нему.То есть,пауза присутствует,но не контролируемая.
Можно ли самому ее задать,ведь распорядки бывают разные,и не известно,как какой НПС у разных игроков,в разное время суток отреагирует.ВОТ!
Таймера в игре как таково вроде бы нет. Могу предложить повесить циклический триггер, который будучи вызванным из диалога будет каждую секунду прибавлять к переменной +1, а когда она достигнет например 60, отключить его, разрешив дальнейший диалог
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
762
Благодарности
479
Баллы
180
Могу предложить повесить циклический триггер,
Я в курсе,спасибо за совет,но циклический триггер у меня присутствует.Спасибо Myxomopу за создание "этой темы"
Мне было интересно,может есть более легкие пути,которые я по неопытности не заметил.
 
Последнее редактирование:

Haart

Участник форума
Регистрация
24 Окт 2011
Сообщения
132
Благодарности
22
Баллы
170
Я в курсе,спасибо за совет,но циклический триггер у меня присутствует.Спасибо Myxomopу за создание "этой темы"
Мне было интересно,может есть более легкие пути,которые я по неопытности не заметил.
Записать время диалога и день диалога, и паузу - прибавить к текущему времени соответственно, в диалоге указать в условии - что-бы было время не меньше нужного. Может непонятно объясняю. Допустим мы поговорили с нпц в первый день, в 12.30. Пауза у нас 30 минут. Сохраняем время+паузу, дату, в переменные, которые потом проверяются в диалоге - достиг ли нпц нужного времени.

Я конечно не очень хорошо помню скрипты дедалуса, но рекурсия там была доступна, если мне память не отшибло, значит можно спокойно вычислить время, если нет изначально такой функции, на счет дней вообще не помню)
 
Сверху Снизу