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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

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

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 578
Последнее редактирование модератором:

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
873
Благодарности
501
Баллы
245
ВОРОН32,в твоих сообщениях слишком мало инфы,что бы понять в чем твоя "затырка",буду отвечать прямо по тексту:
Ребят подскажите веппоинты Г2НВ
Все Waypointы можешь посмотреть открыв соответствующие ZENы (которые лежат в Gothic/_work/data/world) при помощи Spacerа.
Если хочешь создать новый Waypoint,но не знаешь как назвать,то называй как хочешь,лишь бы тебе было понятно.Но только по ангельски,и заглавными буквами.(Не путать с FREEPOINTами,которые имеют определенные названия !)

обязательно ли для этого создавать скрипт startup???
Если ты вносишь изменения в саму Г2НВ,то тебе нужно прописать этих NPCов в уже существующем Startupе,который лежит в (Gothic/_work/data/scripts/content/story).
Если создаешь независимый от Г2НВ мод,то создание Startupа не только обязательно,но и необходимо(делается по аналогии с оригинальным Startupом).

остальные появятся после разговора с ним
Это делается в диалоге с NPCом,вот пример диалога с Сатурасом(не с местным Saturasом,а с тем что из Миртаны):
func void DIA_Addon_Saturas_Ornament_Info()
{
AI_Output(self,other,"DIA_Addon_Saturas_Ornament_14_06"); //(вздыхает) И к чему это нас привело, ответь? Хм-м, даже не думай, что я тебе доверяю...
Wld_InsertNpc(Giant_Rat,"NW_TROLLAREA_RATS_01");
};

Где, Wld_InsertNpc(Giant_Rat,"NW_TROLLAREA_RATS_01");
означает что при разговоре,появится крыс-гигантус,на Waypointе NW_TROLLAREA_RATS_01
И не пренебрегай советом ElderGamerа:"В игре в режиме Марвина набери toggle waynet - будут показаны вейпоинты и связи между ними, toggle freepoints - будут показаны фрипоинты."
Если помнишь игру,и есть непонятки кто,откуда,и каким макаром появляется,и как передвигается: начни игру,"пригласи" Марвина,и он покажет тебе," глубока ли кроличья нора".
 
Последнее редактирование:

jackie34

Участник форума
Регистрация
16 Июн 2013
Сообщения
10
Благодарности
0
Баллы
155
Попытка номер два.
Подскажите название файла, где находится скрипт на Доспехи Гомеза в Готике 2 Возвращение v 1.1 ?(надо снять "Бандитское проклятие" с них)
Сразу говорю что в IT_Armor и в IT_Addon_Armor их нет, там только скрипты из оригинала игры, где и как только не искал...
Выручайте, ни кто не может подсказать, очень надо!!!
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
Попытка номер два.
Подскажите название файла, где находится скрипт на Доспехи Гомеза в Готике 2 Возвращение v 1.1 ?(надо снять "Бандитское проклятие" с них)
Сразу говорю что в IT_Armor и в IT_Addon_Armor их нет, там только скрипты из оригинала игры, где и как только не искал...
Выручайте, ни кто не может подсказать, очень надо!!!
папка misk скрипт ищи этот - ITAR_Fake_RANGER
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
873
Благодарности
501
Баллы
245
Подскажите название файла, где находится скрипт на Доспехи Гомеза в Готике 2 Возвращение v 1.1 ?(надо снять "Бандитское проклятие" с них)
Что значит: "снять "Бандитское проклятие"?
Если имеется в виду,что при экипировке данного доспеха, неписи агрятся как на бандита,и ты хочешь это изменить, то сама инстанция этих доспехов тебе ничего не даст.

Я не знаком со скриптами Возвращения,но если проводить аналогию с оригинальной игрой,то тебе надо искать файл типа C_PlayerIsFakeBandit(в оригинале в AI/Human/C_Human),в котором определяется как неписи распознают бандитов.
В нем есть блок:
if(Npc_HasEquippedArmor(oth) == TRUE)
{
itm = Npc_GetEquippedArmor(oth);
if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE))
{
return TRUE;
}
else
{
return FALSE;
};

Где в if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE)) перечисляются все брони, которые причисляют непися к бандиту.
Ищи в нем нужные тебе доспехи,и убирай.
 

jackie34

Участник форума
Регистрация
16 Июн 2013
Сообщения
10
Благодарности
0
Баллы
155
Что значит: "снять "Бандитское проклятие"?
Если имеется в виду,что при экипировке данного доспеха, неписи агрятся как на бандита,и ты хочешь это изменить, то сама инстанция этих доспехов тебе ничего не даст.

Я не знаком со скриптами Возвращения,но если проводить аналогию с оригинальной игрой,то тебе надо искать файл типа C_PlayerIsFakeBandit(в оригинале в AI/Human/C_Human),в котором определяется как неписи распознают бандитов.
В нем есть блок:
if(Npc_HasEquippedArmor(oth) == TRUE)
{
itm = Npc_GetEquippedArmor(oth);
if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE))
{
return TRUE;
}
else
{
return FALSE;
};

Где в if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE)) перечисляются все брони, которые причисляют непися к бандиту.
Ищи в нем нужные тебе доспехи,и убирай.
Да, я именно это и имел ввиду (при экипировке данного доспеха, неписи агрятся как на бандита), нашел файл (папка с Возвращением 1.1), открыл его (при помощи GothicSourcer), но там всего три доспеха: ITAR_BDT_M (Доспехи Бандита), ItAR_Thorus_Addon (Доспех Торуса) и ITAR_BDT_H (Тяжелое Доспехи Бандита), остальных же там не наблюдается... Где же он может находится?
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.577
Благодарности
4.171
Баллы
915
На самом деле NPC распознают бандитов не по доспеху, а по гильдии GIL_BDT. А проверка на одетый бандитский доспех в скрипте C_PlayerIsFakeBandit.d предназначена для ГГ, который не может принадлежать к GIL_BDT и ему доступны только 3 доспеха:
средний получаем от Бонеса, тяжёлый покупаем у Хуно, а броню гвардии Ворона находим в сундуке в храме.
 

jackie34

Участник форума
Регистрация
16 Июн 2013
Сообщения
10
Благодарности
0
Баллы
155
На самом деле NPC распознают бандитов не по доспеху, а по гильдии GIL_BDT. А проверка на одетый бандитский доспех в скрипте C_PlayerIsFakeBandit.d предназначена для ГГ, который не может принадлежать к GIL_BDT и ему доступны только 3 доспеха:
средний получаем от Бонеса, тяжёлый покупаем у Хуно, а броню гвардии Ворона находим в сундуке в храме.
Так как быть, если нужен "Доспех Гомеза" без "Бандитского проклятия", должен же быть выход, это же где-то редактируется?
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.577
Благодарности
4.171
Баллы
915
Посмотрел декомпилированные скрипты неофициального патча версии 1.12.9 - оказывается, что в "Возвращении" значительно расширен список доспехов, считающихся бандитскими.
AI\Human\С_Human\C_PlayerIsFakeBandit.d:
Код:
func int C_PlayerIsFakeBandit(var C_Npc slf,var C_Npc oth)
{
    var C_Item itm;
    if(slf.aivar[AIV_IgnoresArmor] == TRUE)
    {
        return FALSE;
    };
    if(slf.aivar[AIV_IgnoresFakeGuild] == TRUE)
    {
        return FALSE;
    };
    if(slf.guild == GIL_PIR)
    {
        return FALSE;
    };
    if(GLOBAL_MAKE_BANDIT_FORCITY == 1)
    {
        if(slf.guild == GIL_MIL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_PAL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_VLK)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORMON == 1)
    {
        if(slf.guild == GIL_KDF)
        {
            return TRUE;
        };
        if(slf.guild == GIL_NOV)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORFARM == 1)
    {
        if(slf.guild == GIL_BAU)
        {
            return TRUE;
        };
        if(slf.guild == GIL_SLD)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORCOAST == 1)
    {
        if(slf.guild == GIL_OUT)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORPSICAMP == 1)
    {
        if(slf.guild == GIL_GUR)
        {
            return TRUE;
        };
        if(slf.guild == GIL_TPL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_SEK)
        {
            return TRUE;
        };
    };
    if(Npc_HasEquippedArmor(oth) == TRUE)
    {
        itm = Npc_GetEquippedArmor(oth);
        if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE) || (Hlp_IsItem(itm,itar_bdt_f) == TRUE) || (Hlp_IsItem(itm,ITAR_Bloodwyn_Addon) == TRUE) || (Hlp_IsItem(itm,itar_bloodwyn_addon_v1) == TRUE) || (Hlp_IsItem(itm,itar_thorus_addon_v1) == TRUE) /* || (Hlp_IsItem(itm,itar_gomez_addon) == TRUE) */ || (Hlp_IsItem(itm,itar_grd_l) == TRUE) || (Hlp_IsItem(itm,itar_grd_l_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_s) == TRUE) || (Hlp_IsItem(itm,itar_stt_s_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_m) == TRUE) || (Hlp_IsItem(itm,itar_stt_m_v1) == TRUE))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    }
    else if((slf.guild == GIL_BDT) && (CurrentLevel == ADDONWORLD_ZEN) && (Player_HasTalkedToBanditCamp == TRUE))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    };
    return FALSE;
};
 
func int c_playerisfakebandit_real(var C_Npc oth)
{
    var C_Item itm;
    if(Npc_HasEquippedArmor(oth) == TRUE)
    {
        itm = Npc_GetEquippedArmor(oth);
        if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE) || (Hlp_IsItem(itm,itar_bdt_f) == TRUE) || (Hlp_IsItem(itm,ITAR_Bloodwyn_Addon) == TRUE) || (Hlp_IsItem(itm,itar_bloodwyn_addon_v1) == TRUE) || (Hlp_IsItem(itm,itar_thorus_addon_v1) == TRUE) /* || (Hlp_IsItem(itm,itar_gomez_addon) == TRUE) */ || (Hlp_IsItem(itm,itar_grd_l) == TRUE) || (Hlp_IsItem(itm,itar_grd_l_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_s) == TRUE) || (Hlp_IsItem(itm,itar_stt_s_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_m) == TRUE) || (Hlp_IsItem(itm,itar_stt_m_v1) == TRUE))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    };
    return FALSE;
};
Разумеется, что в этот список включён и доспех Гомеза (itar_gomez_addon). Если ты хочешь исключить его из списка бандитской брони, закомментируй в указанных выше функциях проверки на то, что его надел ГГ. Также стоит убрать из описания этой брони упоминание о том, что её носят бандиты:
_misk_\ITAR_Fake_Ranger.d:
Код:
instance ITAR_GOMEZ_ADDON(C_Item)
{
    name = "Доспехи Гомеза";
    mainflag = ITEM_KAT_ARMOR;
    flags = 0;
    protection[PROT_EDGE] = 110;
    protection[PROT_BLUNT] = 110;
    protection[PROT_POINT] = 90;
    protection[PROT_FIRE] = 10;
    protection[PROT_MAGIC] = 10;
    value = value_itar_gomez_addon;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = 110;
    wear = WEAR_TORSO;
    visual = "ITAR_CHAOS_ADDO1.3ds";
    on_equip = equip_otherarmor;
    visual_change = "Armor_CHAOS_ADDO1.asc";
    visual_skin = 0;
    material = MAT_LEATHER;
    description = name;
// text[0] = PRINT_Addon_BDTArmor;
    text[1] = NAME_Prot_Edge;
    count[1] = protection[PROT_EDGE];
    text[2] = NAME_Prot_Point;
    count[2] = protection[PROT_POINT];
    text[3] = NAME_Prot_Fire;
    count[3] = protection[PROT_FIRE];
    text[4] = NAME_Prot_Magic;
    count[4] = protection[PROT_MAGIC];
    text[5] = NAME_Value;
    count[5] = value;
};
Хотя я считаю, что не стоит исключать из списка бандитской брони доспех самого главного рудного барона.
 
Последнее редактирование:

jackie34

Участник форума
Регистрация
16 Июн 2013
Сообщения
10
Благодарности
0
Баллы
155
Посмотрел декомпилированные скрипты неофициального патча версии 1.12.9 - оказывается, что в "Возвращении" значительно расширен список доспехов, считающихся бандитскими.
AI\Human\С_Human\C_PlayerIsFakeBandit.d:
Код:
func int C_PlayerIsFakeBandit(var C_Npc slf,var C_Npc oth)
{
    var C_Item itm;
    if(slf.aivar[AIV_IgnoresArmor] == TRUE)
    {
        return FALSE;
    };
    if(slf.aivar[AIV_IgnoresFakeGuild] == TRUE)
    {
        return FALSE;
    };
    if(slf.guild == GIL_PIR)
    {
        return FALSE;
    };
    if(GLOBAL_MAKE_BANDIT_FORCITY == 1)
    {
        if(slf.guild == GIL_MIL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_PAL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_VLK)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORMON == 1)
    {
        if(slf.guild == GIL_KDF)
        {
            return TRUE;
        };
        if(slf.guild == GIL_NOV)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORFARM == 1)
    {
        if(slf.guild == GIL_BAU)
        {
            return TRUE;
        };
        if(slf.guild == GIL_SLD)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORCOAST == 1)
    {
        if(slf.guild == GIL_OUT)
        {
            return TRUE;
        };
    };
    if(GLOBAL_MAKE_BANDIT_FORPSICAMP == 1)
    {
        if(slf.guild == GIL_GUR)
        {
            return TRUE;
        };
        if(slf.guild == GIL_TPL)
        {
            return TRUE;
        };
        if(slf.guild == GIL_SEK)
        {
            return TRUE;
        };
    };
    if(Npc_HasEquippedArmor(oth) == TRUE)
    {
        itm = Npc_GetEquippedArmor(oth);
        if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE) || (Hlp_IsItem(itm,itar_bdt_f) == TRUE) || (Hlp_IsItem(itm,ITAR_Bloodwyn_Addon) == TRUE) || (Hlp_IsItem(itm,itar_bloodwyn_addon_v1) == TRUE) || (Hlp_IsItem(itm,itar_thorus_addon_v1) == TRUE) /* || (Hlp_IsItem(itm,itar_gomez_addon) == TRUE) */ || (Hlp_IsItem(itm,itar_grd_l) == TRUE) || (Hlp_IsItem(itm,itar_grd_l_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_s) == TRUE) || (Hlp_IsItem(itm,itar_stt_s_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_m) == TRUE) || (Hlp_IsItem(itm,itar_stt_m_v1) == TRUE))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    }
    else if((slf.guild == GIL_BDT) && (CurrentLevel == ADDONWORLD_ZEN) && (Player_HasTalkedToBanditCamp == TRUE))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    };
    return FALSE;
};

func int c_playerisfakebandit_real(var C_Npc oth)
{
    var C_Item itm;
    if(Npc_HasEquippedArmor(oth) == TRUE)
    {
        itm = Npc_GetEquippedArmor(oth);
        if((Hlp_IsItem(itm,ItAr_BDT_M) == TRUE) || (Hlp_IsItem(itm,ITAR_Thorus_Addon) == TRUE) || (Hlp_IsItem(itm,ItAr_BDT_H) == TRUE) || (Hlp_IsItem(itm,itar_bdt_f) == TRUE) || (Hlp_IsItem(itm,ITAR_Bloodwyn_Addon) == TRUE) || (Hlp_IsItem(itm,itar_bloodwyn_addon_v1) == TRUE) || (Hlp_IsItem(itm,itar_thorus_addon_v1) == TRUE) /* || (Hlp_IsItem(itm,itar_gomez_addon) == TRUE) */ || (Hlp_IsItem(itm,itar_grd_l) == TRUE) || (Hlp_IsItem(itm,itar_grd_l_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_s) == TRUE) || (Hlp_IsItem(itm,itar_stt_s_v1) == TRUE) || (Hlp_IsItem(itm,itar_stt_m) == TRUE) || (Hlp_IsItem(itm,itar_stt_m_v1) == TRUE))
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        };
    };
    return FALSE;
};
Разумеется, что в этот список включён и доспех Гомеза (itar_gomez_addon). Если ты хочешь исключить его из списка бандитской брони, закомментируй в указанных выше функциях проверки на то, что его надел ГГ. Также стоит убрать из описания этой брони упоминание о том, что её носят бандиты:
_misk_\ITAR_Fake_Ranger.d:
Код:
instance ITAR_GOMEZ_ADDON(C_Item)
{
    name = "Доспехи Гомеза";
    mainflag = ITEM_KAT_ARMOR;
    flags = 0;
    protection[PROT_EDGE] = 110;
    protection[PROT_BLUNT] = 110;
    protection[PROT_POINT] = 90;
    protection[PROT_FIRE] = 10;
    protection[PROT_MAGIC] = 10;
    value = value_itar_gomez_addon;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = 110;
    wear = WEAR_TORSO;
    visual = "ITAR_CHAOS_ADDO1.3ds";
    on_equip = equip_otherarmor;
    visual_change = "Armor_CHAOS_ADDO1.asc";
    visual_skin = 0;
    material = MAT_LEATHER;
    description = name;
// text[0] = PRINT_Addon_BDTArmor;
    text[1] = NAME_Prot_Edge;
    count[1] = protection[PROT_EDGE];
    text[2] = NAME_Prot_Point;
    count[2] = protection[PROT_POINT];
    text[3] = NAME_Prot_Fire;
    count[3] = protection[PROT_FIRE];
    text[4] = NAME_Prot_Magic;
    count[4] = protection[PROT_MAGIC];
    text[5] = NAME_Value;
    count[5] = value;
};
Хотя я считаю, что не стоит исключать из списка бандитской брони доспех самого главного рудного барона.
Dimus, чувствую дело наконец-то сдвинулось с мёртвой точки, но у меня есть вопрос, как найти: ITAR_Fake_Ranger.d:?, у меня в папке _misk_, его нет!
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.577
Благодарности
4.171
Баллы
915
Нет такого файла? Тогда включай поиск файлов *.d, содержащих строку (без учёта регистра) instance ITAR_GOMEZ_ADDON(C_Item).
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Известный баг Г1 и Г2. Если на момент сохранения непись находится в режиме дальнего боя, то после загрузки сохранения непись впадает в ступор. Мало того, что он не продолжает атаку, так ещё и обработка восприятий приостанавливается. Вопрос: пытался ли кто-нибудь это побороть? Может, в модах каких-то поправили?

Если пока это не исправлено, могу поделиться тем, что удалось выяснить.
Похоже, к ступору приводит невозможность правильно выполнить команду AI_Attack. Оружие и режим боя после загрузки сохранения распознаются правильно - проходят проверки if(Npc_HasReadiedRangedWeapon(self)) и if(Npc_IsInFightMode(self,FMODE_FAR)). На момент поступления команды атаковать непись имеет цель для поражения в идентификаторе other.

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Известный баг Г1 и Г2. Если на момент сохранения непись находится в режиме дальнего боя, то после загрузки сохранения непись впадает в ступор. Мало того, что он не продолжает атаку, так ещё и обработка восприятий приостанавливается. Вопрос: пытался ли кто-нибудь это побороть? Может, в модах каких-то поправили?

Если пока это не исправлено, могу поделиться тем, что удалось выяснить.
Похоже, к ступору приводит невозможность правильно выполнить команду AI_Attack. Оружие и режим боя после загрузки сохранения распознаются правильно - проходят проверки if(Npc_HasReadiedRangedWeapon(self)) и if(Npc_IsInFightMode(self,FMODE_FAR)). На момент поступления команды атаковать непись имеет цель для поражения в идентификаторе other.

Замечено, что если заставить непися убрать оружие при входе в состояние атаки после загрузки сохранения, то достав оружие снова, он не впадает в ступор. В принципе, это можно использовать для изготовления костыля. Но, может, есть более удачное решение?
Да, хук на функцию разорхивации нпс с принудительным переводом в человеческие состояния.
А причина скорее в том, что неписю некого атаковать, ибо other == 0 во время загрузки
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.410
Благодарности
3.241
Баллы
525
Да, хук на функцию разорхивации нпс с принудительным переводом в человеческие состояния.

Гм, я не настолько продвинут. Можно ли чуть более подробно?

А причина скорее в том, что неписю некого атаковать, ибо other == 0 во время загрузки

В момент загрузки - да. Но в состоянии атаки, вроде как, предусмотрено восстановление идентификатора. Да и в случае, когда непись находится в момент сохранения в режиме ближнего боя, атака после загрузки не прерывается.

Возможно, в случае дальнего боя сбрасывается некий флаг наличия боеприпаса в слоте правой руки, если такой имеется, конечно. После принудительного убирания-доставания оружия всё работает правильно. Камрад Керракс в ГЕ это поправил.

Кстати, тебе на заметку для АСТ. Визуалы стрел и болтов, которые в момент сохранения находились в полёте, после загрузки остаются висеть в воздухе.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Гм, я не настолько продвинут. Можно ли чуть более подробно?



В момент загрузки - да. Но в состоянии атаки, вроде как, предусмотрено восстановление идентификатора. Да и в случае, когда непись находится в момент сохранения в режиме ближнего боя, атака после загрузки не прерывается.

Возможно, в случае дальнего боя сбрасывается некий флаг наличия боеприпаса в слоте правой руки, если такой имеется, конечно. После принудительного убирания-доставания оружия всё работает правильно. Камрад Керракс в ГЕ это поправил.

Кстати, тебе на заметку для АСТ. Визуалы стрел и болтов, которые в момент сохранения находились в полёте, после загрузки остаются висеть в воздухе.
Они и должны оставаться, это не просто так сделано, хотя с другой стороны, возможно это и есть та самая причина, вообще капну в эту сторону как будет время
А хук(hook) перехват функции какой либо, на этом и построен весь AST
 

Eralifier

Участник форума
Регистрация
19 Июн 2015
Сообщения
312
Благодарности
159
Баллы
210
Нужна помощь умных людей.
Заклинание Украсть жизнь работает некорректно - крадет хиты не только у нпс, но и у гг. Как исправить этот фокус?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
А почему оно таким стало вдруг? Оно всегда работало ок.
 

Eralifier

Участник форума
Регистрация
19 Июн 2015
Сообщения
312
Благодарности
159
Баллы
210
Модификации. Давно не играл, решил пройти и запустил модификацю Resident, что идет на Гильдии. Уж кто внес такое дело - гильдейцы или создатель мода не знаю, но заклинание работает таким образом(хиты снимаются у гг и врага, при этом украденные хп уходят в никуда).
Ждать пока кто-нибудь сделает заплатку мне влом, как и перепроходить, вот и решил, подправить это дело. Только вот мозгов не хватает *cry*
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Ну, скорее всего кто то напутал знаки, в обработчике состояния кражи жизни, нужно смотреть скрипт.
 

Eralifier

Участник форума
Регистрация
19 Июн 2015
Сообщения
312
Благодарности
159
Баллы
210
Ну, скорее всего кто то напутал знаки, в обработчике состояния кражи жизни, нужно смотреть скрипт.

Извиняюсь за заведомой тупой вопрос, но в каком именно скрипте надо смотреть?
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.577
Благодарности
4.171
Баллы
915
@Eralifier:
AI\Magic\Spells\Spell_SuckEnergy.d (инвестирование маны)
AI\Magic\ZS_Magic\ZS_SuckEnergy.d (обработка состояния)
 
Сверху Снизу