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

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

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

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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.045
Благодарности
1.831
Баллы
240
Спасибо окно убралось, но осталась необходимость нажимать кнопку Esc для полноценного выхода из режима сундука. С этим уже ничего не поделать?
Наверное это:

C++:
if (player->interactMob)
    player->interactMob->InterruptInteraction(player);
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Наверное это:

C++:
if (player->interactMob)
    player->interactMob->InterruptInteraction(player);
Нет.. не сработало. :oops:Все равно для выхода в меню надо нажать дополнительный раз эскейп


В коде есть такая функция. Мб это?


void oCMobContainer :: Reset()
{
// [KARK] Truhe wieder schliessen (Deckel zu)
zCModel *mobModel = GetModel();
if ((state == 1) && (mobModel))
{
zTModelAniID closeAniID = mobModel->GetAniIDFromAniName("T_S1_2_S0"); // "Schliessen"-Ani finden
if (closeAniID != zMDL_ANI_ID_ILLEGAL)
{
if ( mobModel->GetNumActiveAnis() > 1) // Random-Anis kцnnten durch AI_PlayAni() aktiv sein
{
mobModel->StopAnisLayerRange();
}
mobModel->StartAni(closeAniID); // Deckel zu Ani abspielen
}
}

state = 0;
state_target = 0;

// [BENDLIN] reset direction
SetDirection(MOBINTER_DIRECTION_NONE);
}
 
Последнее редактирование:

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Вобщем, если интересно - контейнер нельзя закрывать пока не выполняется условие isopen. Т.е. пассивный и активный контейнеры должны сначала полностью открыться. Странно все это конечно, но это уже побороть просто.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.045
Благодарности
1.831
Баллы
240
Есть другая проблема - после какого-то патча сп перестал отображаться эффект горения. Причем как то странно - то горит то нет. Киллер мне давно говорил что это как то на ФПС завязано. Но так чем дальше в лес тем больше дров, ФПС меньше не станет. Вот тут даже юня бессильна
В движке есть лимит на 10000 отображаемых частиц. Никак с версией СП не связано.

Можно увеличить лимит таким патчем:
Union:
#engine [G2A]
    #patch [zLargeParticlesLimit]
        INT NewLimit = 100000;
        INT @0x005ACB85 = 960 * NewLimit
        INT @0x005ACBA2 = NewLimit
        INT @0x005ACBCF = NewLimit
        INT @0x005ADA72 = NewLimit
        INT @0x005ADA89 = NewLimit
    #/patch
#/engine
Сильно увеличивать не стоит, так как каждая частица весит 960 байт и весь лимит аллоцируется сразу.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
В движке есть лимит на 10000 отображаемых частиц. Никак с версией СП не связано.

Можно увеличить лимит таким патчем:
Union:
#engine [G2A]
    #patch [zLargeParticlesLimit]
        INT NewLimit = 100000;
        INT @0x005ACB85 = 960 * NewLimit
        INT @0x005ACBA2 = NewLimit
        INT @0x005ACBCF = NewLimit
        INT @0x005ADA72 = NewLimit
        INT @0x005ADA89 = NewLimit
    #/patch
#/engine
Сильно увеличивать не стоит, так как каждая частица весит 960 байт и весь лимит аллоцируется сразу.
Очень полезная инфа. Но я поступил другим образом - просто сделал новый спецэффект. который работает при любых условиях.
 

Scarecrow

Участник форума
Регистрация
11 Авг 2014
Сообщения
158
Благодарности
85
Баллы
220
Подскажите пожалуйста, а каким образом происходит смерть у нпс? Имею ввиду как в г2, если побить горожанина, наемника они потеряют сознание, а если бандита или ищущего, то они сразу к белиару отправляются)
это от гильдии зависит или от чего? Хотел бы подобное на г1 замутить, но не совсем понимаю, как это работает?
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.941
Благодарности
936
Баллы
275
// ********************************************************************************
// Убивается ли НПС по окончании жизни или переводится в бессознательное состояние
// ********************************************************************************

// ====================================================================
// self - проверяемый НПС
// other - преступник, убивающий НПС
// --------------------------------------------------------------------
// Возвращаемое значение:
// TRUE - НПС не убивается преступником, FALSE - убивается.
// ====================================================================

Daedalus:
func int C_DropUnconscious()
{
// если преступник монстр или Черный маг (Ищущий) или бандит или преступнику разрешено убить НПС
if(other.guild > GIL_SEPERATOR_HUM) || (other.guild == GIL_DMT) || (other.guild == GIL_BDT) || (other.aivar[AIV_DropDeadAndKill] == TRUE)
{
// НПС будет убит
return FALSE;
};
// если НПС человек
if(self.guild < GIL_SEPERATOR_HUM)
{
// если НПС не Черный маг и не бандит и его не разрешено убивать преступнику
if(self.guild != GIL_DMT) && (self.guild != GIL_BDT) && (self.aivar[AIV_DropDeadAndKill] == FALSE)
{
// НПС будет безсознания
return TRUE;
};
};
// НПС будет убит
return FALSE;
};
подробнее https://worldofplayers.ru/threads/37749/page-2
 

Czudak

Участник форума
Регистрация
29 Июн 2019
Сообщения
180
Благодарности
95
Баллы
125
Yo, boyos. I have a weird problem with sending a passive perception signal to nearby NPCs.

Mainly, there's that G_Picklock function in the scripts that, if the picklock snapped during the procedure, is responsible for making a roll and then sending a "perc ping":

Daedalus:
    else if(bBrokenOpen)
    {
        Snd_Play3d(self,"PICKLOCK_BROKEN");
        Print(Print_Picklock_Broken);
        Rnd = Hlp_Random(100);
        if(Rnd >= 25)
        {
            Npc_SendPassivePerc(hero,PERC_ASSESSQUIETSOUND,hero,hero);
        };
    }

This is the function from the original, not modded scripts, by the way, and it works flawlessly, waking up nearby NPCs if the picklock broke.
I added an armor that's supposed to nullify the issue of waking up nearby NPCs and modified the function as followed:

Daedalus:
    else if(bBrokenOpen)
    {
        Snd_Play3d(self,"PICKLOCK_BROKEN");
        Print(Print_Picklock_Broken);
        Rnd = Hlp_Random(100);
        if(Rnd >= 25)
        {
            var C_Item ThievingArmor;
            ThievingArmor = Npc_GetEquippedArmor(hero);
            if(Npc_HasEquippedArmor(hero))
            {
                if(Hlp_IsItem(ThievingArmor,ItAr_Thievero))
                {
                    PrintScreen(Print_Picklock_Muffled,-1,-1,Font_Screen,2);
                }
                else
                {
                    Npc_SendPassivePerc(hero,PERC_ASSESSQUIETSOUND,hero,hero);
                };
            }
            else
            {
                Npc_SendPassivePerc(hero,PERC_ASSESSQUIETSOUND,hero,hero);
            };
        };
    }
However, in this situation, even if the picklock broke during the procedure and the player didn't wear an armor or not that specific one, the passive perception function failed to wake up the nearby NPCs every single time. For the debugging purposes, I made 100 failed picklock attempts and altered the Rnd >= 1 entry as well, and nothing changed. Also, the PrintScreen function displays the relevant message correctly if that armor was put on; none if there's no armor or not that particular one.

Any suggestions why is this happening?

Slavemaster Sorry for spamming your Union thread, by the way. xD
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.045
Благодарности
1.831
Баллы
240

Czudak

Участник форума
Регистрация
29 Июн 2019
Сообщения
180
Благодарности
95
Баллы
125
Czudak, there is no bug in the code you show. Debug perception function: is it assigned to an NPC, is player in NPC's sense range, is it called. If called why it doesn't awake the NPC.


Думаю, этой функции нет в Г1
Yes, to all three. I "print tested" all the steps, checked the function call via the expanded Marvin Helper (it works here), and everything was done within the 1000 range. Screw that, I will take care of that later, and thanks!
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
Думаю, этой функции нет в Г1
Нет. Движок Г1 не умеет так работать.

Возможно, он таки есть. Но не очевидный. ;)

Czudak, думаю, причина того, что в новом варианте неписи перестают реагировать на посылку восприятия, заключается в самом факте получения ссылки на экипированный доспех. В Г2 это совсем не очевидно. Дело в том, что восприятие "тихих звуков" PERC_ASSESSQUIETSOUND изначально было заточено не только на "звук шагов", но и на "звук упавшего на пол предмета". Во всяком случае, в Г1 это так. Думаю, в Г2 что-то от этого могло остаться. Так вот, если имеется действительная ссылка на предмет item, то движок может посчитать, что речь идёт именно о факте падения предмета, а не о звуке шагов.
В функции-обработчике восприятия B_AssessQuietSound есть блокиратор реакции:
Daedalus:
if(Npc_CanSeeSource(self))
{
    return;
};
Думаю, здесь как раз может определяться видимость до предмета item, ссылка на который была получена ранее.

Это всего лишь предположение, которое нужно проверять.

Хотел бы подобное на г1 замутить, но не совсем понимаю, как это работает?
В Г1 это возможно только с помощью костылей. Во вложении возможный вариант реализации.
 

Вложения

  • ZS_Unconscious.d
    20,2 KB · Просмотры: 4
Последнее редактирование:

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.941
Благодарности
936
Баллы
275
возможно только с помощью костылей
категорически не согласен. решения как правило ElderGamer более элегантные, грамотные и проработанные, чем "стоковые". а вот некоторые "стоковые" функции такие как например убийства при массовом использование могут привести к крашу игры :)

так что скорее это тюнинг, чем костыль :)

ElderGamer мне кажется или тут еще проверки на главу не хватает? :)
Daedalus:
// Активирован режим смерти без добивания -> переход в состояние смерти при соблюдении ряда условий.
        else if(GameOptions & EnemyNonUnconsciousMode)
        {
            if(Npc_GetGuildAttitude(self,other) == ATT_HOSTILE)
            {
                if((self.guild == GIL_EBR) || (self.guild == GIL_GRD) || Npc_WasInState(self,ZS_Attack))
                {
                    // Начисление опыта, если победитель - ГГ или его партнёр.
                    if(Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER] == TRUE))
                    {
                        if(!self.aivar[AIV_WASDEFEATEDBYSC])
                        {
                            B_UnconciousXP();
                            self.aivar[AIV_WASDEFEATEDBYSC] = TRUE;
                        };
                    };
                
                    // Переход в состояние смерти, если победитель не человек или человек не в режиме кулачного боя.
                    if(!Npc_IsInFightMode(other,FMODE_FIST) || !C_NpcIsHuman(other))
                    {
                        Npc_SendPassivePerc(self,PERC_ASSESSMURDER,self,other);
                        Npc_ChangeAttribute(self,ATR_HITPOINTS,-1);
                        AI_StartState(self,ZS_Dead,0,"");
                        return;
                    };
                };
            };
        
            //if(self.npcType == Npctype_ROGUE)
            //if(self.aivar[AIV_IMPORTANT] == Npctype_ENEMY_OPTIONAL)
        };
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
тут еще проверки на главу не хватает?
Враждебное отношения между гильдиями может быть заменой номера главы, поскольку инициируется по сюжету, параллельно с сменой глав.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.045
Благодарности
1.831
Баллы
240
Возможно, он таки есть. Но не очевидный. ;)
Этот код работает у меня. Если баг и есть, то в другом месте.
В Г1 это возможно только с помощью костылей. Во вложении возможный вариант реализации.
По-нормальному, надо переписать функцию движка oCNpc::OnDamage_Condition. Например, взять её реализацию из Г2. Но это не уровень скриптов.
 

KirTheSeeker

Участник форума
Регистрация
18 Авг 2017
Сообщения
1.903
Благодарности
537
Баллы
275

Czudak

Участник форума
Регистрация
29 Июн 2019
Сообщения
180
Благодарности
95
Баллы
125
Slavemaster ElderGamer

I figured it out. It was the custom plugin that correctly identifies the animation walk mode for sneaking; I used it in the place of the somewhat botched function for BS_SNEAK detection of the original scripts that didn't work in certain places, including the function for assessing the player's presence in the room. That particular function was taking precedence in the script for objects picklocking procedure, hence why the perception ping was never sent: because I always sneaked around in the sneaking mode.

In other words, I fell victim of my own overbore bugfixing. xD Maybe someone could use this entry for future reference.
 

DocNight

Участник форума
Регистрация
6 Июн 2020
Сообщения
32
Благодарности
1
Баллы
60
Дорогие друзья погромисты (от слова погром), если кто шарит за рейтрейсинг. Хочу сделать такую хрень, чтобы направление луча исходило от кликнутого пикселя на экране вьюпорта (по сути сам луч идет от камеры, а направление задается от пикселя относительно угла обзора). Кто нибудь знает, как совершить подобное?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Дорогие друзья погромисты (от слова погром), если кто шарит за рейтрейсинг. Хочу сделать такую хрень, чтобы направление луча исходило от кликнутого пикселя на экране вьюпорта (по сути сам луч идет от камеры, а направление задается от пикселя относительно угла обзора). Кто нибудь знает, как совершить подобное?
zCWorld PickScene

ты што, эдитор пишешь?
 

DocNight

Участник форума
Регистрация
6 Июн 2020
Сообщения
32
Благодарности
1
Баллы
60
zCWorld PickScene

ты што, эдитор пишешь?
Ну что-то вроде того. Замена спейсера для мода Gothic 2 Online. Возможно запилю и под union для своего мода.
Кстати спасибо за ответ.
 
Сверху Снизу