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

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

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

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

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Следовательно, перед тем, как непись готов "расстаться со щитом", он выронил его и перешёл в состояние ZS_Unconscious.
Но после того как сохранишь и загрузишь игру или сходишь в другую локацию то оверлей возвращается...


Оверлей можно натянуть в какой-нибудь функции распорядка дня, написанной специально для щитовика.
Проще так:
Код:
instance SLD_728_Jarvis(Npc_Default)
{
    name[0] = "Ярвис";
    npcType = npctype_main;
    guild = GIL_SLD;
    level = 16;
    flags = NPC_FLAG_IMMORTAL;
    voice = 8;
    id = 728;
    attribute[ATR_STRENGTH] = 75;
    attribute[ATR_DEXTERITY] = 55;
    attribute[ATR_MANA_MAX] = 0;
    attribute[ATR_MANA] = 0;
    attribute[ATR_HITPOINTS_MAX] = 232;
    attribute[ATR_HITPOINTS] = 232;
    Mdl_SetVisual(self,"HUMANS.MDS");
    Mdl_ApplyOverlayMds(self,"Humans_Militia.mds");
    Mdl_ApplyOverlayMds(self,"SHIELD_ST3.MDS");
    Mdl_SetVisualBody(self,"hum_body_Naked0",0,1,"Hum_Head_Pony",53,1,sld_armor_m);
    B_Scale(self);
    Mdl_SetModelFatness(self,0);
    aivar[AIV_HUMAN_SHIELD] = TRUE;
    fight_tactic = FAI_HUMAN_MASTER;
    Npc_SetTalentSkill(self,NPC_TALENT_1H,2);
    Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
    EquipItem(self,ItMw_1H_Mace_War_03);
    EquipItem(self,it_shield_round_01);
    EquipItem(self,ItRw_Bow_Long_01);
    CreateInvItems(self,ItAmArrow,20);
    CreateInvItems(self,ItFoRice,7);
    CreateInvItems(self,ItFoLoaf,5);
    CreateInvItems(self,ItFoMutton,4);
    CreateInvItems(self,ItMiNugget,15);
    CreateInvItems(self,ItFoBooze,5);
    CreateInvItems(self,ItLsTorch,5);
    CreateInvItems(self,ItFo_Potion_Health_02,6);
    CreateInvItem(self,ItMi_Stuff_Barbknife_01);
    CreateInvItem(self,ItMi_Stuff_Mug_01);
    daily_routine = Rtn_start_728;
};


func void Rtn_start_728()
{
    TA_Guard(8,0,20,0,"NC_PATH_JARVIS");
    TA_Guard(20,0,8,0,"NC_PATH_JARVIS");
};
 
Последнее редактирование модератором:

ElderGamer


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

То есть, ты назначаешь неписю оверлей, даже если у него нет щита. Тогда почему ты удивляешься этому?

Но после того как сохранишь и загрузишь игру или сходишь в другую локацию то оверлей возвращается
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
То есть, ты назначаешь неписю оверлей, даже если у него нет щита. Тогда почему ты удивляешься этому?
Только для тех у кого есть щит, потом убирать пытаюсь когда шита уже нет.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
Только для тех у кого есть щит
Не, ты упускаешь из виду, что инстанция непися читается при каждой инициализации мира (загрузка локации, загрузка сохранения). Часть информации из неё берётся за основу. Мне известно, что обновляется из инстанции имя, внешний вид, оверлей, боевой режим, если он активирован. Может и ещё что-то, не знаю. В твоей реализации оверлей назначается и тогда, когда у непися есть щит, и когда щита уже нет.

P. S. Переменная var int weapon класса C_Npc отображает оружие, которым экипирован непись в боевом режиме (одноручное, двуручное, лук, арбалет и др.). Её можно использовать для определения этого момента. Проверь, не добавили ли авторы СистемПака новые значения переменной при использовании щита.
 
Последнее редактирование:

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Мне удалось написать эти функции!
На запуск оверлея, запускается из Perceptions
Код:
if(self.aivar[AIV_HUMAN_SHIELD] == TRUE)
    {
        if((self.aivar[AIV_WEARSHIELD] == FALSE) && ((Npc_HasItems(self,it_shield_tower_01) >= 1)))
        {
            if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 2)
            {
                Mdl_RemoveOverlayMds(self,"HUMANS_1HST2.MDS");
                Mdl_ApplyOverlayMds(self,"SHIELD_ST3.MDS");
            }
            else if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 1)
            {
                Mdl_RemoveOverlayMds(self,"HUMANS_1HST1.MDS");
                Mdl_ApplyOverlayMds(self,"SHIELD_ST2.MDS");
            }
            else
            {
                Mdl_ApplyOverlayMds(self,"SHIELD_ST1.MDS");
            };
            self.aivar[AIV_WEARSHIELD] = TRUE;
        };
    };
И на снятие его:
Код:
func void ZS_Unconscious()
{
    if((self.aivar[AIV_HUMAN_SHIELD] == TRUE) && ((Npc_HasItems(self,it_shield_tower_01) == 0)))
    {
        if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 2)
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST3.MDS");
            Mdl_ApplyOverlayMds(self,"HUMANS_1HST2.MDS");
        }
        else if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 1)
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST2.MDS");
            Mdl_ApplyOverlayMds(self,"HUMANS_1HST1.MDS");
        }
        else
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST1.MDS");
        };
   };
   ...
};
И в init_world()
Код:
VLK_534_Buddler.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_254_Orry.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_210_Scatty.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_205_Scorpio.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_208_Cutter.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_214_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_215_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_216_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_217_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_218_Gardist.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_245_Gardist.aivar[AIV_WEARSHIELD] = FALSE;
    Sld_709_Cord.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_728_Jarvis.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_727_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_702_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_723_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_731_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_732_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_751_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_757_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
Осталась одна проблема - как правильно определить надет ли щит или нет.
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Мне удалось написать эти функции!
На запуск оверлея, запускается из Perceptions
Код:
if(self.aivar[AIV_HUMAN_SHIELD] == TRUE)
    {
        if((self.aivar[AIV_WEARSHIELD] == FALSE) && ((Npc_HasItems(self,it_shield_tower_01) >= 1)))
        {
            if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 2)
            {
                Mdl_RemoveOverlayMds(self,"HUMANS_1HST2.MDS");
                Mdl_ApplyOverlayMds(self,"SHIELD_ST3.MDS");
            }
            else if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 1)
            {
                Mdl_RemoveOverlayMds(self,"HUMANS_1HST1.MDS");
                Mdl_ApplyOverlayMds(self,"SHIELD_ST2.MDS");
            }
            else
            {
                Mdl_ApplyOverlayMds(self,"SHIELD_ST1.MDS");
            };
            self.aivar[AIV_WEARSHIELD] = TRUE;
        };
    };
И на снятие его:
Код:
func void ZS_Unconscious()
{
    if((self.aivar[AIV_HUMAN_SHIELD] == TRUE) && ((Npc_HasItems(self,it_shield_tower_01) == 0)))
    {
        if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 2)
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST3.MDS");
            Mdl_ApplyOverlayMds(self,"HUMANS_1HST2.MDS");
        }
        else if(Npc_GetTalentSkill(self,NPC_TALENT_1H) == 1)
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST2.MDS");
            Mdl_ApplyOverlayMds(self,"HUMANS_1HST1.MDS");
        }
        else
        {
            Mdl_RemoveOverlayMds(self,"SHIELD_ST1.MDS");
        };
   };
   ...
};
И в init_world()
Код:
VLK_534_Buddler.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_254_Orry.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_210_Scatty.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_205_Scorpio.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_208_Cutter.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_214_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_215_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_216_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_217_Torwache.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_218_Gardist.aivar[AIV_WEARSHIELD] = FALSE;
    GRD_245_Gardist.aivar[AIV_WEARSHIELD] = FALSE;
    Sld_709_Cord.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_728_Jarvis.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_727_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_702_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_723_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_731_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_732_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_751_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
    SLD_757_Soeldner.aivar[AIV_WEARSHIELD] = FALSE;
Осталась одна проблема - как правильно определить надет ли щит или нет.
Сколько же костылей.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Почему сразу костыли?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Если можно было сделалть лучше, то скажи как? А насчет нужно это Готике или нет, это зависит от того как все сделать, у меня кажется все получилось хорошо, и разве могут несколько щитов испортить атмосферу?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Если можно было сделалть лучше, то скажи как? А насчет нужно это Готике или нет, это зависит от того как все сделать, у меня кажется все получилось хорошо, и разве могут несколько щитов испортить атмосферу?
Эти вопросы к тем кто сп делает
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Насчет компаса я согласен - это костыль, и у меня тоже есть сомнения нужен ли он, но если кому-то нравится то пусть покупают у торговца и пользуются, а не хотят и не надо. Таже история и со щитами хочешь пользуйся, не хочешь - не надо, но до сих пор в The old story на них ни кто не жаловался.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.184
Благодарности
2.879
Баллы
420
Если можно было сделалть лучше, то скажи как?
Увы, AST он пилит на Готику 2, поэтому ничем вам не поможет в этом вопросе, кроме сочувствия.


Эти вопросы к тем кто сп делает
Вопрос в том, насколько проработанная система нужна для Готики 1 с ее околонулевой модостроительной активностью.
То, что запилили, вполне позволяет реализовать щиты на базовом наборе скриптов. А вот какой огород скриптов городить - дело каждого.
Нужно понять одну простую вещь: в текущем виде щиты нельзя реализовать 100% на отлично ни на систем-паке, ни на AST. Все благие начинания глубокой доработки упрутся в набор динамической модели Humans.MDS. Это касается также копий, кинжалов и прочих новых классов вооружений.

Чтобы решить задачу, нужно сначала сделать полный ремастер Humans.MDS для Готики 1 и 2, включив в модель новые слоты для оружия, а также параллельно с доработкой движка (любым образом) компилировать новые анимации с ключами новых классов оружия: shield, 2х2, spear, axe, dag и т.д. А потом тестить и тестить.
В этом случае возможно действительно выстроить очень гибкую и удобную систему с минимумом скриптовых хвостов (по сути останется только накидывать скилл, а все оверлеи будет обрабатывать движок при надетом оружии определенного класса).

Таже история и со щитами хочешь пользуйся, не хочешь - не надо
Если у вас есть предложения по улучшению или дополнению текущей версии, обратитесь к авторам систем-пака. Возможно, в следующей версии вам починят On_equip/unequip в Готике 1.
 

Nergal_ov_Grim

Участник форума
Регистрация
8 Апр 2015
Сообщения
162
Благодарности
3
Баллы
170
Нарисовал, значится, я маленькую локашку, вставил туда просто башенку и все, чтоб попробовать потекстурить в спейсере. Запускаю меш, компилирую, после чего да, открывается, но после нескольких секунд работы начинает дичайше тормозить, тупить, виснуть, и, как апогей всего, вылетает спейсер. Если успеть открыть в то время зен обычного мира, то все работает как часы. В чем проблема кроется?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.332
Баллы
315
Нарисовал, значится, я маленькую локашку, вставил туда просто башенку и все, чтоб попробовать потекстурить в спейсере. Запускаю меш, компилирую, после чего да, открывается, но после нескольких секунд работы начинает дичайше тормозить, тупить, виснуть, и, как апогей всего, вылетает спейсер. Если успеть открыть в то время зен обычного мира, то все работает как часы. В чем проблема кроется?
Запускай с параметром -zmaxframerate:30
 

Nergal_ov_Grim

Участник форума
Регистрация
8 Апр 2015
Сообщения
162
Благодарности
3
Баллы
170
Последнее редактирование модератором:

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
869
Благодарности
498
Баллы
230
Только в первый раз ровно было. С последующим запуском все равно все криво
Зацени шапку темы:"Помощь по спейсеру".Нужная тебе инфа(возможно),следует за словами: "....и создал батник с содержимым:"
 

Nergal_ov_Grim

Участник форума
Регистрация
8 Апр 2015
Сообщения
162
Благодарности
3
Баллы
170

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
869
Благодарности
498
Баллы
230
А как создать-то его?
Создай простой текстовый документ,напиши в нем нужный тебе код(типа:
@echo off
start /affinity 1 Spacer2.exe -zMaxFramerate:60),затем замени(путем простой правки) расширение txt, на bat.
Кинь получившуюся ерундовину в "готичную" папку System.
PS Ну и на всякий случай: гугль по запросу "как создать батник", может многое подсказать;)
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.247
Благодарности
6.245
Баллы
1.595
Сверху Снизу