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

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

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

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

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
Файл AI\Human\TA_Human\ZS_Pick_FP.d
Код:
func void ZS_Pick_FP()
{
    Perception_Set_Normal();
    B_ResetAll(self);
    AI_SetWalkMode(self,NPC_WALK);
    if(Npc_GetDistToWP(self,self.wp) > TA_DIST_SELFWP_MAX)
    {
        AI_GotoWP(self,self.wp);
    };
};

func int ZS_Pick_FP_Loop()
{
    if((Npc_GetStateTime(self) >= 7) && Hlp_Random(2))
    {
        if(Npc_IsOnFP(self,"PICK") && Wld_IsFPAvailable(self,"PICK"))
        {
            AI_GotoNextFP(self,"PICK");
            AI_PlayAni(self,"T_PLUNDER");
            Npc_SetStateTime(self,0);
        }
        else if(Npc_IsOnFP(self,"PICK"))
        {
            AI_PlayAni(self,"T_PLUNDER");
            Npc_SetStateTime(self,0);
        };
        AI_SetWalkMode(self,NPC_WALK);
    }
    else if(Npc_GetStateTime(self) >= 7)
    {
        if(Npc_IsOnFP(self,"PICK"))
        {
            AI_PlayAni(self,"T_PLUNDER");
        };
        AI_SetWalkMode(self,NPC_WALK);
    };
    if(!Npc_IsOnFP(self,"PICK") && Wld_IsFPAvailable(self,"PICK"))
    {
        AI_GotoFP(self,"PICK");
    };
    return LOOP_CONTINUE;
};

func void ZS_Pick_FP_End()
{
};
Из него AI_PlayAni(self,"T_PLUNDER"); запуск анимации кражи с тела трупа

Я не совсем это имел ввиду. Я хочу применить анимации к гг пока у игрока открыт инвентарь трупа/лежащего противника.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Есть ли какие требования к шрифтам к готике? Сколь не бился неправильно отображаются шрифты. Создавал их в Font2Torga с такими параметрами
Безымянный11.png
В GoMan переводил с такими
Безымянный1111.png
В игре
Безым111.png
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.802
Баллы
995
Есть ли какие требования к шрифтам к готике? Сколь не бился неправильно отображаются шрифты. Создавал их в Font2Torga с такими параметрами
Есть..
1. Текстуры с альфой должны быть, мип-мапы отключены.
2. Гоман в топку, текстуры фонтов компилить только двигом игры.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Я бы согласился, только вот мод Час Расплаты tga не воспринимает вообще, только tex. Им проще конвентить туда обратно, попробовал сконвертить с RBGA8888 (Раньше с DTX3, потом понял что он не поддерживает альфа-канал), текст виднеется, осталось подобрать оптимальный размер самого шрифтаБезымянный.png
Не подскажете какой оптимальный?
 
Последнее редактирование:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
Файл AI\Human\TA_Human\ZS_Pick_FP.d
На самом деле состояния ZS_Pick_FP() и ZS_Rake_FP() предназначены для работающих в поле крестьян, а для обыска существует это состояние:
Код:
func void ZS_RansackBody()
{
    Perception_Set_Normal();
    AI_Standup(self);
    AI_GotoNpc(self,other);
};

func int ZS_RansackBody_Loop()
{
    return LOOP_END;
};

func void ZS_RansackBody_End()
{
    var int x;
    if(C_NpcIsDown(other))
    {
        AI_TurnToNpc(self,other);
        AI_PlayAni(self,"T_PLUNDER");
        if(Npc_HasItems(other,Holy_Hammer_MIS) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Garwig)))
        {
            CreateInvItems(self,Holy_Hammer_MIS,1);
            Npc_RemoveInvItems(other,Holy_Hammer_MIS,1);
        };
        if(Npc_HasItems(other,ItMw_2h_Rod) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rod)))
        {
            CreateInvItems(self,ItMw_2h_Rod,1);
            Npc_RemoveInvItems(other,ItMw_2h_Rod,1);
            AI_EquipBestMeleeWeapon(self);
        };
        if(Npc_HasItems(other,ITKE_Greg_ADDON_MIS) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Francis)))
        {
            CreateInvItems(self,ITKE_Greg_ADDON_MIS,1);
            Npc_RemoveInvItems(other,ITKE_Greg_ADDON_MIS,1);
        };
        if(Npc_HasItems(other,ItMi_Gold))
        {
            x = Npc_HasItems(other,ItMi_Gold);
            CreateInvItems(self,ItMi_Gold,x);
            Npc_RemoveInvItems(other,ItMi_Gold,x);
            B_Say(self,other,"$ITOOKYOURGOLD");
        }
        else
        {
            B_Say(self,other,"$SHITNOGOLD");
        };
    };
    Npc_PerceiveAll(self);
    if(Wld_DetectItem(self,ITEM_KAT_NF))
    {
        if(Hlp_IsValidItem(item) && (Npc_GetDistToItem(self,item) < 500))
        {
            AI_TakeItem(self,item);
            B_Say(self,self,"$ITAKEYOURWEAPON");
            AI_EquipBestMeleeWeapon(self);
        };
    };
    if(Wld_DetectItem(self,ITEM_KAT_FF))
    {
        if(Hlp_IsValidItem(item) && (Npc_GetDistToItem(self,item) < 500))
        {
            AI_TakeItem(self,item);
            B_Say(self,self,"$ITAKEYOURWEAPON");
            AI_EquipBestRangedWeapon(self);
        };
    };
    if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX] / 2))
    {
        AI_StartState(self,ZS_HealSelf,0,"");
        return;
    };
};
У Аллигатора Джека есть специальное состояние для того, чтобы он мог забрать себе мясо, накопленное ГГ во время охоты на болотных крыс:
Код:
func void ZS_GetMeat()
{
    var int x;
    Perception_Set_Minimal();
    AI_Standup(self);
    AI_GotoNpc(self,other);
    if(C_NpcIsDown(other))
    {
        AI_TurnToNPC(self,other);
        AI_PlayAni(self,"T_PLUNDER");
        x = Npc_HasItems(other,ItFoMuttonRaw);
        CreateInvItems(self,ItFoMuttonRaw,x);
        Npc_RemoveInvItems(other,ItFoMuttonRaw,x);
    };
    if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX] / 2))
    {
        AI_StartState(self,ZS_HealSelf,0,"");
        return;
    };
};
 

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
На самом деле состояния ZS_Pick_FP() и ZS_Rake_FP() предназначены для работающих в поле крестьян, а для обыска существует это состояние:
Код:
func void ZS_RansackBody()
{
    Perception_Set_Normal();
    AI_Standup(self);
    AI_GotoNpc(self,other);
};

func int ZS_RansackBody_Loop()
{
    return LOOP_END;
};

func void ZS_RansackBody_End()
{
    var int x;
    if(C_NpcIsDown(other))
    {
        AI_TurnToNpc(self,other);
        AI_PlayAni(self,"T_PLUNDER");
        if(Npc_HasItems(other,Holy_Hammer_MIS) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Garwig)))
        {
            CreateInvItems(self,Holy_Hammer_MIS,1);
            Npc_RemoveInvItems(other,Holy_Hammer_MIS,1);
        };
        if(Npc_HasItems(other,ItMw_2h_Rod) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rod)))
        {
            CreateInvItems(self,ItMw_2h_Rod,1);
            Npc_RemoveInvItems(other,ItMw_2h_Rod,1);
            AI_EquipBestMeleeWeapon(self);
        };
        if(Npc_HasItems(other,ITKE_Greg_ADDON_MIS) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Francis)))
        {
            CreateInvItems(self,ITKE_Greg_ADDON_MIS,1);
            Npc_RemoveInvItems(other,ITKE_Greg_ADDON_MIS,1);
        };
        if(Npc_HasItems(other,ItMi_Gold))
        {
            x = Npc_HasItems(other,ItMi_Gold);
            CreateInvItems(self,ItMi_Gold,x);
            Npc_RemoveInvItems(other,ItMi_Gold,x);
            B_Say(self,other,"$ITOOKYOURGOLD");
        }
        else
        {
            B_Say(self,other,"$SHITNOGOLD");
        };
    };
    Npc_PerceiveAll(self);
    if(Wld_DetectItem(self,ITEM_KAT_NF))
    {
        if(Hlp_IsValidItem(item) && (Npc_GetDistToItem(self,item) < 500))
        {
            AI_TakeItem(self,item);
            B_Say(self,self,"$ITAKEYOURWEAPON");
            AI_EquipBestMeleeWeapon(self);
        };
    };
    if(Wld_DetectItem(self,ITEM_KAT_FF))
    {
        if(Hlp_IsValidItem(item) && (Npc_GetDistToItem(self,item) < 500))
        {
            AI_TakeItem(self,item);
            B_Say(self,self,"$ITAKEYOURWEAPON");
            AI_EquipBestRangedWeapon(self);
        };
    };
    if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX] / 2))
    {
        AI_StartState(self,ZS_HealSelf,0,"");
        return;
    };
};
У Аллигатора Джека есть специальное состояние для того, чтобы он мог забрать себе мясо, накопленное ГГ во время охоты на болотных крыс:
Код:
func void ZS_GetMeat()
{
    var int x;
    Perception_Set_Minimal();
    AI_Standup(self);
    AI_GotoNpc(self,other);
    if(C_NpcIsDown(other))
    {
        AI_TurnToNPC(self,other);
        AI_PlayAni(self,"T_PLUNDER");
        x = Npc_HasItems(other,ItFoMuttonRaw);
        CreateInvItems(self,ItFoMuttonRaw,x);
        Npc_RemoveInvItems(other,ItFoMuttonRaw,x);
    };
    if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX] / 2))
    {
        AI_StartState(self,ZS_HealSelf,0,"");
        return;
    };
};
Это, конечно, полезно, но опять не то, что я искал, если только zs_ransackbody не применяется к гг. Мне нужны функции открытия и закрытия игроком инвентаря противника.
Я хочу применить анимацию к гг (не к неписю) во время обыскивания трупа.
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.562
Благодарности
4.153
Баллы
915
Мне нужны функции открытия и закрытия игроком инвентаря противника.
Этих функций нет в стандартном наборе, поэтому доступ к ним возможен только через расширители.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.331
Благодарности
3.178
Баллы
525
Я бы согласился, только вот мод Час Расплаты tga не воспринимает вообще, только tex.
Текстуры нормально компилит движок игры. Если откроешь ГоМаном папку с текстурами оригинала, то увидишь, что TGA-исходники шрифтов там лежат в особой папке. Создай в папке с игрой такую же структуру папок и кидай туда текстуры шрифтов. После запуска игры и вызова шрифта на экран движок его скомпилит.

Не подскажете какой оптимальный?
Верь своим глазам. Слишком маленький будет трудно читать, слишком большой не поместится в отведённое пространство. А вообще, размер символов, выводимых на экран задаётся в файле разметки (*.fnt), генерируемом вместе со шрифтом. Движок может сгенерировать его сам, если текстура собрана правильно. Не знаю, от чего зависит там размер символов. Возможно, от цифры в названии шрифта. Не знаю, генерирует ли такой файл Font2Torga.

В каких расширителях есть такие функции?
Не уверен, что где-то это есть. Состояние обыскивания инвентаря обрабатывается движком. :oops:
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Текстуры нормально компилит движок игры. Если откроешь ГоМаном папку с текстурами оригинала, то увидишь, что TGA-исходники шрифтов там лежат в особой папке. Создай в папке с игрой такую же структуру папок и кидай туда текстуры шрифтов. После запуска игры и вызова шрифта на экран движок его скомпилит.

Верь своим глазам. Слишком маленький будет трудно читать, слишком большой не поместится в отведённое пространство. А вообще, размер символов, выводимых на экран задаётся в файле разметки (*.fnt), генерируемом вместе со шрифтом. Движок может сгенерировать его сам, если текстура собрана правильно. Не знаю, от чего зависит там размер символов. Возможно, от цифры в названии шрифта. Не знаю, генерирует ли такой файл Font2Torga.

1. Устал делать шрифты, в итоге взял с оригинала, выглядит не плохо, вполне читабельно, для проверки перевода пойдет, но есть небольшие проблемы, мод сам ставит все в курсив, из-за чего буквы как бы сьедаются
Это видно на следующих скриншотах
Безымянный.png Безымянный1.png
Так же есть ещё пара файлов, которые не стал трогать, ибо там вообще фигня
2. На счет компила игрой проверил уже многократно, спасибо:), fnt файлы создает Font2targa, но бесполезны, ибо сколь не подбирал размеры букв, рамки все не подходит.
Силы на казалось бы простые текстуры потратил средние
(Модостроя опыта нема, учусь с первого раза)
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.331
Благодарности
3.178
Баллы
525
мод сам ставит все в курсив, из-за чего буквы как бы сьедаются
Гм, так может лучше обратиться к авторам мода с вопросом, как отключить этот дебильный перевод в курсив, ломающий разметку?

В принципе, fnt-файлы можно редактировать вручную с помощью hex-редактора. Но в данном случае, как мне кажется, это тот ещё геморр.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.235
Благодарности
2.575
Баллы
455
2. На счет компила игрой проверил уже многократно, спасибо:), fnt файлы создает Font2targa, но бесполезны, ибо сколь не подбирал размеры букв, рамки все не подходит.
tga текстуры для компиляции шрифтов нужно ложить в папку _work\data\Textures\FONTS\NOMIP
Если создавались при помощи Font2Targa, то FNT файлы нужно заранее ложить в папку _work\data\Textures\_compiled, иначе игра пытается их создать сама и выходит не то что нужно.
Кроме того, нужно изолировать ВСЕ файлы шрифтов (TEX и FNT) из ВСЕХ vdf файлов, находящихся в каталоге игры, только в этом случае получиться что-то толковое.
Для удобства компилирования все шрифтов за раз можно в скриптах создать книжку со всеми возможными шрифтами, при открытии которой текстуры будут скомпилированы.
Ну и можешь попробовать подсунуть в игру Gothic High Resolution FONT
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Ну и можешь попробовать подсунуть в игру Gothic High Resolution FONT

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

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.235
Благодарности
2.575
Баллы
455
Гм, так может лучше обратиться к авторам мода с вопросом, как отключить этот дебильный перевод в курсив, ломающий разметку?
Ты это сейчас серьезно? :D Движок игры не умеет ставить в курсив шрифт из растровой текстуры, это текстура шрифта создана с использованием изначально курсивного шрифта, нужно просто заменить текстуру шрифта с разметкой на свою. *facepalm*
 

enil9

Участник форума
Регистрация
25 Май 2014
Сообщения
66
Благодарности
14
Баллы
165
мод сам ставит все в курсив, из-за чего буквы как бы сьедаются
может,если menu.dat взять например от Dimus https://worldofplayers.ru/threads/36817/
и с Gothic High Resolution FONT https://worldofplayers.ru/threads/25865/
отобразится нормально тогда смотреть что прописано в Menu_Defines.d или др.файлах переводимого мода
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.843
Благодарности
5.268
Баллы
910
Мой косяк, недоглядел файлы с курсивом и без.
Sorry бывалые модостроители
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.331
Благодарности
3.178
Баллы
525

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
Еще есть несколько вопросов:
У неписей есть атрибуты регена маны и хп, но они работают кривовато и не могут принимать значения меньше 1. У драконов есть реген, но я его еще не нашел. Короче, как сделать реген быстрее? И где добавить код, чтобы превратить его в талант? Где находится функция, срабатывающая после съедения определенного количества еды? Можно ли здесь спрашивать про ast или есть отдельная тема?
 

Грек73

Участник форума
Регистрация
13 Дек 2016
Сообщения
477
Благодарности
85
Баллы
200
По функции сробатывающий после поедания еды смотри здесь .
https://worldofplayers.ru/threads/17870/
По скорости регенерации 1 насколько я помню макс . значение .
 
Последнее редактирование:
Сверху Снизу