dosinabox / g2nr_unofficial_update

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

ОФФ топ 2021 #308

Closed Kor-Angar closed 3 years ago

Kor-Angar commented 3 years ago

Наконец я нашёл ссылки по которой можно все топики посмотреть :-) https://github.com/dosinabox/g2nr_unofficial_update/issues?utf8=%E2%9C%93&q=is%3Aissue+sort%3Aupdated-desc+

Форматирование https://github.com/GnuriaN/format-README#Оглавление

Предыдущий топик с ОффТоп'ом https://github.com/dosinabox/g2nr_unofficial_update/issues/41

dosinabox commented 3 years ago

В B_GiveTradeInv проверить наличие, сохранить количество в переменную и удалить. В B_EquipTrader проверить переменную и создать нужное количество.

Хочешь забирать у ГГ золото?)

Kor-Angar commented 3 years ago

мне такое не подойдёт:-)

пока сделал общий "выход" для торговцев

var string Text_Trade_Exit;

func void DIA_Trade_Exit_Info()
{
    Amount = Npc_HasItems   (other,ITMI_CNY);

    if (Amount > 0)
    {
        Npc_RemoveInvItems      (other,ITMI_CNY,Amount);

        Text_Trade_Exit = "Äåáåò ";
        Text_Trade_Exit = ConcatStrings(Text_Trade_Exit,IntToString(Amount));
        Text_Trade_Exit = ConcatStrings(Text_Trade_Exit," àííóëèðîâàí.");

        PrintScreen(Text_Trade_Exit,-1,80,"FONT_OLD_10_WHITE.TGA",_TIME_MESSAGE_GIVEN);
    };

    AI_StopProcessInfos(self);
};

вчера потестил на Готике, вроде работает :-) https://youtu.be/-LaE_IBk4lU?t=99 если нареканий не будет, то можно будет сделать "подтверждение" выхода, если дебетка положительная :-) главное что логика работает: количество руды в игре ограниченное. на практике это значит: нельзя продать лут первому попавшемуся торговцу и получить 1000 руду на взятку Торусу или 1500 руды на доспех. руду надо выменивать у торговцев за лут. например в Старом Лагере если у торговцев выменять руду то её всё равно не хватит на взятку Торусу. т.е. придётся пойти дальше.. а в старой шахте у плавильщика руды есть аж 700 руды :-)

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

dosinabox 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

где то у нас топик был про это

Что-то не нашелся.

из леса он не может к магам идти ;-)

Потому что сначала нужно отнести орнамент магам, и уже потом получить квест на поиск недостающих? Просто я сформировала возможность похода во все три места через консоль.

давай протестирую завтра :-)

Нужна новая игра: https://dropmefiles.com/BUMl3

dosinabox commented 3 years ago

Какой твой рекорд по уровню до вступления в гильдию? И сколько обычно получается без "напряга"?

Kor-Angar commented 3 years ago

у меня как такого рекорда нету, так как я не ставил для себя набрать максимальный уровень в первой главе. квесты все в первой главе проходил, а вот именно уровень.. тем более у меня в сборке нельзя и свитками скелетов / палов поубивать.

И сколько обычно получается без "напряга"?

от фракции зависит. если например играть ментом, то можно вступать как можно раньше что бы получить доспех. если за монастырь то как можно позже. в Готике 1 было ограничение по уровню 5. в Готике 2 НВ его нет.

без напряга наверное между 5 и 13 уровнем. может даже между 7 и 13.

Kor-Angar commented 3 years ago

подскажи пожалуйста я что то скопировал и у меня всё стало мелкое :-) и надписи меньше стали image

это в СистемПак.ини настраивается?

dosinabox commented 3 years ago

Попробуй Scale=1

Kor-Angar commented 3 years ago

стоит

Kor-Angar commented 3 years ago

но в целом это в систем паке выставляется?

[INTERFACE] Scale=2 ; ... множитель автоматического масштабирования интерфейса игры, за основу взято разрешение 1024x768 пикселей; ; включено (1) или (1.1 ... и выше), масштабирование интерфейса в n-раз на усмотрение пользователя. ; максимальное значение зависит от вертикального разрешения экрана. То есть: ; для разрешения 1920x1080, максимальное значение будет 1080/512 = 2.10 ; для разрешения 3840x2160, максимальное значение будет 2160/512 = 4.21 ; более высокие значения будут прочитаны как максимальное. ; выключено (0), без масштабирования. По-умолчанию: 1.

Kor-Angar commented 3 years ago

проблемы были со стим паком. переустановил его и всё заработало.

Kor-Angar commented 3 years ago

помнишь мы обсуждали вопрос с дополнительными инстанциями для НПС? а я у тебя уточнял ещё про общие "диалоги".. и я насколько помню ты дела возможность сдать меч Рода в Минентале и сокровища Грега и прочие..

вообщем вот такое решение придумал. проверил, работает.

instance GRD_205_Scorpio_instance_1 (C_Info)
{
    npc = GRD_205_Scorpio;
    nr = 1;
    condition       =    GRD_205_Scorpio_instance_Condition;
    information     =    GRD_205_Scorpio_instance_Info;
    permanent       =    TRUE;
    important       =    TRUE;
};

instance GRD_205_Scorpio_instance_2 (C_Info)
{
    npc = GRD_205_Scorpio_Kapitel_4;
    nr = 1;
    condition       =    GRD_205_Scorpio_instance_Condition;
    information     =    GRD_205_Scorpio_instance_Info;
    permanent       =    TRUE;
    important       =    TRUE;
};

func int GRD_205_Scorpio_instance_Condition()
{
    if  Npc_IsInState(self,ZS_Talk) 
    {
        return TRUE;
    };
};

// общие диалоги
func void GRD_205_Scorpio_instance_Info()
{
    GRD_205_Scorpio_HeyPC.npc       = Hlp_GetInstanceID(self);
    GRD_205_Scorpio_BANISHED.npc    = Hlp_GetInstanceID(self);
    GRD_205_Scorpio_CROSSBOW.npc    = Hlp_GetInstanceID(self);
    GRD_205_Scorpio_CROSSBOW2.npc   = Hlp_GetInstanceID(self);
    GRD_205_Scorpio_TRADE.npc       = Hlp_GetInstanceID(self);
    GRD_205_Scorpio_BETTERARMOR.npc = Hlp_GetInstanceID(self);
    DIA_Trade_Exit.npc              = Hlp_GetInstanceID(self);  
};
Kor-Angar commented 3 years ago

Привет. напомни пожалуйста была какая то ситуация когда ключи находящиеся у НПС попадали в продажу. с чем такое было связано?

dosinabox commented 3 years ago

Привет. напомни пожалуйста была какая то ситуация когда ключи находящиеся у НПС попадали в продажу. с чем такое было связано?

Если в инвентаре нпц есть ключ, то он всегда будет его продавать (Горакс, Саландрил). Поэтому в диалоге о начале торговли нужно проверять наличие ключа, удалять его и запоминать этот факт, а при завершении разговора - создавать новый и сбрасывать запоминание.

dosinabox commented 3 years ago

См. B_RemoveSalandrilKey() и B_GiveSalandrilKey().

Kor-Angar commented 3 years ago

спасибо!

Kor-Angar commented 3 years ago

таки смог корректно ограничить торговлю без махинаций с удалением предметов перед торговлей и вставкой после :-) Теперь очевидно, что вещи не пропали, а просто торговец не заинтересован в хламе который пытается выменять герой на ценные свитки и эликсиры :-) https://www.youtube.com/watch?v=SNYgzUb84FA

dosinabox commented 3 years ago

А это как так? Можно глянуть код?

Kor-Angar commented 3 years ago

конечно. вот топик https://github.com/Kor-Angar/G1_Kor_Angar/issues/8

dosinabox commented 3 years ago

404 - приватная репа?

Kor-Angar commented 3 years ago

расшарил. репозетории слишком хорошо индексируются, поэтому я их закрыл :-)

Kor-Angar commented 3 years ago

а ты не знаешь какие здесь проценты надо поставить?

inv_zbias   = ;                      // Масштабирование объекта.
inv_rotx    = ;                       // Вращение объекта по оси X.
inv_roty    = ;                       // Вращение объекта по оси Y.
inv_rotz    = ;                       // Вращение объекта по оси Z.

что бы получилось вот так. то есть такие настройки стоят для категории ITEM_KAT_NONE 20210430143156_1

Kor-Angar commented 3 years ago

нашёл :-)

void oCItem::RotateForInventory(int dir = 1)
{
    ResetRotationsLocal();
    if (G2 && ((inv_rotx != 0) || (inv_roty != 0) || (inv_rotz != 0))) {
        RotateWorld(1, 0, 0, inv_rotx * dir);
        RotateWorld(0, 1, 0, inv_roty * dir);
        RotateWorld(0, 0, 1, inv_rotz * dir);
        return;
    }
    switch (mainflag) {
        case ITEM_KAT_NONE:
            RotateWorld(1, 0, 0, -25 * dir);
            RotateWorld(0, 0, 1, -45 * dir);
            break;
        case ITEM_KAT_NF:
            if (HasFlag(ITEM_SHIELD)) {
                RotateWorld(1, 0, 0, -90 * dir);
                RotateWorld(0, 0, 1, -90 * dir);
                break;
            }
            RotateWorld(1, 0, 0, -90 * dir);
            if (HasFlag(ITEM_DAG)) {
                RotateWorld(0, 0, 1, -45 * dir);
            } else {
                RotateWorld(0, 0, 1, -135 * dir);
            }
            break;
        case ITEM_KAT_FF:
            RotateWorld(1, 0, 0, 90 * dir);
            RotateWorld(0, 0, 1, 45 * dir);
            break;
        case ITEM_KAT_MUN:
            RotateWorld(0, 0, 1, -135 * dir);
            break;
        case ITEM_KAT_ARMOR:
            RotateWorld(1, 0, 0, 360 * dir);
            break;
        case ITEM_KAT_FOOD:
            RotateWorld(0, 1, 0, -90 * dir);
            RotateWorld(1, 0, 0, -35 * dir);
            break;
        case ITEM_KAT_DOCS:
            RotateWorld(1, 0, 0, 90 * dir);
            break;
        case ITEM_KAT_POTIONS:
            RotateWorld(0, 1, 0, 90 * dir);
            break;
        case ITEM_KAT_LIGHT:
            break;
        case ITEM_KAT_RUNE:
            RotateWorld(1, 0, 0, -90 * dir);
            break;
        case ITEM_KAT_MAGIC:
            RotateWorld(0, 1, 0, -90 * dir);
            RotateWorld(1, 0, 0, -35 * dir);
            break;
    }
}

то есть можно что то такое сочинить

func void inv_rot_KAT_NONE()
{
    item.inv_rotx   = -25;                       // Вращение объекта по оси X.
    item.inv_roty   = 0;                       // Вращение объекта по оси Y.
    item.inv_rotz   = -45;                       // Вращение объекта по оси Z.
};
Kor-Angar commented 3 years ago

я в принципе готов потестить очередную сборку

dosinabox commented 3 years ago

я в принципе готов потестить очередную сборку

g2a_nr_scriptpatch_v27_test_03.05.2021.zip Файл g2a_nr_scriptpatch_v26_plugins.mod удали, а то могут быть проблемы с новыми.

Kor-Angar commented 3 years ago

так? image

dosinabox commented 3 years ago

так

dosinabox commented 3 years ago

При игре без русской озвучки файлы speech_add и speech_fix следует удалить, чтобы не проскакивали фразы на русском.

Kor-Angar commented 3 years ago

speech_add и speech_fix

а они у тебя есть в общем архиве русской озвучки в Стим Фикс?

то есть если я скачиваю стим фикс русский и ставлю русскую озвучку то аудио файлы из speech_add.mod и speech_fix.mod уже будут включены в speech_ru.vdf ? я помню что собирал всю русскую озвучку в том числе и содержимое speech_add и speech_fix в один архив в своей сборке, но не помню как там это у тебя стим фиксе организованно.. или ты просто перезаписываешь английские архивы , архивами русскими в кол-во 3-4 штук vdf и к ним еще потом speech_add и speech_fix подгружаются ?

dosinabox commented 3 years ago

speech_fix.mod включен в русские Speech1.vdf/Speech_Addon.vdf. speech_add.mod остается под тем же именем в ModVDF.

Kor-Angar commented 3 years ago

а ведь Каваларон наверное знает где гильдия воров, ведь он в первой готики был связан с Фингерсом который состоял в гильдии воров :-)

Kor-Angar commented 3 years ago

по моему у меня Мартин забрал шпагу бандитскую как улику и сказал что у меня недостаточно доказательств.

ну да..

if(Npc_HasItems(other,ItMw_Addon_BanditTrader))
{
    AI_Output(other,self,"DIA_Addon_Martin_Fernando_15_02");    //Такие шпаги я нашел у бандитов. На эфесе выгравирована буква 'Ф'.
    Npc_RemoveInvItems(other,ItMw_Addon_BanditTrader,1);
    FernandoHints_ItMw = TRUE;
};

может лучше так сделать?

if(Npc_HasItems(other,ItMw_Addon_BanditTrader))
{
    AI_Output(other,self,"DIA_Addon_Martin_Fernando_15_02");    //Такие шпаги я нашел у бандитов. На эфесе выгравирована буква 'Ф'.
    if FernandoHints_ItMw == false
    {
        Npc_RemoveInvItems(other,ItMw_Addon_BanditTrader,1);
        FernandoHints_ItMw = TRUE;
    };
};
dosinabox commented 3 years ago

Ну да, одной шпаги ему достаточно и не нужно отдавать ему новую при каждом диалоге

Kor-Angar commented 3 years ago

надо поправить :-)

dosinabox commented 3 years ago

исправлено

Kor-Angar commented 3 years ago

стремно в игре смотритья когда все подряд предметы подписаны. ключи точно не стоило подписывать :-) да и скрижали наверное тоже.

Kor-Angar commented 3 years ago

что скажешь?

https://github.com/dosinabox/g2nr_unofficial_update/issues/266

dosinabox commented 3 years ago

Обновление тестовой сборки: g2a_nr_scriptpatch_v27_test_08.05.2021.zip

Изменения: https://github.com/dosinabox/g2nr_unofficial_update/commit/d409136b08e72f7ab07cf0f35e42e5efa6a33e62

Также:

dosinabox commented 3 years ago

Несколько новых тестовых амулетов, просто для интереса:

Предлагаю подумать, какие скорости восстановления могут быть приемлемыми)

Kor-Angar commented 3 years ago

Руна OrlanFix безопасно отправит Орлана обратно в таверну.

спс. работает. но в следующий раз лучше что то одноразовое например еду или флакон :-)

Kor-Angar commented 3 years ago

скрижаль 3 уровня после чтения оказалась в руке ГГ, а потом вернулась в инвентарь. image

image

Kor-Angar commented 3 years ago

https://youtu.be/9un25v5-oSM?t=3540

dosinabox commented 3 years ago

А вот такое изменение нужно? Сама легкая мантия появилась только в аддоне и никак не используется.

Screenshot_2
Kor-Angar commented 3 years ago

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

dosinabox commented 3 years ago

я всех кроме Сатураса в своей сборке переодел в легкие доспехи.

и даже Ватраса?

Kor-Angar commented 3 years ago

и даже Ватраса, исходя из его социального статуса.

Kor-Angar commented 3 years ago

или так: и даже Ватраса исходя из его обязанностей внутри ордена :-)


но тут в целом опять неудачная спайка Пираней. в Классике всё было понятно, там Ватрас был один. а вот в аддоне логичнее было задействовать на церемонии ни Ватраса, а Сатураса. оно и лаконичнее было бы в плане развития сюжета (Сатурас бы не шёл в город и на церемонию пока вопрос не решён) и в плане ЛОРа (Пирокар, Сатурас и Ксардас знакомы, являются высшими магами). а я сколько в Ночь Ворона играл так и не понимал почему в плане сюжета Ватрас не хотел идти в круг Солнца, что то невнятное он всё время бормочет :-)


одним словом в аддоне я невижу даже намёка что Ватрас высший маг воды. ну стоит в городе выполняя миссию рядового мага, собирает пожертвования и читает проповеди, лечит людей. научной работой и исследованиями не занимается, политические вопросы в верхнем квартале тоже не решает :-) курирует кольцо воды в городе. если он высший маг то рядом должны быть рядовые маги которыми он должен руководить(не или мягко направлять).