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

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

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

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

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
С анимациями все получилось, теперь другая проблема - функция B_AssessMagic() должна при поражении цели заклинанием запустить функцию соответствующию заклинанию в руке ГГ, в моем случае погрузить жертву в состояние ZS_Whirlwind, но при попадании в цель моего заклинания сама функция B_AssessMagic() не срабатывает, в чем может быть проблема?

P.S. Если погрузить жертву в состояние ZS_Whirlwind через B_AssessDamage() все работает.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
Как зафиксировать момент окончания одной инстанции диалога, если по его завершении не следует выход из режима диалога (появляется список инстанций других диалогов)?
Как пример можно попробовать эдак:
PHP:
var int Ulf_DIA_Wirte_Action;//флаг окончания ключевой фразы у Ульфа

func int ZS_Talk_Loop()
{
    //если партнёр по разговору - Ульф
    if (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(NOV_602_Ulf))
    {
        //и если запланированного действия ещё не было
        if (Ulf_DIA_Wirte_Action == 0)
        {
            //и если ГГ начинает слушать ключевую речь от Ульфа
            if (Npc_KnowsInfo(other,DIA_Ulf_Wirte))
            {
                //и, естественнно, оба НПС закончили говорить, то
                if (!Npc_IsVoiceActive(self) && !Npc_IsVoiceActive(other))
                {
                    Print("DIA_Ulf_Wirte");//выводим тестовую надпись
                    Ulf_DIA_Wirte_Action = 1;//устанавливаем защиту от повтора действия
                };
            };
        };
    };
  
  
  
    if(InfoManager_HasFinished() && (zsTalkBugfix == TRUE))
    {
        self.aivar[AIV_INVINCIBLE] = FALSE;
        other.aivar[AIV_INVINCIBLE] = FALSE;
        self.aivar[AIV_NpcStartedTalk] = FALSE;
        self.aivar[AIV_TalkedToPlayer] = TRUE;
        if(self.guild < GIL_SEPERATOR_HUM)
        {
            B_StopLookAt(self);
            Mdl_StartFaceAni(self,"S_NEUTRAL",1,-1);
        };
        if(self.guild == GIL_DRAGON)
        {
            AI_PlayAni(self,"T_TALK_2_STAND");
        };
        return LOOP_END;
    }
    else
    {
        zsTalkBugfix = TRUE;
        return LOOP_CONTINUE;
    };
};
Добавленный код выделен комментариями.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
при попадании в цель моего заклинания сама функция B_AssessMagic() не срабатывает
Уточни. Не вызывается функция B_AssessMagic() или она вызывается, но не срабатывает проверка Npc_GetActiveSpell(other)?
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Она не вызивается.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Всем привет. Начал изучать скриптинг для готики. Взял gothic.dat сделал его декомпиляцию для теста внес несколько правок в существующие скрипты. Выполнил компиляцию с помощью безопасной замены файлов заменил файлы в игре. Но когда зашел в игру что бы проверить работу нововедений все осталось как и было. изменения не произошли. Обратился за помощью к MaGoth он посоветовал написать сюда. Вообщем у меня стоит мод L'HIVER Edition + d11 рендер. Совет MaGoth пересобрать скрипты мода но я не знаю как это сделать. Подскажите пожалуйста как мне пересобрать скрипты мода ??
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Пересобирать нужно не скрипты, а мод-файл Элхейвера, с заменой в нем старых скриптов на свеже скомпилированные тобой..

Тема в помощь:
https://worldofplayers.ru/threads/37709/

То есть если мне необходимо внести правки в игру с модом то мне необходимо сначала развернуть мод файл. Потом найти в нем gothic.dat закинуть его в сорцер декомпилировать внести правки в скрипты потом закомпилировать обратно заменить файлы в том месте где у меня развернут мод потом мод снова запаковать и все будет пучком ??


Все спасибо большое а помощь разобрался во всем )))
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
Она не вызивается.
Получается, что твоё заклинание не воспринимается движком, как магия. Что-то ты не прописал, походу. Опиши, что и где прописывал в скриптах при введении нового заклинания.

все будет пучком
Да. Но есть ещё параллельный способ, на мой взгляд, более удобный. Можно запаковать новую версию скриптов (gothic.dat) в отдельный том и не париться с пересобиранием томов мода. Новый том нужно прописать в ини-файле мода. Там есть строчка, в которой перечислены все тома мода. Нужно дописать туда новый том через ДВА пробела. Новые скрипты подхватятся движком игры вместо старых при условии, что временной штамп нового тома более поздний, чем у томов мода. А это наверняка случится, если не менять временной штамп при упаковке нового тома, оставив его по-умолчанию (текущая дата).
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Вот скрипт Г2
Код:
instance SPELLFX_WHIRLWIND(CFX_BASE_PROTO)
{
    visname_s = "MFX_WHIRLWIND_INIT";
    emtrjmode_s = "FIXED";
    emtrjoriginnode = "ZS_RIGHTHAND";
    emtrjtargetnode = "BIP01 FIRE";
    emtrjloopmode_s = "NONE";
    emtrjeasefunc_s = "LINEAR";
    emactioncollstat_s = "COLLIDE";
    emactioncolldyn_s = "COLLIDE CREATEONCE";
    emfxcolldyn_s = "spellFX_Whirlwind_TARGET";
    emfxcolldynperc_s = "spellFX_Whirlwind_SENDPERCEPTION";
    emtrjtargetrange = 20;
    emtrjtargetelev = 0;
    emfxinvestorigin_s = "spellFX_Whirlwind_Invest";
};

instance SPELLFX_WHIRLWIND_KEY_OPEN(C_PARTICLEFXEMITKEY)
{
    lightrange = 0.01;
};

instance SPELLFX_WHIRLWIND_KEY_INIT(C_PARTICLEFXEMITKEY)
{
    visname_s = "MFX_WHIRLWIND_INIT";
    lightrange = 0.01;
    scaleduration = 0.5;
};

instance SPELLFX_WHIRLWIND_KEY_INVEST_1(C_PARTICLEFXEMITKEY)
{
    visname_s = "MFX_WHIRLWIND_GROW";
    lightrange = 0.01;
    pfx_visalphastart = 100;
};

instance SPELLFX_WHIRLWIND_KEY_CAST(C_PARTICLEFXEMITKEY)
{
    pfx_visalphastart = 150;
    emtrjmode_s = "TARGET";
    emtrjeasevel = 400;
    emcheckcollision = 1;
    lightrange = 100;
    sfxid = "MFX_Windfist_Cast";
    sfxisambient = 1;
};

instance SPELLFX_WHIRLWIND_KEY_COLLIDE(C_PARTICLEFXEMITKEY)
{
    emtrjeasevel = 1e-006;
    pfx_ppsisloopingchg = 1;
};

instance SPELLFX_WHIRLWIND_COLLIDE(CFX_BASE_PROTO)
{
    visname_s = "MFX_ICESPELL_Collide";
    visalpha = 1;
    emtrjmode_s = "FIXED";
    sfxid = "MFX_ICECUBE_COLLIDE";
};

instance SPELLFX_WHIRLWIND_INVEST(CFX_BASE_PROTO)
{
    emtrjmode_s = "FIXED";
    sfxid = "MFX_WHIRLWIND_INVEST";
    sfxisambient = 1;
};

instance SPELLFX_WHIRLWIND_SOUND(CFX_BASE_PROTO)
{
    visname_s = "";
    emtrjmode_s = "FIXED";
    sfxid = "MFX_WHIRLWIND_INVEST";
    sfxisambient = 1;
};

instance SPELLFX_WHIRLWIND_TARGET(CFX_BASE_PROTO)
{
    emtrjoriginnode = "BIP01";
    visname_s = "MFX_Whirlwind_Target";
    visalpha = 1;
    emtrjmode_s = "FIXED";
    sfxid = "MFX_Whirlwind_Target";
    sfxisambient = 1;
};

instance SPELLFX_WHIRLWIND_SENDPERCEPTION(CFX_BASE_PROTO)
{
    visname_s = "";
    sendassessmagic = 1;
};
А так как в Г1 класса emfxcolldynperc_s нет я просто удалил эту строку, а sendassessmagic = 1; перенести забыл*facepalm* В общем теперь все работает.
Вот только не пойму одного - в аддоне смерч находился над кулаком ГГ, а у меня чуть ниже, хотя скрипты перенесены один в один, как смерч повыше?
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
Вот только не пойму одного - в аддоне смерч находился над кулаком ГГ, а у меня чуть ниже, хотя скрипты перенесены один в один, как смерч повыше?
Не исключено, что при декомпиляции анимаций ты получил ASC, в котором слот ZS_RIGHTHAND ориентирован по умолчанию, а в оригинале Г2а аниматор его смещал в 3D-редакторе до экспорта.
Можно попробовать самому покрутить слот в максе, подбирая наиболее удобное положение спелла.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
Вот только не пойму одного - в аддоне смерч находился над кулаком ГГ, а у меня чуть ниже, хотя скрипты перенесены один в один, как смерч повыше?
Честно говоря, я не большой знаток аддона, предпочитаю оригинал Г2. Заклинанием "Смерч" не пользовался, поэтому смутно представляю, как оно работает. Предполагаю, что ты говоришь о pfx-эффекте в руке. Эффект аттачится к слоту руки. Поднять его выше можно двумя способами: 1. изменить положение слота в анимации. 2. откорректировать pfx-эффект. Думаю, второе проще.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Всем добрый вечер. Скажите пожалуйста вот создал ты какой либо предмет а как его выложить в игру ?? Я имею в виду не просто прописать через консоль и получить его разово. А именно выложить что бы потом найти его в игре ?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
А именно выложить что бы потом найти его в игре ?
Если нужно, чтобы предмет находился в инвентаре непися, то добавить его туда можно скриптами, функцией CreateInvItem. Также скриптами можно вставить предмет на вейпоинт или фрипоинт функцией Wld_InsertItem. Но на вейпоинт вставлять не рекомендую, предмет будет висеть в воздухе. Да и в случае с фрипоинтом это может случиться, если положение фрипоинта в игровом мире настроено неправильно. Также можно вставить предмет в контейнер (сундук), если контейнер имеет уникальное название, функцией Mob_CreateItems. Ну, и ещё можно вставить предмет в игровой мир непосредственно, редактируя игровой мир.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Если нужно, чтобы предмет находился в инвентаре непися, то добавить его туда можно скриптами, функцией CreateInvItem. Также скриптами можно вставить предмет на вейпоинт или фрипоинт функцией Wld_InsertItem. Но на вейпоинт вставлять не рекомендую, предмет будет висеть в воздухе. Да и в случае с фрипоинтом это может случиться, если положение фрипоинта в игровом мире настроено неправильно. Также можно вставить предмет в контейнер (сундук), если контейнер имеет уникальное название, функцией Mob_CreateItems. Ну, и ещё можно вставить предмет в игровой мир непосредственно, редактируя игровой мир.

Вот как раз вариант с редактированием мира мне и нужен. Расскажи как это делать ??
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
Вряд ли одним постом можно рассказать о работе в Спейсере. Спейсер - это прилагаемая к мод-киту программа редактирования игрового мира. Несколько уроков есть в этой ветке. Также для вопросов по Спейсеру есть параллельная тема.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Вряд ли одним постом можно рассказать о работе в Спейсере. Спейсер - это прилагаемая к мод-киту программа редактирования игрового мира. Несколько уроков есть в этой ветке. Также для вопросов по Спейсеру есть параллельная тема.

значит все таки с помощью спейсера надо решать этот вопрос ... Скажи пожалуйста а из за чего спейсер может не запускаться совсем ?? Я когда устанавливал готику при запуске она у меня была на немецком мне посоветовали удалить файл GothicGame.mod Кажется так он назвался. Из за отсутствия этого файла может не работать спейсер ?? Если да то как востановить этот файл без переустановки игры ??
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.182
Баллы
525
Переустанови мод-кит.
 

narutix

Участник форума
Регистрация
29 Июн 2011
Сообщения
99
Благодарности
7
Баллы
175
Переустанови мод-кит.
Спасибо за совет обязательно воспользуюсь.

Другой вопрос. Скажите пожалуйста где хранятся диалоги персонажей ?? Я имею в виду сам текст.
 

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.226
Благодарности
1.907
Баллы
370
Постоянно слетают координаты размещения мешей(psicamp, surface и т.д) в файле world.zen при редактировании, может это связано с тем что я их двигаю в режиме объекта? Потому что я их сохранял и в мировой и в локальной системе координат, всё равно слетают координаты, есть ли способ при экспорте восстановить координаты которые были при импорте?
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
Спасибо за совет обязательно воспользуюсь.

Другой вопрос. Скажите пожалуйста где хранятся диалоги персонажей ?? Я имею в виду сам текст.
C:\Program Files (x86)\GothicSourcer V3.14\Gothic Projects\SolРЕБАЛАНС 2\PrjGOTHIC\Story\Dialoge но на твоём компе путь может быть другой
 
Сверху Снизу