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

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

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

Быстрое обжаривание мяса (аналог Gothic 3 и Risen)

Диккен

Участник форума
Регистрация
12 Июн 2004
Сообщения
470
Благодарности
127
Баллы
210
Назначение: Готика 2, "Готика 2 - Ночь Ворона" и любые модификации.

Установка
1. Изменить в Gothic.ini ключ "usePotionKeys=0" на "usePotionKeys=1"
2. Назначить клавишу в "меню - настройки - управление - настройка дополнительных клавиш - лечебное зелье".
3. Изменить .\Story\Dialog_Mobsis\B_OnHotkey.d
4. Скомпилировать Gothic.DAT

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

B_OnHotkey.d (не требует начала новой игры)
Daedalus:
func void player_hotkey_lame_heal()
{
    var int rawmeat;
    if(Npc_IsInState(hero,ZS_Dead) == FALSE)
    {
        if(C_BodyStateContains(hero,BS_MOBINTERACT_INTERRUPT))
        {
            if(Wld_GetMobState(hero,"STOVE") == 1) && Npc_HasItems(hero,ItFoMuttonRaw)
            {
                rawmeat = Npc_HasItems(hero,ItFoMuttonRaw);
                if(rawmeat >= 10)
                {
                    Npc_RemoveInvItems(hero,ItFoMuttonRaw,10);
                    CreateInvItems(hero,ItFoMutton,10);
                    Print(ConcatStrings("Сырое мясо ",IntToString(Npc_HasItems(hero,ItFoMuttonRaw))));
                    Print(ConcatStrings("Жареное мясо ",IntToString(Npc_HasItems(hero,ItFoMutton))));
                }
                else
                {
                    CreateInvItems(hero,ItFoMutton,rawmeat);
                    Npc_RemoveInvItems(hero,ItFoMuttonRaw,rawmeat);
                    Print(ConcatStrings(PRINT_ProdItemsMissing,ItFoMuttonRaw.name));
                    AI_UseMob(hero,"STOVE",-1);
                };
                return;
            };
        };
        if(Npc_HasItems(hero,ItPo_Health_03) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= (HP_Elixier)))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier);
            Npc_RemoveInvItem(hero,ItPo_Health_03);
            B_LameSchlork();
        }
        else if(Npc_HasItems(hero,ItPo_Health_02) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= (HP_Extrakt)))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt);
            Npc_RemoveInvItem(hero,ItPo_Health_02);
            B_LameSchlork();
        }
        else if(Npc_HasItems(hero,ItPo_Health_01) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= (HP_Essenz)))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz);
            Npc_RemoveInvItem(hero,ItPo_Health_01);
            B_LameSchlork();
        }
        else if(hero.attribute[ATR_HITPOINTS_MAX] != hero.attribute[ATR_HITPOINTS])
        {
            if(Npc_HasItems(hero,ItPo_Health_01))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz);
                Npc_RemoveInvItem(hero,ItPo_Health_01);
                B_LameSchlork();
            }
            else if(Npc_HasItems(hero,ItPo_Health_02))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt);
                Npc_RemoveInvItem(hero,ItPo_Health_02);
                B_LameSchlork();
            }
            else if(Npc_HasItems(hero,ItPo_Health_03))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier);
                Npc_RemoveInvItem(hero,ItPo_Health_03);
                B_LameSchlork();
            }
            else
            {
                Print("Нет лечебных зелий!");
            };
        else
        {
            Print("Уже максимальное здоровье!");
        };
    };
};

B_OnHotkey.d (через диалог с выбором вариантов ответов, требует начала новой игры)
Daedalus:
instance PC_STOVE_HEND(C_Info)

{
    npc = PC_Hero;
    nr = 990;
    condition = pc_stove_end_condition;
    permanent = TRUE;
};

instance PC_STOVE_END(C_Info)
{
    npc = PC_Hero;
    nr = 999;
    condition = pc_stove_end_condition;
    information = pc_stove_end_info;
    permanent = TRUE;
    description = Dialog_Ende;
};


func int pc_stove_end_condition()
{
    if(PLAYER_MOBSI_PRODUCTION == 10)
    {
        return TRUE;
    };
};

func void pc_stove_end_info()
{
    b_endproductiondialog();
};

instance PC_ITFOMUTTON(C_Info)
{
    npc = PC_Hero;
    condition = pc_itfomutton_condition;
    information = pc_itfomutton_info;
    permanent = TRUE;
    description = "Поджарить мясо";
};

func int pc_itfomutton_condition()
{
    if(PLAYER_MOBSI_PRODUCTION == 10)
    {
        return TRUE;
    };
};

func void pc_itfomutton_info()
{
    var int rawmeat;
    rawmeat = Npc_HasItems(hero,ItFoMuttonRaw);
   
    if(rawmeat >= 10)
    {
        Npc_RemoveInvItems(hero,ItFoMuttonRaw,10);
        CreateInvItems(hero,ItFoMutton,10);
           
        Print(ConcatStrings("Сырое мясо ",IntToString(Npc_HasItems(hero,ItFoMuttonRaw))));
        Print(ConcatStrings("Жареное мясо ",IntToString(Npc_HasItems(hero,ItFoMutton))));
    }
    else
    {
        CreateInvItems(hero,ItFoMutton,rawmeat);
        Npc_RemoveInvItems(hero,ItFoMuttonRaw,rawmeat);
        Print(ConcatStrings(PRINT_ProdItemsMissing,ItFoMuttonRaw.name));
        b_endproductiondialog();
    };
};


func void player_hotkey_lame_heal()
{
    if(Npc_IsInState(hero,ZS_Dead) == FALSE)
    {
        if(C_BodyStateContains(hero,BS_MOBINTERACT_INTERRUPT))
        {
            if(Wld_GetMobState(hero,"STOVE") == 1) && Npc_HasItems(hero,ItFoMuttonRaw)
            {
                PLAYER_MOBSI_PRODUCTION = 10;
                AI_ProcessInfos(hero);
                return;
            };
        };
        if(Npc_HasItems(hero,ItPo_Health_03) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= HP_Elixier))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier);
            Npc_RemoveInvItem(hero,ItPo_Health_03);
            B_LameSchlork();
        }
        else if(Npc_HasItems(hero,ItPo_Health_02) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= HP_Extrakt))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt);
            Npc_RemoveInvItem(hero,ItPo_Health_02);
            B_LameSchlork();
        }
        else if(Npc_HasItems(hero,ItPo_Health_01) && ((hero.attribute[ATR_HITPOINTS_MAX] - hero.attribute[ATR_HITPOINTS]) >= HP_Essenz))
        {
            Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz);
            Npc_RemoveInvItem(hero,ItPo_Health_01);
            B_LameSchlork();
        }
        else if(hero.attribute[ATR_HITPOINTS_MAX] != hero.attribute[ATR_HITPOINTS])
        {
            if(Npc_HasItems(hero,ItPo_Health_01))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Essenz);
                Npc_RemoveInvItem(hero,ItPo_Health_01);
                B_LameSchlork();
            }
            else if(Npc_HasItems(hero,ItPo_Health_02))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Extrakt);
                Npc_RemoveInvItem(hero,ItPo_Health_02);
                B_LameSchlork();
            }
            else if(Npc_HasItems(hero,ItPo_Health_03))
            {
                Npc_ChangeAttribute(hero,ATR_HITPOINTS,HP_Elixier);
                Npc_RemoveInvItem(hero,ItPo_Health_03);
                B_LameSchlork();
            }
            else
            {
                Print("Нет лечебных зелий!");
            };
        }
        else
        {
            Print("Максимум жизненной энергии! ");
        };
    };
};
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Это все хорошо, но есть одно НО, а именно - нечитабильность скрипта, выкладывай пожалуйста самим файлом.
 

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Черновой вариант
Спасибо, но все равно ниче не выходит. мясо не готовится ни на плите, ни на костре ни на алхимическом столе. Видимо придется дописать в инстанцию фразу: "Употреблять только в сыром виде":confused:*cry*
 
Сверху Снизу