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

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

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

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

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Хочу прописать киркам стаканье в 1 слот, но избежать бага когда копаешь руду с экипированной киркой и в инвентаре есть еще несколько кирок. Баг в том, что либо кирки задвоятся, либо вылетит игра.
В Ребалансе кирки стакаются, думал подсмотреть как это сделано там, но там этот баг не исправлен.

Он нигде не исправлен вроде как, кроме возвратки. Там надо анимацию добычи править и делать кирку обычным предметом, не оружием. А оружие дублировать отдельной инстанцией.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Там надо анимацию добычи править
А примерчик можешь привести?

и делать кирку обычным предметом, не оружием
Как вариант.

А оружие дублировать отдельной инстанцией.
А вот это не логично, как мне кажется.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
А примерчик можешь привести?


Как вариант.


А вот это не логично, как мне кажется.

Смотри сорцы возвратки по анимам.

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Добрый всем вечер. Есть ли способы защиты DAT-ников и VDF-ников от декомпиляции?
ВДФ врятли. а вот по поводу ДАТ - можешь всякие костыли использовать, типа икаруса или лего.
Только вот зачем?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
Надо двигло лохматить
Код:
void beginUseItem( npc ) {
   slot = npc.findSlotByName( bip01 rightHand )
   if( slot && item ) {
      visual = item.getVisual()
      if( visual ) {
         visual.addRef()
         slot.setVisual( visual )
      }
   }
}

void endUseItem( npc ) {
   slot = npc.findSlotByName( bip01 rightHand )
   if( slot ) {
      visual = slot.getVisual()
      if( visual ) {
         visual.release()
         slot.setVisual( null )
      }
   }
}
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Смотри сорцы возвратки по анимам.
Ээ, сколько там гигабайт скачать нужно? 4+, кажется. :)

если анимы используют предмет в слоте оружия будет вылет
В Г1, кстати, вылета нет. Там просто кирка деэкипируется при переходе в слот руки, даже если в инвентаре есть другая кирка. Назад в слот оружия кирка не возвращается.
 

MACTEPXau3

Участник форума
Регистрация
23 Май 2010
Сообщения
36
Благодарности
3
Баллы
150
Короче я придумал вроде как работающее без багов решение. Как я понял причина бага в том, что в UseWithItem прописана кирка. Из-за этого оно снимает с гг экипированную кирку когда используешь жилу руды.

Что я сделал:
-Убрал кирку из поля UseWithItem. Прописал проверку наличия кирки в инвентаре через CondititonFunc.
(Теперь если в инвентаре несколько кирок, то можно копать с одетой киркой и та не снимется. А на случай когда одета единственная кирка, прописал unequip оружия.)
-Создал "копию кирки" в скриптах, которая будет вставляться в руки и не будет нигде доступна в игре.
-Поправил анимацию, "копию кирки" вставил в руки через DEF_CREATE_ITEM, а удаление через DEF_DESTROY_ITEM.
(DEF_CREATE_ITEM по идее должен удалять предмет из мира по окончании анимации, но если не прописать DEF_DESTROY_ITEM, то "копия кирки" почему-то остается в инвентаре.)
-убрал создание кирок в инвентаре и их экипировку в ZS_Pick_Ore(). Прописал там же AI_UnequipWeapons(self), чтобы нпс не копали руду, имея кирку и в руке и экипированную за спиной.
-убрал удаление кирок для рабов в ZS_Unconscious()

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

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
но если не прописать DEF_DESTROY_ITEM, то "копия кирки" почему-то остается в инвентаре
Думаю, это потому, что ранее не был вставлен предмет по тегу DEF_INSERT_ITEM. Походу, движок умеет работать только с такой последовательностью.

-убрал создание кирок в инвентаре и их экипировку в ZS_Pick_Ore().
Забавно, но это можно сделать и в оригинале. Если в свойствах объекта прописан предмет, то у непися он создаётся автоматически. Даже если в инвентаре его ранее не было, взаимодействие с объектом возможно. У ГГ наличие предмета проверяется движком. Во всяком случае, в Г1 это так работает.

убрал удаление кирок для рабов в ZS_Unconscious()
В ZS_Dead тоже нужно.

Но "копии кирок" теперь иногда появляются в инвентаре у нпс, например если заговорить с ними пока они копают руду.
В ряде случаев, происходит переход в новое состояние без полноценного завершения предыдущего состояния. Желательно править ИИ в таких случаях, давая неписям возможность либо штатно завершить взаимодействие с объектом/предметом, либо имитировать это завершение.

Кстати, твой вариант, думаю, не будет работать в Г1, где взаимодействие с объектом чётко разделено на стадии, не происходит по одному клику. Или нужно прописывать принудительное взаимодействие с объектом в кондишн-функцию.
 

MACTEPXau3

Участник форума
Регистрация
23 Май 2010
Сообщения
36
Благодарности
3
Баллы
150
Думаю, это потому, что ранее не был вставлен предмет по тегу DEF_INSERT_ITEM
Но в теге DEF_INSERT_ITEM нельзя прописать вставку конкретного предмета, оно вставляет тот, что прописан в UseWithItem.
Да и с одним лишь DEF_CREATE_ITEM все хорошо работает, когда кирки не стакнуты и прописаны в UseWithItem. Но и тут есть нюанс. Кирка здесь убирается позднее, чем раньше, оставаясь в руке на секунду когда перс встает прямо, что выглядит немного глупо. Но зато исправляется баг, что я описал выше, когда можно копать без кирки в руке.

В ZS_Dead тоже нужно.
А там оно и не было прописано.

Желательно править ИИ в таких случаях, давая неписям возможность либо штатно завершить взаимодействие с объектом/предметом, либо имитировать это завершение.
Но тогда придется долго ждать перед разговором с нпс как в г1 например когда нельзя поговорить с Ларсом, пока тот не доест, не докурит, не допьет.

твой вариант, думаю, не будет работать в Г1
Ну г1 я и не собираюсь править, да там в оригинале оружие и не стакается. Но думаю, что там будет работать, если прописать по типу как в функции MC_OrcCity_Gate
AI_UseMob (hero, "VWHEEL", 1);
AI_UseMob (hero, "VWHEEL", -1);
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
А там оно и не было прописано.
Май бэд. Я прочитал не "убрал удаление кирок", а "добавил удаление кирок ". Имелось в виду то, что если в инвентаре непися создаются служебные предметы, или они могут туда попасть, то нужно чистить от них инвентарь в случаях, когда ГГ может туда заглянуть (ZS_Unconscious и ZS_Dead).

Но тогда придется долго ждать перед разговором с нпс как в г1 например когда нельзя поговорить с Ларсом, пока тот не доест, не докурит, не допьет.
Да, это так. Но, во-первых, это не всегда долго. А во-вторых, это правильный ход событий. Прекращение взаимодействия с объектами или предметами без проигрывания соответствующих анимаций, возможно, их ускоренного варианта, это зло, от которого нужно бы избавляться.

AI_UseMob (hero, "VWHEEL", 1);
AI_UseMob (hero, "VWHEEL", -1);
Ну, да. Я и сказал:
Или нужно прописывать принудительное взаимодействие с объектом в кондишн-функцию.
 

Qvei

Участник форума
Регистрация
14 Мар 2018
Сообщения
12
Благодарности
0
Баллы
165
Доброго время суток.
Подскажите можно ли удалить эффект огня в г2?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Можно. Текстуру огня сделать прозрачной или заменить ее фейком с фулл альфой
Подозреваю, что его беспокоит снижение производительности вблизи pfx-эффектов, от которого он хочет избавиться. Тогда "косметика" с подменой текстуры не поможет.
 

Trazege

Участник форума
Регистрация
20 Фев 2008
Сообщения
1.760
Благодарности
1.394
Баллы
340
Подозреваю, что его беспокоит снижение производительности вблизи pfx-эффектов, от которого он хочет избавиться. Тогда "косметика" с подменой текстуры не поможет.

У любого пфх все равно есть текстура... хотя при большом количестве частиц в пфх эффекте замена текстура да - ничего не даст.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.275
Баллы
910
Хотелось доделать патч для мода Угроза, но одна ошибка не дает покоя.
В локации пирамида, есть один НПС (Циклоп), с которым ГГ встречаешься и у них начинается перепалка.
Так вот. Во время драки у Циклопа должен сработать оригинальный скрипт следующий
Daedalus:
var int testzyklopweak_true;

func int mc_testzyklopweak()
{
    var C_NPC zyklop;
    if(TESTZYKLOPWEAK_TRUE == FALSE)
    {
        if(zyklop.attribute[ATR_HITPOINTS] < 250)
        {
            zyklop = Hlp_GetNpc(zyklop_2);
            TESTZYKLOPWEAK_TRUE = TRUE;
            AI_Teleport(zyklop,"ZYKLOP_HIDE");
            Snd_Play("Evil_Laugh");
            Wld_SendUntrigger("TESTZYKLOPWEAK_LIST_01");
            Wld_SendUntrigger("TESTZYKLOPWEAK_LIST_02");
            return TRUE;
        };
    };
    return TRUE;
};
К сожалению, эта фигня от слова совсем не работает. Даже оставляя 1 ХП, он может вырубить ГГ, дальше эффекта никакого.
Daedalus:
instance DIA_ZYKLOP_PYRAMIDE(C_INFO)
{
    npc = zyklop_2;
    nr = 1;
    condition = dia_zyklop_pyramide_condition;
    information = dia_zyklop_pyramide_info;
    permanent = 0;
    important = 1;
    description = "Ох-Хо-Хо-Хо-Хох... ты - ЛОХ!";
};

func int dia_zyklop_pyramide_condition()
{
    return 1;
};

func void dia_zyklop_pyramide_info()
{
    AI_Output(self,other,"DIA_Zyklop_Pyramide_05_01");    //Ох-Хо-Хо-Хо-Хох... ты - ЛОХ!
    AI_StopProcessInfos(self);
    Npc_SetTarget(self,other);
    AI_StartState(self,zs_attack,1,"");
    ZYKLOPPYRAMIDE = TRUE;
    b_logentry(Piramide, "В этой странной местности, похожей на лабиринт в пирамиде, я нашел Циклопа. Он напал на меня, после битвы пропал с ужасным хохотом. Надо бы найти выход отсюда.");
};
Я так понимаю, что тот скрипт не срабатывает из-за состояния драки. А если вырубит ГГ, то все равно не срабатывает, даже имея < 250 HP
Пока что мысли перенести кусок кода, в ZS_Dead, чтобы ГГ убивал его.
Если нужно больше данных, могу скинуть.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Откуда вызывается функция mc_testzyklopweak? Полагаю, не работает, потому что функция не вызывается. Скорее всего, это должно делаться из циклического триггера.

b_logentry(Piramide, "В этой странной местности, похожей на лабиринт в пирамиде, я нашел Циклопа. Он напал на меня, после битвы пропал с ужасным хохотом. Надо бы найти выход отсюда.");
Неправильная запись в дневнике. Она не учитывает варианта, при котором ГГ не станет биться с противником, а просто убежит. Но в дневнике будет описан уже результат боя, как будто бы он состоялся. Кроме того, в дневник можно заглянуть и во время боя. ;)

P. S. Если бы мне нужно было бы сделать что-то подобное, то я создал бы для циклопа альтернативное состояние атаки, где в каждом цикле контролировался бы уровень его здоровья, и атака завершалась бы при его снижении ниже указанного значения.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.847
Благодарности
5.275
Баллы
910
Откуда вызывается функция mc_testzyklopweak? Полагаю, не работает, потому что функция не вызывается. Скорее всего, это должно делаться из циклического триггера.
Посмотрел в этом мире Pyramid.zen, там есть этот циклический триггер.
1550384546430.png
В проекте вызова этой функции нигде нет.
В Gothic.src файл, где находится эта функция, почему-то был размещен ниже startup.d, переместил выше.
Теперь скрипт срабатывает, но еще до приближения ГГ к нему
А на счет атаки. Я так думаю, что в моде предполагали драку с ним, ибо не победив его, гг не выберется из пирамиды.
К сожалению мир грузится с ошибкой, исправлять, что-то там такое
1550384702787.png
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Теперь скрипт срабатывает, но еще до приближения ГГ к нему
Циклический триггер запускается при загрузке локации и постоянно вызывает функцию mc_testzyklopweak. В свойствах триггера почему-то не задан интервал задержки, определяющий частоту вызова скриптовой функции.

К сожалению мир грузится с ошибкой
Случаем, не меш локации требует? Я не играю в моды, но, кажется, видел прохождение этого мода. И, кажется, там используется меш тестового полигона, который входит в состав мод-кита.
 
Сверху Снизу