dosinabox / g2nr_unofficial_update

Исходники скриптов, релизы, хотфиксы и тестовые версии неофициального обновления для игры "Готика 2: Ночь Ворона".
https://worldofplayers.ru/threads/36817
The Unlicense
13 stars 1 forks source link

удаление квестовых предметов у торговцев #266

Closed Kor-Angar closed 2 years ago

Kor-Angar commented 4 years ago

а можно в скриптах где удаляются шмотки у торговцев добавить проверки:

Kor-Angar commented 4 years ago

лук Боспера квестовый? арбалет паладина в 4 главе? арбалет Драгомира? меч Онд в 4 главе?

dosinabox commented 4 years ago

лук Боспера квестовый? меч Онд в 4 главе?

да

арбалет паладина в 4 главе? арбалет Драгомира?

нет

dosinabox commented 4 years ago
  • шмотки Грега
  • амулет Грега

не обязательно, потому что теперь их можно вернуть в Яркендаре, получив меньше опыта

Kor-Angar commented 4 years ago

не обязательно, потому что теперь их можно вернуть в Яркендаре, получив меньше опыта

когда в Ярике шмотки сдаются квест закрывается?

dosinabox commented 4 years ago

когда в Ярике шмотки сдаются квест закрывается?

При переходе в Яркендар квест пропадает из дневника (отменяется).

Kor-Angar commented 4 years ago

При переходе в Яркендар квест пропадает из дневника (отменяется).

тогда можно сделать проверку на диалог c Грегом в Ярике. так то Грег в Хориносе бессмертный у него его шмотки отобрать не получится :-)

Kor-Angar commented 4 years ago

кольца Тенгрона?

Kor-Angar commented 4 years ago

дневник корнелиуса письмо диего

dosinabox commented 3 years ago

дневник корнелиуса

Его забирает Хаген

письмо диего

Его забирает Гербрандт

Kor-Angar commented 3 years ago

image "рецепты, книга, портреты ГГ, кольцо от портала, каменные таблички, 6 кровавых чаш, голова друга"

dosinabox commented 3 years ago

кем убит?

Kor-Angar commented 3 years ago

героем избит

Kor-Angar commented 3 years ago

а почему чаши кровавые не удалились?

Kor-Angar commented 3 years ago

давай все таблички каменные отдавать Сатурасу в диалоге про убийство Ворона.

Kor-Angar commented 3 years ago

давай с портретов ГГ снимет метку квестовых. они же никакой роли не играют вообще

dosinabox commented 3 years ago

а почему чаши кровавые не удалились?

Из-за квестового флага

давай с портретов ГГ снимет метку квестовых. они же никакой роли не играют вообще

Так у них и цена нулевая

Kor-Angar commented 3 years ago

я думал ты в шапке галочки поставила там где исправила :-)

dosinabox commented 3 years ago

да, и тогда странно, потому что такая проверка уже есть:

B_ClearJunkTradeInv.d:

if(MIS_CassiaKelche == LOG_SUCCESS)
{
    Npc_RemoveInvItems(slf,ItMi_BloodCup_MIS,Npc_HasItems(slf,ItMi_BloodCup_MIS));
};

Хотя не странно, потому что квест может быть провелен. Добавлю и такую проверку.

Kor-Angar commented 3 years ago

так я квест выполнил про кровавые чаши

Kor-Angar commented 3 years ago

вполнил квест. сдал чашки Кассии. потом по квесту Андре ликвидировал гильдию.

Kor-Angar commented 3 years ago

можно просто делать проверку на смерть Кассии для кольца Констанино и чашам кровавым.

Kor-Angar commented 3 years ago

или такое будет работать только в Хориносе?

Kor-Angar commented 3 years ago

Так у них и цена нулевая

так это же хлам, если игрок его продал кому то, то наверное ему это не надо :-)

dosinabox commented 3 years ago

вполнил квест. сдал чашки Кассии. потом по квесту Андре ликвидировал гильдию.

Ликвидация гильдии устанавливает все квесты воров в LOG_FAILED (но не меняет записи в дневнике). Вот чаши и не удалились.

или такое будет работать только в Хориносе?

да

Kor-Angar commented 3 years ago

Ликвидация гильдии устанавливает все квесты воров в LOG_FAILED (но не меняет записи в дневнике). Вот чаши и не удалились.

исправлять будешь? :-)

dosinabox commented 3 years ago

исправлять будешь? :-)

уже

Kor-Angar commented 3 years ago

квестовый лут у Халвора 20210118204511_1

Kor-Angar commented 3 years ago

можно просто снимать флаг миссии у квестовых предметах когда герой их отдаёт квестодателю в функции B_GiveInvItems

if(item.flags & ITEM_MISSION)
    {
        item.flags = item.flags & ~ITEM_MISSION;
    }
Kor-Angar commented 3 years ago

предлагаю попробовать потестить

Kor-Angar commented 3 years ago

можно сделать опционально например. я в этом прохождение, что сейчас полноценно протестирую.

if(Npc_IsPlayer(giver))
    {
        Npc_GetInvItem(giver,itemInstance);
        itemname = item.description;
        if(itemInstance == ItMi_Gold)
        {
            concatText = ConcatStrings(IntToString(amount),PRINT_GoldGiven);
            AI_PrintScreen(concatText,-1,YPOS_GoldGiven,FONT_ScreenSmall,2);
        }
        else if(amount == 1)
        {
            concatText = ConcatStrings(itemname,PRINT_ItemGiven);
            AI_PrintScreen(concatText,-1,YPOS_ItemGiven,FONT_ScreenSmall,2);
        }
        else
        {
            concatText = ConcatStrings(IntToString(amount),PRINT_ItemsGiven);
            concatText = ConcatStrings(concatText," (");
            concatText = ConcatStrings(concatText,itemname);
            concatText = ConcatStrings(concatText,")");
            AI_PrintScreen(concatText,-1,YPOS_ItemGiven,FONT_ScreenSmall,2);
        };
        Npc_RemoveInvItems(giver,itemInstance,amount);
        CreateInvItems(taker,itemInstance,amount);
        if(item.flags & ITEM_MISSION)
        {
            item.flags = item.flags & ~ITEM_MISSION;
        };
    }
dosinabox commented 3 years ago

Возможно, нужно itemInstance.flags вместо item.flags. Возможно, изменения флагов не сохранятся в сохраненку.

Kor-Angar commented 3 years ago

Я исходил из того что у тебя в коде выше идет дискрипшион.айтем Про сохранения, заодно и проверим ;-) 12:31, 9 мая 2021 г., dosinabox @.***>: Возможно, нужно itemInstance.flags вместо item.flags. Возможно, изменения флагов не сохранятся в сохраненку.

—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe. -- Отправлено из мобильного приложения Яндекс.Почты

dosinabox commented 3 years ago

item - конкретный единичный экземпляр класса itemInstance. Брать у него свойство - нормально. Назначать флаги - не факт. Кстати, нужно создавать предмет у получателя только после назначения флагов. Даже если изменение флагов класса не затронет все существующие предметы или не пойдет в сохраненку, то у получателя останется вновь созданный экземпляр с измененными флагами. Скорее всего. И удалять предмет тоже следует до изменения флагов, иначе проверка свойств удаленного объекта может не сработать.

if(itemInstance.flags & ITEM_MISSION)
{
    itemInstance.flags = itemInstance.flags & ~ITEM_MISSION;
};
Npc_RemoveInvItems(giver,itemInstance,amount);
CreateInvItems(taker,itemInstance,amount);
Kor-Angar commented 3 years ago

Надо добавить в тестовую сборку 😀 потестить 😀Заодно и узнаем на примере табличек которые Сатурасу сдаются, как они себя вести будут, после того как  Сатурас их назад  герою вернёт.12:58, 9 мая 2021 г., dosinabox @.***>: item - конкретный единичный экземпляр класса itemInstance. Брать у него свойство - нормально. Назначать флаги - не факт. Кстати, нужно создавать предмет у получателя только после назначения флагов. Даже если изменение флагов класса не затронет все существующие предметы или не пойдет в сохраненку, то у получателя останется вновь созданный экземпляр с измененными флагами. Скорее всего. И удалять предмет тоже следует до изменения флагов, иначе проверка свойств удаленного объекта может не сработать. if(itemInstance.flags & ITEM_MISSION) { itemInstance.flags = itemInstance.flags & ~ITEM_MISSION; }; Npc_RemoveInvItems(giver,itemInstance,amount); CreateInvItems(taker,itemInstance,amount);

—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe. -- Отправлено из мобильного приложения Яндекс.Почты

dosinabox commented 3 years ago

Окей, сейчас упакую и выложу.

if(item.flags & ITEM_MISSION)
{
    item.flags = item.flags & ~ITEM_MISSION;
    AI_PrintScreen(ConcatStrings(itemname, " - флаг снят"),-1,YPOS_GoldTaken,FONT_ScreenSmall,2);
};

Screenshot_1

Kor-Angar commented 3 years ago

Я просто не уверен что такое решение решит вопрос в целом. Слишком оно простое и очевидное 😀 поэтому хочу пройти игру что бы сказать, что были вот такие негативные моменты и оно не подойдёт

Kor-Angar commented 3 years ago

еще бы с карт снять "квестовасть". а продавцу Ибрагиму карты просто добавлять в продажу если у него их нет.

Kor-Angar commented 3 years ago

вчера следил за этой историей. работает корректно. стараюсь продавать квестовые предметы паре продавцов, которые по сюжету получать люлей :-)

Kor-Angar commented 2 years ago
if(item.flags & ITEM_MISSION)
{
    item.flags = item.flags & ~ITEM_MISSION;
    AI_PrintScreen(ConcatStrings(itemname, " - флаг снят"),-1,YPOS_GoldTaken,FONT_ScreenSmall,2);
};

это добавлять в основной код не стала? :-)

dosinabox commented 2 years ago

это добавлять в основной код не стала? :-)

нет, убрала к какому-то из релизов

Kor-Angar commented 2 years ago

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

dosinabox commented 2 years ago

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

Насколько эффективным? Точно стоит добавлять?

Kor-Angar commented 2 years ago

Эффеткивно на все 100%. Точно стоит. 

Kor-Angar commented 2 years ago

это штука эффективна на 300%. код из 1 строчки решает целый комплекс задач:

конечно можно пойти еще дальше и снимать флаг в B_CloseTopic.d. но это уже будет избыточно и слишком грамоздко.

со снятием флага я прошёл игру два или три разу. внимательно отслеживал как это происходит.

возможно в игре где то есть такой момент когда НПС берёт у героя квестовый предмет смотрит его, а потом возвращает обратно, но это в первую очередь касается документов. можно добавить дополнительную проверку на документы и с них не снимать флаги для миссии. но и это будет избыточно на мой взгляд :-)

dosinabox commented 2 years ago

Эффеткивно на все 100%. Точно стоит.

Добавлено в сборку для мастерской Стима.