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

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

Не стесняюсь спросить....

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Ребята, всем привет.
Хочу поменять лицо ГГ в ребалансе 2.1, но ничего не получается :(
Делаю так:
1.) Через VDFS распаковываю WORK_ папку ребаланса в новую папку
2.) Через соурсер создаю новое решение и декомпилирую GOTHIC.dat из этой папки WORK_
3.) Меняю там все как надо
4.) Компилирую
Что дальше?

Подскажите пожалуйста!
Ищите в константах номер текстуры лица героя, заменяете в папке TEXTURES COMPILED эту текстуру на свою, компилируете, и проверяете.
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
правилами хорошего тона, нашедший ошибку выкладывает ее пояснение таким же как ты
Пояснением это назвать трудно в общем пришлось вручную переписать :
Код:
if(potion == POTION_My_Mana_STR_Elixier)
{
PLAYER_TALENT_ALCHEMY[POTION_My_Mana_STR_Elixier] = TRUE;
B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для 'МОЕГО ЗЕЛЬЯ МАГИЧЕСКОЙ СИЛЫ': 10 яиц дракона.");
};
в скрипте TeachPlayerTalentAlchemy.d
И удалить лишнее " &&"
в файле Dia_vlk_Constantino.d
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Пояснением это назвать трудно в общем пришлось вручную переписать :
Код:
if(potion == POTION_My_Mana_STR_Elixier)
{
PLAYER_TALENT_ALCHEMY[POTION_My_Mana_STR_Elixier] = TRUE;
B_LogEntry(TOPIC_TalentAlchemy,"Ингредиенты для 'МОЕГО ЗЕЛЬЯ МАГИЧЕСКОЙ СИЛЫ': 10 яиц дракона.");
};
в скрипте TeachPlayerTalentAlchemy.d
И удалить лишнее " &&"
в файле Dia_vlk_Constantino.d
Извините, не совсем понял, что вы хотите сделать. в данных строчках обозначено условие того, что герой умеет готовить зелья.
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Извините, не совсем понял, что вы хотите сделать. в данных строчках обозначено условие того, что герой умеет готовить зелья.
Совершенно верно . Цель заставить работать мобси диалог с приготовлением данного зелья . У меня это получилось вот и всё.
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Решил тут на днях попытаться создать непися и квест для г 1
Мой непись GRD_678_Gorlum
Код:
instance GRD_678_Gorlum(Npc_Default)
{
    name[0] = "Горлум";
    npcType = npctype_main;
    guild = GIL_GRD;
    level = 5;
    voice = 1;
    id = 210;
    attribute[ATR_STRENGTH] = 20;
    attribute[ATR_DEXTERITY] = 20;
    attribute[ATR_MANA_MAX] = 0;
    attribute[ATR_MANA] = 0;
    attribute[ATR_HITPOINTS_MAX] = 150;
    attribute[ATR_HITPOINTS] = 150;
    Mdl_SetVisual (self, "HUMANS.MDS");
    Mdl_ApplyOverlayMds (self, "Humans_Militia.mds");
    Mdl_SetVisualBody (self, "hum_body_Naked0", 0, 2, "Hum_Head_FatBald", 5, 2, stt_armor_h);
    B_Scale (self);
    Mdl_SetModelFatness (self, 2);
    aivar[AIV_IMPORTANT] = TRUE;
    fight_tactic = FAI_HUMAN_Strong;
    Npc_SetTalentSkill (self, NPC_TALENT_1H, 1);
    Npc_SetTalentSkill (self, NPC_TALENT_2H, 1);
    Npc_SetTalentSkill (self, NPC_TALENT_CROSSBOW, 1);
    EquipItem (self, ItMw_1H_Sword_02);
    EquipItem (self, ItRw_Crossbow_01);
    CreateInvItems (self, ItAmBolt, 30);
    CreateInvItem (self, ItFoCheese);
    CreateInvItem (self, ItFoApple);
    CreateInvItems (self, ItMiNugget, 10);
    CreateInvItem (self, ItLsTorch);
    daily_routine = Rtn_start_210;
};


func void Rtn_start_678()
{
    TA_Sleep (0, 0, 8, 0, "OCR_HUT_19");
    TA_SitAround (8, 0, 10, 0, "OCR_ARENABATTLE_BENCH");
    TA_Smalltalk (10, 0, 16, 0, "OCR_SMALLTALK_A_OC_ARENA");
    TA_Stand (16, 0, 20, 0, "OCR_STAND_WETT");
    TA_SitAround (20, 0, 0, 0, "OCR_ARENABATTLE_BENCH");
};
В Startup.d добавил строку
Код:
Wld_InsertNpc (GRD_678_Gorlum, "OC1");
Создал Диалог для своего непися DIA_GRD_678_Gorlum
Код:
instance DIA_Gorlum_Exit(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 999;
    condition = DIA_Gorlum_Exit_Condition;
    information = DIA_Gorlum_Exit_Info;
    permanent = 1;
    description = DIALOG_ENDE;
};


func int DIA_Gorlum_Exit_Condition()
{
    return 1;
};

func void DIA_Gorlum_Exit_Info()
{
    AI_StopProcessInfos (self);
};
instance Info_Gorlum_What(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 1;
    condition = Info_Gorlum_What_Condition;
    information = Info_Gorlum_What_Info;
    permanent = 0;
    description = "Привет! Я здесь новенький.";
};


func int Info_Gorlum_What_Condition()
{
    if (Kapitel <= 2)
    {
        return 1;
    };
};

func void Info_Gorlum_What_Info()
{
    AI_Output (other, self, "Info_Gorlum_What_15_00");    //Привет! Я здесь новенький.
    AI_Output (self, other, "Info_Gorlum_What_05_01");    // Здорово тощийй хочешь помериться силой на арене.
    AI_Output (self, other, "Info_Gorlum_What_05_02");    //Меня зовут Горлум. Я дерусь с этими дохляками  на арене.
};
instance Info_Gorlum_Good(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 1;
    condition = Info_Gorlum_Good_Condition;
    information = Info_Gorlum_Good_Info;
    permanent = 0;
    description = "И насколько ты хорош? Я имею ввиду - в бою.";
};


func int Info_Gorlum_Good_Condition()
{
    if (Npc_KnowsInfo (hero, Info_Gorlum_What))
    {
        return 1;
    };
};

func void Info_Gorlum_Good_Info()
{
    AI_Output (other, self, "Info_Gorlum_Good_15_00");    //И как, успешно?
    AI_Output (self, other, "Info_Gorlum_Good_05_01");    //Рву пасти и  черепки таким как ты !
};
instance Info_Gorlum_Charge(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 1;
    condition = Info_Gorlum_Charge_Condition;
    information = Info_Gorlum_Charge_Info;
    permanent = 0;
    description = "Я хочу вызвать тебя на бой!";
};


func int Info_Gorlum_Charge_Condition()
{
    if (Npc_KnowsInfo (hero, DIA_Scatty_JoinOC) && Npc_KnowsInfo (hero, Info_Gorlum_What) && (Kapitel <= 1))
    {
        return 1;
    };
};

func void Info_Gorlum_Charge_Info()
{
    AI_Output (other, self, "Info_Gorlum_Charge_15_00");    //Я хочу вызвать тебя на бой!
    AI_Output (self, other, "Info_Gorlum_Charge_05_01");    //Что? Но я не хочу драться. Может, просто выпьем по пиву и поговорим о внешнем мире?
    Info_ClearChoices (Info_Gorlum_Charge);
    Info_AddChoice (Info_Gorlum_Charge, "Нет! Я хочу драться. Сейчас!", Info_Gorlum_Charge_NOW);
    Info_AddChoice (Info_Gorlum_Charge, "Ладно, давай твое пиво!", Info_Gorlum_Charge_Beer);
};
func void Info_Gorlum_Charge_NOW()
{
    AI_Output (other, self, "Info_Gorlum_Charge_NOW_15_00");    //Нет! Я хочу драться. Сейчас!
    AI_Output (self, other, "Info_Gorlum_Charge_NOW_05_01");    //Раз так... я готов.
    Info_ClearChoices (Info_Gorlum_Charge);
};

func void Info_Gorlum_Charge_Beer()
{
    AI_Output (other, self, "Info_Gorlum_Charge_Beer_15_00");    //Ладно, давай твое пиво!
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_01");    //Держи!
    AI_Output (other, self, "Info_Gorlum_Charge_Beer_15_02");    //Спасибо! Боюсь, я не много смогу рассказать о внешнем мире - меня два месяца держали в грязной яме, прежде чем бросить сюда.
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_03");    //Жалко... Ну ладно, ничего... Для парня, которого два месяца продержали в яме, ты выглядишь очень даже ничего.
    AI_Output (other, self, "Info_Gorlum_Charge_Beer_15_04");    //Хотелось бы и дальше таким оставаться.
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_05");    //Почему ты хочешь драться с одним из нас?
    AI_Output (other, self, "Info_Gorlum_Charge_Beer_15_06");    //Я хочу, чтобы обо мне узнали в Лагере!
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_07");    //От Скатти что ли? Х-м, он один из самых влиятельных людей во Внешнем Кольце... Победив меня, ты мог бы произвести на него впечатление...
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_08");    //Но если ты на самом деле хочешь удивить его, тебе стоит побить Харима. Но боюсь, тебе он не по зубам!
    AI_Output (self, other, "Info_Gorlum_Charge_Beer_05_09");    //Если все еще хочешь драться, дай мне знать. Но знаешь, мне совсем не хочется вышибать из тебя дух.
    CreateInvItem (other, ItFoBeer);
    B_GiveInvItems (other, self, ItFoBeer, 1);
    self.npcType = npctype_friend;
    Info_ClearChoices (Info_Gorlum_Charge);
};
var int Gorlum_Charged;

instance Info_Gorlum_ChargeREAL(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 1;
    condition = Info_Gorlum_ChargeREAL_Condition;
    information = Info_Gorlum_ChargeREAL_Info;
    permanent = 0;
    description = "Мы будем драться - ты готов?";
};


func int Info_Gorlum_ChargeREAL_Condition()
{
    if (Npc_KnowsInfo (hero, Info_Gorlum_Charge) && (Kapitel <= 1))
    {
        return 1;
    };
};

func void Info_Gorlum_ChargeREAL_Info()
{
    AI_Output (other, self, "Info_Gorlum_ChargeREAL_15_00");    //Мы будем драться - ты готов?
    AI_Output (self, other, "Info_Gorlum_ChargeREAL_05_01");    //Иди за мной!
    AI_StopProcessInfos (self);
    Gorlum_Charged = TRUE;
    Npc_ExchangeRoutine (self, "GUIDE");
};
instance Info_Gorlum_InArena(C_Info)
{
    npc = GRD_678_Gorlum;
    nr = 1;
    condition = Info_Gorlum_InArena_Condition;
    information = Info_Gorlum_InArena_Info;
    permanent = 0;
    important = 1;
};


func int Info_Gorlum_InArena_Condition()
{
    if ((Gorlum_Charged == TRUE) && (Npc_GetDistToWP (hero, "OCR_ARENABATTLE_TRAIN") < 500))
    {
        return 1;
    };
};

func void Info_Gorlum_InArena_Info()
{
    if (Kapitel <= 1)
    {
        AI_Output (self, other, "Info_Gorlum_InArena_05_00");    //Ладно, поехали. Пусть победит сильнейший!
        AI_StopProcessInfos (self);
        Npc_ExchangeRoutine (self, "START");
        Npc_SetTarget (self, other);
        AI_StartState (self, ZS_Attack, 1, "");
    }
    else
    {
        AI_Output (self, other, "SVM_5_LetsForgetOurLittleFight");    //Забудем об этом, ладно?
        AI_StopProcessInfos (self);
        Npc_ExchangeRoutine (self, "START");
    };
};
Но непись не хочет идти на арену , при этом если его побьёшь вне арены то квест считается выполненым .
Вопрос как заставить непися пойти на арену и если это возможно сделать засччитывать квест только ели ты побил его на терретории арены ?
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Но непись не хочет идти на арену , при этом если его побьёшь вне арены то квест считается выполненым .
Вопрос как заставить непися пойти на арену и если это возможно сделать засччитывать квест только ели ты побил его на терретории арены ?
Скопировал диалог с Кирго, а расписание для арены забыл.

Добавь в файл NPC

func void rtn_guide_678()
{
TA_GuidePC(8,0,20,0,"OCR_ARENABATTLE_TRAIN");
TA_GuidePC(20,0,8,0,"OCR_ARENABATTLE_TRAIN");
};

и id = 210; нужно поменять на id = 678;
daily_routine = Rtn_start_210; поменять на daily_routine = Rtn_start_678;
ну или наоборот, вообщем определись, у тебя ID 210 или 678?
 
Последнее редактирование:

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
Скопировал диалог с Кирго, а расписание для арены забыл.

Добавь в файл NPC

func void rtn_guide_678()
{
TA_GuidePC(8,0,20,0,"OCR_ARENABATTLE_TRAIN");
TA_GuidePC(20,0,8,0,"OCR_ARENABATTLE_TRAIN");
};

и id = 210; нужно поменять на id = 678;
daily_routine = Rtn_start_210; поменять на daily_routine = Rtn_start_678;
ну или наоборот, вообщем определись, у тебя ID 210 или 678?
678 . Спасибо , попробую проще изменить уже существующий чем писать код с нуля , а диалоги буду править чуть - чуть позже главное понять как это всё работает .
Всё заработало с осечкой , но заработало .
 
Последнее редактирование:

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
162
Благодарности
85
Баллы
220
Подскажите пожалуйста одну вещь. Видел туториал по сборке двухместной лавочки. Собрав, её можно сохранить как отдельный воб (vobtree вроде) и после этого загружать уже готовую лавку. Так вот, можно ли такую же штуку сделать с обычными статичными вобами? (например, создаешь шкаф, а на нам две свечки) И так что бы одним вобом?


Все, разобрался)
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
я тебе больше скажу. так даже наиболее корректно..
 

DreamGothic

Участник форума
Регистрация
10 Апр 2013
Сообщения
266
Благодарности
182
Баллы
210
Дорогие мейкеры...

Может кто-нибудь ткнуть в норм тутор по порту оружий из других игр в готу, например из тех-же тесов...
А то что-то у моего гг после порта оказался меч в голове... *lol*
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.168
Баллы
340
Дорогие мейкеры...

Может кто-нибудь ткнуть в норм тутор по порту оружий из других игр в готу, например из тех-же тесов...
А то что-то у моего гг после порта оказался меч в голове... *lol*
Самый примитивный вариант - импортировать стандартное оружие (например меч) и затем пристроить к нему новый меч. Потом нужно будет настроить пивот, ориентируясь по стандартному мечу. И все.
123.jpg
 

DreamGothic

Участник форума
Регистрация
10 Апр 2013
Сообщения
266
Благодарности
182
Баллы
210
Самый примитивный вариант - импортировать стандартное оружие (например меч) и затем пристроить к нему новый меч. Потом нужно будет настроить пивот, ориентируясь по стандартному мечу. И все.
Посмотреть вложение 53850
Т.е например, если хочу одноручный - то нужно портировать к новому мечу дефолтное одноручное? Можно подробнее пожалуйста, если время есть конечно. *Friendship*
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Т.е например, если хочу одноручный - то нужно портировать к новому мечу дефолтное одноручное? Можно подробнее пожалуйста, если время есть конечно. *Friendship*
Да, чтобы сохранить привязку к костям берите любое одноручное и по его модели делайте Pivot.
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.168
Баллы
340
Т.е например, если хочу одноручный - то нужно портировать к новому мечу дефолтное одноручное? Можно подробнее пожалуйста, если время есть конечно. *Friendship*
Там сложного нет ничего.
Импортируем стандартное оружие. Импортируем новое, выбирая пункт - объединить. Выравниваем по стандартному новую модель. Теперь, стандартное чуть сдвигаем вбок, чтобы визуально сцену контролировать и модели не сливались.
Выбираем стандартное оружие. Идем на вкладку hierarchy на панели справа. Выбираем вкладку pivot.
Теперь активируем кнопку Affect pivot only и видим привязку центра модели к координатной сетке.
Выбираем новую модель и настраиваем ее пивот аналогично стандартной модели при помощи гизмо.
Экспортируем новую модель в kerrax 3ds в локальных координатах. Все.
345.jpg
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Подскажите пожалуйста, откуда этот орк? Скрин увидел здесь, но информации о нем нет.
m23tmNxB4Tg.jpg
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Подскажите пожалуйста, откуда этот орк? Скрин увидел здесь, но информации о нем нет.
m23tmNxB4Tg.jpg
Ну, судя по картинке, это орк - Нежить из Готики 1. Такие во 2 ой есть в храме Спящего и на кладбище орков.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Ну, судя по картинке, это орк - Нежить из Готики 1. Такие во 2 ой есть в храме Спящего и на кладбище орков.
Просто ни где раньше не видел ни его модели ни текстур, очень интересно, можно ли его где-то достать?
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Просто ни где раньше не видел ни его модели ни текстур, очень интересно, можно ли его где-то достать?
Эта модель орка оказываается есть в оригинальной готике UOW_BODY.MDM в пепке лежит в НВ.
Вот скрипт его.

prototype Mst_Default_UndeadOrcWarrior(C_Npc)
{
name[0] = "Орк-нежить";
guild = GIL_UNDEADORC;
aivar[AIV_MM_REAL_ID] = ID_UNDEADORCWARRIOR;
level = 40;
attribute[ATR_STRENGTH] = 100;
attribute[ATR_DEXTERITY] = 200;
attribute[ATR_HITPOINTS_MAX] = 400;
attribute[ATR_HITPOINTS] = 400;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
protection[PROT_BLUNT] = 150;
protection[PROT_EDGE] = 150;
protection[PROT_POINT] = 150;
protection[PROT_FIRE] = 150;
protection[PROT_FLY] = 50;
protection[PROT_MAGIC] = 0;
HitChance[NPC_TALENT_1H] = 80;
HitChance[NPC_TALENT_2H] = 80;
HitChance[NPC_TALENT_BOW] = 80;
HitChance[NPC_TALENT_CROSSBOW] = 80;
damagetype = DAM_EDGE;
fight_tactic = FAI_ORC;
senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL;
senses_range = PERC_DIST_MONSTER_ACTIVE_MAX;
aivar[AIV_MM_FollowTime] = FOLLOWTIME_MEDIUM;
aivar[AIV_MM_FollowInWater] = FALSE;
};
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Эта модель орка оказываается есть в оригинальной готике UOW_BODY.MDM в пепке лежит в НВ.
В оригинальной игре модель другая и отличается от той что указана на скриншоте выше.
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.910
Баллы
370
Подскажите пожалуйста, откуда этот орк? Скрин увидел здесь, но информации о нем нет.
m23tmNxB4Tg.jpg
Это ранняя модель орка нежити. Аналогично и с этим орочьим шаманом, которого потом переделают:
UlkAjJP_ziM.jpg

Насколько я знаю Bezio занимался восстановлением этого орка и скорее всего он его уже доделал, как и много чего другого...
 
Сверху Снизу