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

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

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
есть Маг Огня Горакс и Маг Огня Исгарот. можно ли сделать что бы у них ассортимент товаров был синхронизирован?
Синхронизированным вряд ли, а что бы общим, то в скриптах задается, но для всех магов сразу, или отдельно.. если я правильно помню..
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
элегантное решение
Элегантно - это создать им общий инвентарь, например сундук. Можно конечно и проще, но тоже действенно - указать кто именно из нпс будет являться торговцем.

Реализация подмены на уровне движка:
C++:
// хук на функцию выставления торговца по адресу 0x0068B180 с переадресацией в метод oCViewDialogTrade::SetNpcLeft
CInvoke<void(__fastcall*)(oCViewDialogTrade*, oCNpc*)> pSetNpcLeft( 0x0068B180, &oCViewDialogTrade::SetNpcLeft );

// сюда будем писать нашего торговца
static oCNpc* s_pNpcTraderRef = NULL;

// эта функция будет вызываться из скрипта
int AI_SetTradeRef()
{
    // получаем инстанцию из аргумента и приводитм ее к объекту oCNpc
    oCNpc* l_pSelf = zDYNAMIC_CAST<oCNpc>( (zCVob*)parser->GetInstance() );
    // присваиваем нашему торговцу указатель
    s_pNpcTraderRef = l_pSelf;
    return 0;
}

// эта функция будет вызываться движком благодаря хуку
void oCViewDialogTrade::SetNpcLeft( oCNpc* pNpc )
{
    // проверяем была ли у нас запись нпс
    if( s_pNpcTraderRef )
    {
        // указываем нашему торговцу пару - глав. героя
        s_pNpcTraderRef->SetTradeNpc( player );
        // вызываем движковую реализацию метода, но с нашим аргументом
        pSetNpcLeft( this, s_pNpcTraderRef );
        // обнуляем торговца после завершения операции
        s_pNpcTraderRef = NULL;
    }
    else
        // если никаких действий не требуется, вызываем
        // оригинальную функцию с оригинальными аргументами
        pSetNpcLeft( this, pNpc );
}

C++:
void Game_DefineExternals () {
    // регистрируем скриптовую функцию в движке
    parser->DefineExternal ("AI_SetTrader", AI_SetTradeRef, zPAR_TYPE_VOID, zPAR_TYPE_INSTANCE,    zPAR_TYPE_VOID);
}

Реализация скрипта:
Этот код нужно подставлять в диалоге перед торговлей, например в DIA_Rupert_Trade_Info. Тогда при попытке торговать с рупертом в качестве цели будет установлен Игнац со своим набором товаров.
Daedalus:
    var C_Npc Trd_Ignaz;
    Trd_Ignaz = Hlp_GetNpc( VLK_498_Ignaz );
    AI_SetTrader( Trd_Ignaz );

 
Последнее редактирование:

Bappjlop

Участник форума
Регистрация
27 Апр 2018
Сообщения
22
Благодарности
14
Баллы
170
Привет готоманам и мододелам!
Мой вопрос заключается в следующем. Если вы убивали Ворона в Яркендаре, то вы должны знать, что с некоторым шансом по вам бьет молния, когда вы ударяете Ворона.
Вот скрипт, который выполняет эту функцию
Код:
var int RavenBlitz;

func void B_BeliarsWeaponSpecialDamage(var C_Npc oth,var C_Npc slf)
{
    var int RavenRandy;
    var int DamageRandy;
    if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Raven))
    {
        Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",slf,slf,0,0,0,FALSE);
        if(RavenBlitz <= 0)
        {
            Wld_PlayEffect("spellFX_BELIARSRAGE",oth,oth,0,0,0,FALSE);
            B_MagicHurtNpc(slf,oth,50);
            RavenBlitz += 1;
        }
        else if(RavenBlitz >= 3)
        {
            RavenRandy = Hlp_Random(3);
            if(RavenRandy <= 50)
            {
                RavenBlitz = 0;
            };
        }
        else
        {
            RavenBlitz += 1;
        };
    }
    else if(Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
    {
        DamageRandy = Hlp_Random(100);
        if(C_ScHasReadiedBeliarsWeapon() && (DamageRandy <= BeliarDamageChance))
        {
            if(slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)
            {
                Wld_PlayEffect("spellFX_BELIARSRAGE",oth,oth,0,0,0,FALSE);
                B_MagicHurtNpc(slf,oth,100);
            }
            else if(slf.flags != NPC_FLAG_IMMORTAL)
            {
                Wld_PlayEffect("spellFX_BELIARSRAGE",slf,slf,0,0,0,FALSE);
                B_MagicHurtNpc(oth,slf,100);
            };
            Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",hero,hero,0,0,0,FALSE);
        };
        if(C_ScHasReadiedBeliarsWeapon() && (DamageRandy <= 50))
        {
            Wld_PlayEffect("spellFX_BELIARSRAGE_COLLIDE",hero,hero,0,0,0,FALSE);
        };
    };
};
Когда я беру Коготь Белиара и бью кого-нибудь, моего противника не бьет молнией. Как сделать так, чтобы моего противника било молнией?
 
Последнее редактирование модератором:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.277
Баллы
910
Опишу ситуацию.
Требуется исправить ошибки и баги в моде. Исходники (последней версии) мода находятся у человека, с которым не возможно связаться.
Самим исправлять и восстанавливать из более старого исходника не очень, потребуется уйма времени на восстановление.
Кто сможет помочь декомпилировать Gothic.dat самого мода? В нем расширители Ikarus+LEGO.
Датник с бинарником скину в ЛС, смотря кто отзовется.
P.S. сам пробовал, естественно висняк при декомпиле.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.154
Баллы
915
Забудь о декомпиляции скриптов с использованием расширителей. Если не можешь связаться с этим человеком, придётся работать со старыми исходниками.
 

Bappjlop

Участник форума
Регистрация
27 Апр 2018
Сообщения
22
Благодарности
14
Баллы
170
Не запускается Gothic AST. Установил MC VS 2017, обновил библиотеки. Открываю через GothicStarter_AST. Процесс готики висит, но с ним ниего не происходит. Что делать?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
Не информативно. VC17 не имеет отношения к AST. Либо не доставил патчи на оригинальную игру, либо сделал что-то лишнее. Впрочем сколько людей, столько и вариаций проблем, так что напиши подробно о своих действиях.
 

Bappjlop

Участник форума
Регистрация
27 Апр 2018
Сообщения
22
Благодарности
14
Баллы
170
Не информативно. VC17 не имеет отношения к AST. Либо не доставил патчи на оригинальную игру, либо сделал что-то лишнее. Впрочем сколько людей, столько и вариаций проблем, так что напиши подробно о своих действиях.
я скачал GOTHIC AST, содержимое папки System, которая в архиве, кинул в папку Готики System. Далее я прочитал, что для него нужны MS VS и библиотеки. Я обновил библиотеки, запускаю AST, но он, упрямый, не запускается ни одним лаунчером.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
Для начала убедись что игра g2notr. Скинь сюда ее хеш. Проверь запустится ли она с сп, ибо возможно у тебя баг рассылки сообщений окнам.
 

Bappjlop

Участник форума
Регистрация
27 Апр 2018
Сообщения
22
Благодарности
14
Баллы
170
Для начала убедись что игра g2notr. Скинь сюда ее хеш. Проверь запустится ли она с сп, ибо возможно у тебя баг рассылки сообщений окнам.
Ага, спасибо, AST запускается, но теперь вылетает ошибка Out of Memory.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
В AST нет утечек, сама по себе такая ошибка не возникает. Это уже ты какой-нибудь ерунды сверху понаставил, либо написал плагин забыв почистить за собой ненужную память.
 

Ласковый Мороз

Участник форума
Регистрация
21 Апр 2010
Сообщения
91
Благодарности
3
Баллы
155
Приветствую, очень прошу помощи от знающего. Как можно сделать так, чтобы прорисовка не превращалась в то, что показано на первом рисунке? Хотя бы сделать так, чтобы не было видно неба.

Опробовал создание порталов как кубом по всему периметру внутри, так и стандартным способом полигоном через отверстие "входа" в индур. Но порталы как будто не работают вообще и не реагируют, хотя эффект затухания текстуры при приближении к нему всё же присутствует. Я уже думал, что я делаю что-то не так, хотя делал согласно инструкции неромонта, ничего тяжелого нету. Потом пытался приделывать порталы из сингловых карт, но тоже никаких результатов не принесло. У меня сложилось впечатление, что причина в большом охвате. Потом.. Я читал про блокираторы света и зеркала, но не совсем понял как этим пользоваться, пытался тоже вставлять(блокиратор света), но ничего не получилось. Блокиратор света как делал. Просто склонировал индур, в данном случае сферу и дал ему соответствующее название материала, как в блокираторе света у храма Аданоса. Тоже результат нулёвый.


upd. А нет, вспомнил еще кое что. Пробовал разок брать порталы из сингла и они работали, но не так как надо. У меня есть сфера. Внутри сферы вот эта локация на которой я стою, она абсолютно открыто и не перекрыта полигонами по контуру. Через сферу проходит портал. Так вот, за локацией портал работает, но как только я приближаюсь к моей локации, портал тут же перестает работать. Хотя никаких предпосылок для этого вроде бы нету.
 

Вложения

  • a3e145a5df876329.png
    a3e145a5df876329.png
    923,5 KB · Просмотры: 168
  • fbb76dca7070cad2.png
    fbb76dca7070cad2.png
    923,4 KB · Просмотры: 168
Последнее редактирование:

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Привет. Как сделать чтобы НПС воспринимали помещение как свое и прогоняли от туда ГГ. Что за это отвечает?
 

Haart

Участник форума
Регистрация
24 Окт 2011
Сообщения
188
Благодарности
106
Баллы
185
Привет. Как сделать чтобы НПС воспринимали помещение как свое и прогоняли от туда ГГ. Что за это отвечает?
Привет. Смотрите в скриптах в сторону "PUBLICPLACE_FLAG_", в зене - это обычный вейпоинт в помещении.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
Как сделать чтобы НПС воспринимали помещение как свое и прогоняли от туда ГГ. Что за это отвечает?
Если помещение отделено от OUTDOOR-мира порталом, то нужно назначить помещению собственника (непися или гильдию). Делается это в скриптах с помощью функции Wld_AssignRoomToGuild для гильдии или Wld_AssignRoomToNpc для непися. Какое текстовое название помещения указать в качестве аргумента функции, определяется названием материала портала. Это название можно посмотреть в Спейсере в режиме редактирования меша.

При пересечении портала на входе в помещение неписям, находящимся поблизости, посылается восприятие PERC_ASSESSENTERROOM. Стандартный обработчик в Г1 - функция B_AssessEnterRoom и состояние ZS_ClearRoom. Реакция на проникновение в помещение, принадлежащее лично какому-нибудь неписю, в оригинале не прописана. Она работает только для помещений, принадлежащих гильдиям.
 

Моддер

Участник форума
Регистрация
17 Сен 2018
Сообщения
36
Благодарности
0
Баллы
165
Всех приветствую. Я начинающий моддер и, хочу понять пару вещей.
Я прописал НПС, дал ему точку, в которой он должен спавнится. Зашёл в Spacer 2 и нажал на замену данных скриптов в Gothic.scr. Результат - ошибка Violasion Access. Как быть? Мне очень хочется стать хоть каким-либо модмейкером
upload_2018-9-17_23-28-21.png
 

DreamGothic

Участник форума
Регистрация
10 Апр 2013
Сообщения
266
Благодарности
181
Баллы
210
Возможно как-нибудь, заставить оружие использовать разные наборы звуков (взмахов оружием)?

Т.е у дробящего свой набор звуков, у рубящего - свой...
 
Сверху Снизу