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

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

    Ссылка на конкурсную тему - тык

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
@MaGoth, да там и decompiled куча, а у текстур и того подавно...
декомпилы не важны, они ставятся с мдк и на работу игры не влияют.. а вот те что выше, могут крошить ее при их отсутствии..
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
А.... Тогда понял, молчу))
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
Ну, я могу, конечно, поставить все версии и скинуть список всех каталогов, после установки. Если очень надо.
 

MaGoth

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

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
Так, папки G2 оригинал
...\_work\Data\Anims\_compiled
...\_work\Data\Anims\mds_mobsi
...\_work\Data\Anims\mds_overlay
...\_work\Data\Meshes\_compiled
...\_work\Data\Music\newworld
...\_work\Data\Presets
...\_work\Data\Scripts\_compiled
...\_work\Data\Scripts\Content\Cutscene
...\_work\Data\Scripts\System\_intern
...\_work\Data\Scripts\System\Camera
...\_work\Data\Scripts\System\Menu
...\_work\Data\Scripts\System\Music
...\_work\Data\Scripts\System\Pfx
...\_work\Data\Scripts\System\Sfx
...\_work\Data\Scripts\System\VisualFx
...\_work\Data\Textures\_complied
...\_work\Data\Video
...\Data
...\Miles
...\Saves\current
...\System

В аддоне добавляется папка
...\_work\Data\Music\AddonWorld

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
ога, пока 1 косяк был в нашей г2..
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
Есть странность в смене рутины у НПС на ферме Онара.
Имеет НПС Корд, который находится в состоянии жрать/пить, поговорив с ним он меняет на состояние наблюдения, видно на скришноте
1568803894822.png
Говорим с ним и меняем ему рутину на вести игрока.
Daedalus:
INSTANCE DIA_Cord_IDZIEMY(C_INFO)
{
    npc          = Sld_805_Cord;
    nr           = 2;
    condition    = DIA_Cord_IDZIEMY_Condition;
    information  = DIA_Cord_IDZIEMY_Info;
    permanent    = FALSE;
    description    = "Я готов.";
};

FUNC int DIA_Cord_IDZIEMY_Condition()
{
    if(Npc_KnowsInfo(other, DIA_Cord_ZADANI_WK))
    {
        return TRUE;
    };
};

FUNC void DIA_Cord_IDZIEMY_Info()
{
    AI_Output(other, self, "DIA_Cord_IDZIEMY_15_00"); //Я готов.
    AI_Output(self, other, "DIA_Cord_IDZIEMY_03_01"); //Иди за мной.
    AI_StopProcessInfos(self);
    self.aivar[AIV_PARTYMEMBER] = TRUE;
    Npc_ExchangeRoutine (self, "idziemy_na_farme_Sekoba");
    CORDGOONE = TRUE;
};

func void rtn_idziemy_na_farme_Sekoba_805()
{
    TA_Guide_Player(5,0,20,00,"NW_FARM4_02");
    TA_Guide_Player(20,00,5,0,"NW_FARM4_02");
};
В ZS_Guide_Player есть очистка очереди этого НПС и он должен нормально приступать к нему, но нет. После разговора истукан стоит на месте, наблюдает.
Рутина меняется только при выходе из кухни теклы или из спальни или дома Онара (то есть на улице проблем нет)
Я думаю, что проблема кроется в порталах помещении и в скрипте B_AssessEnterRoom
Тема порталов для меня:confused:
Сам B_AssessEnterRoom не менялся и соответствует оригинальной Г2НВ
Daedalus:
func int B_AssessEnterRoom()
{
    var int portalguild;
    portalguild = Wld_GetPlayerPortalGuild();
    if(Npc_IsPlayer(other) && (Player_LeftRoomComment == TRUE) && (portalguild > GIL_NONE) && (portalguild != GIL_PUBLIC))
    {
        Player_LeftRoomComment = FALSE;
    };
    if(Npc_GetDistToNpc(self,other) > 1000)
    {
        return FALSE;
    };
    if(!Npc_IsInPlayersRoom(self) && !(Npc_GetPortalGuild(self) < GIL_NONE))
    {
        return FALSE;
    };
    if(Npc_IsInState(self,ZS_Attack))
    {
        return FALSE;
    };
    if(C_NpcIsGateGuard(self))
    {
        return FALSE;
    };
    if(!Npc_IsPlayer(other))
    {
        return FALSE;
    };
    if(self.npcType == NPCTYPE_FRIEND)
    {
        return FALSE;
    };
    if(Npc_GetAttitude(self,other) == ATT_FRIENDLY)
    {
        return FALSE;
    };
    if(C_BodyStateContains(other,BS_SNEAK) || C_BodyStateContains(other,BS_STAND))
    {
        if(!Npc_CanSeeNpc(self,other) && !Npc_IsInState(self,ZS_ObservePlayer))
        {
            return FALSE;
        };
    };
    if(self.guild == GIL_NONE)
    {
        return FALSE;
    };
    if(!Npc_IsInPlayersRoom(self) && Npc_IsInState(self,ZS_Sleep))
    {
        return FALSE;
    };
    if((portalguild == GIL_PUBLIC) && Npc_IsInPlayersRoom(self))
    {
        if(Npc_IsInState(self,ZS_ObservePlayer))
        {
            return FALSE;
        };
        if(C_BodyStateContains(self,BS_LIE))
        {
            B_MM_DeSynchronize();
        };
        if(Npc_IsInState(self,ZS_Potion_Alchemy) || Npc_IsInState(self,ZS_Read_Bookstand) || Npc_IsInState(self,ZS_Sit_Bench) || Npc_IsInState(self,ZS_Sit_Campfire) || Npc_IsInState(self,ZS_Sit_Chair) || Npc_IsInState(self,ZS_Sit_Throne) || Npc_IsInState(self,ZS_Sleep) || Npc_IsInState(self,ZS_Smalltalk) || Npc_IsInState(self,ZS_Smoke_Joint) || Npc_IsInState(self,ZS_Stand_ArmsCrossed) || Npc_IsInState(self,ZS_Stand_Drinking) || Npc_IsInState(self,ZS_Stand_Eating) || Npc_IsInState(self,ZS_Stand_Guarding) || Npc_IsInState(self,ZS_Stand_WP))
        {
            Npc_ClearAIQueue(self);
            B_ClearPerceptions(self);
            if(C_BodyStateContains(self,BS_SIT))
            {
                AI_StartState(self,ZS_ObservePlayer,0,"");
            }
            else
            {
                AI_StartState(self,ZS_ObservePlayer,1,"");
            };
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    };
    if(C_NpcIsBotheredByPlayerRoomGuild(self))
    {
        Npc_ClearAIQueue(self);
        B_ClearPerceptions(self);
        AI_StartState(self,ZS_ClearRoom,1,"");
        return TRUE;
    };
    return FALSE;
};

func void B_AssessPortalCollision()
{
    var int formerportalguild;
    formerportalguild = Wld_GetFormerPlayerPortalGuild();
    if(B_AssessEnterRoom())
    {
        return;
    };
    if(!Npc_CanSeeNpc(self,other) && (C_BodyStateContains(other,BS_SNEAK) || C_BodyStateContains(other,BS_STAND)))
    {
        return;
    };
    Npc_PerceiveAll(self);
    if(Wld_DetectNpcEx(self,-1,ZS_ClearRoom,-1,FALSE))
    {
        return;
    };
    if((self.guild == formerportalguild) || (Wld_GetGuildAttitude(self.guild,formerportalguild) == ATT_FRIENDLY))
    {
        if((Wld_GetGuildAttitude(self.guild,other.guild) == ATT_FRIENDLY) || (Npc_IsPlayer(other) && (self.npcType == NPCTYPE_FRIEND)))
        {
            return;
        };
        if(self.guild == GIL_NONE)
        {
            return;
        };
        if(((formerportalguild == GIL_MIL) || (formerportalguild == GIL_SLD)) && (Wld_GetGuildAttitude(self.guild,formerportalguild) == ATT_FRIENDLY))
        {
            B_Attack(self,other,AR_LeftPortalRoom,0);
            return;
        }
        else
        {
            self.aivar[AIV_SeenLeftRoom] = TRUE;
            Npc_ClearAIQueue(self);
            B_ClearPerceptions(self);
            AI_StartState(self,ZS_ObservePlayer,0,"");
            return;
        };
    };
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Рутина меняется только при выходе из кухни теклы или из спальни или дома Онара (то есть на улице проблем нет)
Я думаю, что проблема кроется в порталах помещении и в скрипте B_AssessEnterRoom
Похоже, в моде кухня назначена в собственность какой-то гильдии, к которой ГГ не принадлежит. Если это так и задумано, то можно попробовать включить состояние ZS_Guide_Player в исключения:
Daedalus:
    ...
    if(Npc_IsInState(self,ZS_Attack))
    {
        return FALSE;
    };
    if(Npc_IsInState(self,ZS_Guide_Player))
    {
        return FALSE;
    };
    ...

С другой стороны, в оригинале в состоянии ZS_Guide_Player восприятие PERC_ASSESSENTERROOM не активировано. Если его добавили в моде, то это зачем-то нужно. Может быть, стоит создать для Корда альтернативное состояние гида, в котором восприятие PERC_ASSESSENTERROOM не активировано. Или для обычных неписей оставить состояние гида в исходном виде, а для особого случая создать альтернативное состояние с активированным восприятием.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
Увы, в моде восприятия нет
Daedalus:
func void B_AssessGuidePlayer()
{
    if(Npc_GetDistToNpc(self,hero) > 800)
    {
        if(Npc_GetDistToWP(self,self.wp) < Npc_GetDistToWP(hero,self.wp))
        {
            Npc_ClearAIQueue(self);
            AI_Standup(self);
            B_TurnToNpc(self,hero);
        };
        if((Npc_GetDistToNpc(self,hero) > 1200) && (self.aivar[AIV_EnemyOverride] == TRUE) && (Npc_GetAttitude(self,hero) == ATT_HOSTILE))
        {
            self.aivar[AIV_EnemyOverride] = FALSE;
        };
    }
    else
    {
        B_AssessPlayer();
    };
};

func void B_AssessGuideFightSound()
{
    if(Npc_IsPlayer(other) || Npc_IsPlayer(victim))
    {
        B_AssessFightSound();
    };
};

func void ZS_Guide_Player()
{
    Perception_Set_Minimal();
    B_ResetAll(self);
    self.senses = SENSE_SEE | SENSE_HEAR | SENSE_SMELL;
    self.senses_range = 2000;
    //Npc_SetPercTime(self,1);
    Npc_SetPercTime(self,1.0);
    Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessGuidePlayer);
    Npc_PercEnable(self,PERC_ASSESSENEMY,B_AssessEnemy);
    Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk);
    Npc_PercEnable(self,PERC_MOVEMOB,B_MoveMob);
    Npc_PercEnable(self,PERC_ASSESSFIGHTSOUND,B_AssessGuideFightSound);
};

func int ZS_Guide_Player_Loop()
{
    if((Npc_GetDistToNpc(self,hero) > 800) && (Npc_GetDistToWP(self,self.wp) < Npc_GetDistToWP(hero,self.wp)))
    {
        B_AssessGuidePlayer();
    }
    else if(Npc_GetDistToWP(self,self.wp) > 300)
    {
        if(!C_BodyStateContains(self,BS_SWIM))
        {
            AI_SetWalkMode(self,NPC_RUN);
        };
        AI_GotoWP(self,self.wp);
    }
    else
    {
        B_TurnToNpc(self,hero);
    };
    return LOOP_CONTINUE;
};

func int ZS_Guide_Player_End()
{
    return TRUE;
};
Пока что в голове только привязать этот диалог ко времени (день), для небольшого реализма и сокрытие этого бага
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Гм, в Г2 состояние ZS_ObservePlayer может стартовать из функции ZS_Talk_End. Посмотри функцию C_NpcIsBotheredByPlayerRoomGuild. Там можно задать исключения.

Ах, да, ещё назначь Корду дружественное отношение к ГГ на время путешествия. Наверное, правильно будет сделать это и в диалоге, и в состоянии ZS_Guide_Player.
 

Quasar767

Участник форума
Регистрация
14 Июн 2017
Сообщения
130
Благодарности
15
Баллы
185
Добрый вечер,есть те кто бы мог сделать музыку для Готики 2? stg dls sty
 

Quasar767

Участник форума
Регистрация
14 Июн 2017
Сообщения
130
Благодарности
15
Баллы
185
Здравствуйте,кто может поделиться с исходником MusicInst.d? из мода Г2В,очень нужно
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
Так, интересно, можно ли добиться в Gothic 2 НВ такого эффекта, как заклинание "Пламя" из Skyrim? Т.е., непрерывной анимации направленной струи огня?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.175
Благодарности
6.155
Баллы
1.565
Так, интересно, можно ли добиться в Gothic 2 НВ такого эффекта, как заклинание "Пламя" из Skyrim? Т.е., непрерывной анимации направленной струи огня?
Пирокинез ведь....
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.771
Благодарности
557
Баллы
275
MEG@VOLT, надо подумать. Надо не с применением на непися, а так, без цели
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Приветствую всех! Подскажите пожалуйста как компилировать скрипты через Spacer? Gothic 2 Нв.
Я хочу добавить Quickslot, после прописки в Startup.d одну строку, через Sourcer v3.15 компилирует, но выкидывает в самой игре.
Стоит Ikarus & Lego, буду очень благодарен.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
Ulgamecid,
1. помещаешь скрипты в каталог игры в соответствии с тем как они идут в ГМДК к игре.
2. запускаешь стартер с постфиксом _мод, в нем выбираешь "репарсе скриптс"..
3. в каталоге скриптов они должны обновиться..

зы. в спейсере аналогичная менюшка с перекомпиляцией скриптов есть..
 

Ulgamecid

Участник форума
Регистрация
5 Дек 2014
Сообщения
19
Благодарности
6
Баллы
170
Ulgamecid,
1. помещаешь скрипты в каталог игры в соответствии с тем как они идут в ГМДК к игре.
2. запускаешь стартер с постфиксом _мод, в нем выбираешь "репарсе скриптс"..
3. в каталоге скриптов они должны обновиться..

зы. в спейсере аналогичная менюшка с перекомпиляцией скриптов есть..

Магот, подскажи как через Spacer это сделать, не хочу показаться глупым, но то что ты изложил, я понял на 50 % процентов :rolleyes:
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
Приветствую всех! Подскажите пожалуйста как компилировать скрипты через Spacer? Gothic 2 Нв.
Я хочу добавить Quickslot, после прописки в Startup.d одну строку, через Sourcer v3.15 компилирует, но выкидывает в самой игре.
Стоит Ikarus & Lego, буду очень благодарен.
Я вот тут писала инструкцию по компиляции скриптов с Икарусом.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.274
Баллы
910
Вроде все делаю верно, а текстура слетает с меша.
Импортирую исходник Itar_nov_L.mrm в 3Dmax
Меняю название материала на другое имя.
Удаляю старый bitmap, добавляю новый с новой текстурой в \_work\data\Textures
Проверяю, что текстура верно легла по сетке.
Эскпортирую в 3ds
Запускаю Spacer2
Открываю меш
Вижу свою текстурку и правильное название материала
Компилирую мир с Editormode (иначе не сохранить меш)
Сохраняю меш
Запаковываю в мод (В скрипте поправлен визуал доспеха)
В моде заместо текстуры ... fail
Давно менял текстуру у другого доспеха, проблем не было...

edit.
Поправил, забыл, что текстура в формате tga должна быть без -c в конце...
 
Последнее редактирование:
Сверху Снизу