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

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

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Возможно, помог бы тег event SwapMesh, возвращающий факел в правую руку.

К сожалению, не помогает. Трудно сказать, как этот факел обрабатывается движком. Тут не помешала бы консультация камрада Kerrax. Но на него, похоже, не действуют теги, предназначенные для работы с предметами, его нельзя удалить или подменить другим предметом. На такой факел действуют только теги для работы с факелами, то есть его можно сбросить на землю (DEF_DROP_TORCH) или временно убрать в инвентарь (DEF_INV_TORCH), но толку от этого мало.
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
62
Баллы
170
Я недавно столкнулся с такой проблемой:
Все персонажи в игре держат оружие и наносят удары как новички. Я играл в готику очень много, но не обращал на это внимание. Подскажите, так и должно быть или это баг или ещё что-то. В любом случае ещё скажите как можно сделать чтобы персонажи сражались по-другому.
 

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.450
Благодарности
780
Баллы
375
Я недавно столкнулся с такой проблемой:
Все персонажи в игре держат оружие и наносят удары как новички. Я играл в готику очень много, но не обращал на это внимание. Подскажите, так и должно быть или это баг или ещё что-то. В любом случае ещё скажите как можно сделать чтобы персонажи сражались по-другому.

Сражаются разные персонажи по-разному, за это отвечает строка
Код:
B_SetFightSkills(self,35);
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
62
Баллы
170
Сражаются разные персонажи по-разному, за это отвечает строка
Код:
B_SetFightSkills(self,35);
У персонажа в скриптах стоит 70, но он все равно сражается как новичок.
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
62
Баллы
170
Тогда без понятия. Жди кого-то еще.
Странная проблема. Я загрузил сохранение в 4 главе - в нём все сражаются нормально. Потом в этой же готике начал новую игру - те же персонажи сражаются как новички.
 

retej

Участник форума
Регистрация
27 Июн 2011
Сообщения
127
Благодарности
55
Баллы
175
Попробуй так:
в spell_LightningFlash.d в начале файла пропиши const int SPL_Cost_LightningFlash = *нужное число маны*; , а потом в файле поставь проверку
Код:
func int Spell_Logic_LightningFlash(var int manaInvested)
{
    if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
    {
        return SPL_SENDCAST;
    }
    else if(self.attribute[ATR_MANA] >= SPL_Cost_LightningFlash)
    {
        return SPL_SENDCAST;
    }
    else
    {
        return SPL_SENDSTOP;
    };
};
Так реализовано во Второй Готике, работать должно и в первой.

По-разному пробовал там прописывать, но нормальной работы добиться не удалось никак.
Похоже, что дело вообще не в этом. Например, если сильно уменьшить параметр time_per_mana, то сразу возникает эффект, когда бьет в самого ГГ. Хотя там и написано, что "урон в секунду", на деле идет привязка к расходу маны. Не изменив это, нормально закл работать все равно не будет. А вот как это переделать - не знаю.
 

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.450
Благодарности
780
Баллы
375
По-разному пробовал там прописывать, но нормальной работы добиться не удалось никак.
Похоже, что дело вообще не в этом. Например, если сильно уменьшить параметр time_per_mana, то сразу возникает эффект, когда бьет в самого ГГ. Хотя там и написано, что "урон в секунду", на деле идет привязка к расходу маны. Не изменив это, нормально закл работать все равно не будет. А вот как это переделать - не знаю.

Жди ЭлдерГеймера - он Первую Готику копает основательно, должен помочь.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
К сожалению, эта надежда не оправдается. :) Вчера покопался в скриптах, но наскоком не смог найти ответ на вопрос камрада retej. Нужно копать глубже, и не факт, что удастся что-то раскопать. Частично магия запрятана в движок. Не всё можно регулировать скриптами.
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.934
Благодарности
1.446
Баллы
465
Всегда, когда мне приходится пересоздавать mod-файл и протетстровать добавленное, в первый раз все нпс дерутся так, как будто у них уровень владения оружием "новичок" (хотя значение навыка может быть любым - 30, 50, 85 - не в этом суть). Зато когда после первого "вводного" диалога я сохранял игру, а затем загружал сейв, все становилось на свои места.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Всегда, когда мне приходится пересоздавать mod-файл и протетстровать добавленное, в первый раз все нпс дерутся так, как будто у них уровень владения оружием "новичок" (хотя значение навыка может быть любым - 30, 50, 85 - не в этом суть). Зато когда после первого "вводного" диалога я сохранял игру, а затем загружал сейв, все становилось на свои места.
https://worldofplayers.ru/threads/13198/page-57#post-584133
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
62
Баллы
170
У меня появился вопрос по диалогам:
Я создал такой диалог:
Код:
func void DIA_Andre_Woina_Info()
{
    AI_Output(other,self,"DIA_Andre_Woina_15_01"); 
    AI_Output(self,other,"DIA_Andre_Woina_08_02"); 
    AI_Output(self,other,"DIA_Andre_Woina_08_03"); 
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"War");
    B_StartOtherRoutine(Mil_331_Miliz,"War");
    B_StartOtherRoutine(Mil_330_Miliz,"War");
    B_StartOtherRoutine(Mil_329_Miliz,"War");
    B_StartOtherRoutine(Mil_328_Miliz,"War");
    B_StartOtherRoutine(Mil_327_Miliz,"War");
    B_StartOtherRoutine(Mil_312_Wulfgar,"War");
    B_StartOtherRoutine(Mil_313_Boltan,"War");
    B_StartOtherRoutine(Mil_314_Mortis,"War");
    B_StartOtherRoutine(mil_315_kasernenwache,"War");
    B_StartOtherRoutine(mil_316_wambo,"War");
    B_StartOtherRoutine(mil_317_ruga,"War");
    B_StartOtherRoutine(mil_318_miliz,"War");
    B_StartOtherRoutine(mil_319_pablo,"War");
    B_StartOtherRoutine(mil_320_miliz,"War");
    B_StartOtherRoutine(mil_321_rangar,"War");
    B_StartOtherRoutine(mil_322_miliz,"War");
    B_StartOtherRoutine(mil_323_miliz,"War");
    B_StartOtherRoutine(mil_324_peck,"War");
    B_StartOtherRoutine(mil_325_miliz,"War");
    B_StartOtherRoutine(mil_326_miliz,"War");
};
Что происходит: я подхожу к Андре, начинаю этот диалог и сразу происходит B_StartOtherRoutine, и пока идет диалог с Андре, эти персонажи по скрипту уходят. А можно ли сделать так, чтобы они начали идти только когда я закончил этот диалог?
 

Хелдар

Участник форума
Регистрация
3 Июл 2012
Сообщения
2.450
Благодарности
780
Баллы
375
У меня появился вопрос по диалогам:
Я создал такой диалог:
Код:
func void DIA_Andre_Woina_Info()
    AI_Output(other,self,"DIA_Andre_Woina_15_01");
    AI_Output(self,other,"DIA_Andre_Woina_08_02");
    AI_Output(self,other,"DIA_Andre_Woina_08_03");
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"War");
    B_StartOtherRoutine(Mil_331_Miliz,"War");
    B_StartOtherRoutine(Mil_330_Miliz,"War");
    B_StartOtherRoutine(Mil_329_Miliz,"War");
    B_StartOtherRoutine(Mil_328_Miliz,"War");
    B_StartOtherRoutine(Mil_327_Miliz,"War");
    B_StartOtherRoutine(Mil_312_Wulfgar,"War");
    B_StartOtherRoutine(Mil_313_Boltan,"War");
    B_StartOtherRoutine(Mil_314_Mortis,"War");
    B_StartOtherRoutine(mil_315_kasernenwache,"War");
    B_StartOtherRoutine(mil_316_wambo,"War");
    B_StartOtherRoutine(mil_317_ruga,"War");
    B_StartOtherRoutine(mil_318_miliz,"War");
    B_StartOtherRoutine(mil_319_pablo,"War");
    B_StartOtherRoutine(mil_320_miliz,"War");
    B_StartOtherRoutine(mil_321_rangar,"War");
    B_StartOtherRoutine(mil_322_miliz,"War");
    B_StartOtherRoutine(mil_323_miliz,"War");
    B_StartOtherRoutine(mil_324_peck,"War");
    B_StartOtherRoutine(mil_325_miliz,"War");
    B_StartOtherRoutine(mil_326_miliz,"War");
Что происходит: я подхожу к Андре, начинаю этот диалог и сразу происходит B_StartOtherRoutine, и пока идет диалог с Андре, эти персонажи по скрипту уходят. А можно ли сделать так, чтобы они начали идти только когда я закончил этот диалог?

Эти функции проигрываются в начале диалога. Обойти можно так:
Перед тем как должна проиграться анимация, вставь
Info_AddChoice(название диалога,"(продолжить)",*название ветви диалога, которая будет проигрываться, тут свое название лепишь любое*);
Вместо "продолжить" можешь вставить что-то, что подходит по контексту именно тебе, типа "наблюдать" и т.д.
Затем закрываешь там скобку };, а далее ниже
func void *название ветви диалога, которая будет проигрываться*()
а ниже уже сама ветвь диалога с необходимыми тебе эффектами и дальнейшими репликами, например
{
Код:
AI_Output(other,self,"DIA_Andre_Woina_15_02");
Npc_ExchangeRoutine(self,"War");
    B_StartOtherRoutine(Mil_331_Miliz,"War");
    B_StartOtherRoutine(Mil_330_Miliz,"War");
    B_StartOtherRoutine(Mil_329_Miliz,"War");
    B_StartOtherRoutine(Mil_328_Miliz,"War");
    B_StartOtherRoutine(Mil_327_Miliz,"War");
    B_StartOtherRoutine(Mil_312_Wulfgar,"War");
    B_StartOtherRoutine(Mil_313_Boltan,"War");
    B_StartOtherRoutine(Mil_314_Mortis,"War");
    B_StartOtherRoutine(mil_315_kasernenwache,"War");
    B_StartOtherRoutine(mil_316_wambo,"War");
    B_StartOtherRoutine(mil_317_ruga,"War");
    B_StartOtherRoutine(mil_318_miliz,"War");
    B_StartOtherRoutine(mil_319_pablo,"War");
    B_StartOtherRoutine(mil_320_miliz,"War");
    B_StartOtherRoutine(mil_321_rangar,"War");
    B_StartOtherRoutine(mil_322_miliz,"War");
    B_StartOtherRoutine(mil_323_miliz,"War");
    B_StartOtherRoutine(mil_324_peck,"War");
    B_StartOtherRoutine(mil_325_miliz,"War");
    B_StartOtherRoutine(mil_326_miliz,"War");
};
Поскольку по сути начался новый диалог, то и эффекты проиграются как раз в нужном тебе моменте.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
А можно ли сделать так, чтобы они начали идти только когда я закончил этот диалог?

Причина в том, что скриптовая функция B_StartOtherRoutine содержит вызов функции AI_ContinueRoutine. Неписи изменяют распорядок, когда их инициализирует движок, или когда вызывается функция AI_ContinueRoutine. Как уже написано, функции B_StartOtherRoutine вызываются в самом начале диалога, поэтому и неписи переходят к новому распорядку в этот же момент. Нужно перенести вызов функций AI_ContinueRoutine в инстанцию диалога. Тогда переход к новому распорядку будет происходить в соответствии с очередью AI-команд после соответствующей фразы диалога.
 

Pag

Участник форума
Регистрация
7 Ноя 2013
Сообщения
98
Благодарности
62
Баллы
170
Причина в том, что скриптовая функция B_StartOtherRoutine содержит вызов функции AI_ContinueRoutine. Неписи изменяют распорядок, когда их инициализирует движок, или когда вызывается функция AI_ContinueRoutine. Как уже написано, функции B_StartOtherRoutine вызываются в самом начале диалога, поэтому и неписи переходят к новому распорядку в этот же момент. Нужно перенести вызов функций AI_ContinueRoutine в инстанцию диалога. Тогда переход к новому распорядку будет происходить в соответствии с очередью AI-команд после соответствующей фразы диалога.
1.А чем отлючаются B_StartOtherRoutine и Npc_Exchangeroutine?
2.Должно получится что-то вроде этого или я неправильно понял?
Код:
func void DIA_Andre_Woina_Info()
{
    AI_Output(other,self,"DIA_Andre_Woina_15_01");
    AI_Output(self,other,"DIA_Andre_Woina_08_02");
    AI_Output(self,other,"DIA_Andre_Woina_08_03");
    AI_StopProcessInfos(self);
    Npc_ExchangeRoutine(self,"War");
    B_StartOtherRoutine(Mil_331_Miliz,"War");
    AI_ContinueRoutine(Mil_331_Miliz,"War")
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
1.А чем отлючаются B_StartOtherRoutine и Npc_Exchangeroutine?

Второе - функция движка, первое - эта же функция, но в скриптовом расширении, обвешанная дополнительными условиями и возможностями. Используй поиск по проекту, чтобы посмотреть содержание функции B_StartOtherRoutine.

2.Должно получится что-то вроде этого или я неправильно понял?

Нет. По каждому неписю в инстанции диалога нужно прописать следующую конструкцию:
var C_Npc npc;
npc = Hlp_GetNpc(Mil_331_Miliz);
Npc_ExchangeRoutine(npc,"War");
AI_ContinueRoutine(npc);

Объявление переменной npc можно оставить в единственном числе и использовать эту переменную последовательно для всех неписей из списка.

В функции B_StartOtherRoutine есть дополнительные условия, предотвращающие нежелательные последствия, если непись, например, к моменту её вызова уже мёртв. Можно прописать нечто подобное и здесь.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Комрады, кто пользовался программой Gothic 3 Mesh Exporter? Пожскажите пжлста, вроде все вросто - но меши выдераются без текстуровки. Либо их как то надо линковать уже в максе или в блендере? Или может сам экспортер надо запускать из папки Г3? Или текстуры г3 надо сначала переформатировать в tga формат?:(
 

Strange


Модостроитель
Регистрация
25 Авг 2012
Сообщения
768
Благодарности
1.579
Баллы
280
Текстуры теряются при конвертации из *.3ds в *.x и нужно их сначала сконвертировать в tga с помощью Convertximg, а потом наложить текстуры заново в 3d редакторе. Но проблемы после конвертации в *.x будут не только с текстурами, но и с неправильным отображением мешей, но это тоже можно исправить в 3d редакторе.
 
Сверху Снизу