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

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

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

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
не могут принимать значения меньше 1
1 секунда - наименьший интервал между повышениями счётчиков здоровья или маны. Можно поставить 0, но тогда регенерация будет мгновенной.

У драконов есть реген, но я его еще не нашел.
У них регенерация скриптовая. Где-то в состоянии атаки должна быть прописана, вроде бы.

Где находится функция, срабатывающая после съедения определенного количества еды?
Посмотри инстанцию яблока или чёрного гриба. Под инстанцией связанная с ней функция увеличения здоровья. Там счётчик.
 

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
1 секунда - наименьший интервал между повышениями счётчиков здоровья или маны. Можно поставить 0, но тогда регенерация будет мгновенной.


У них регенерация скриптовая. Где-то в состоянии атаки должна быть прописана, вроде бы.


Посмотри инстанцию яблока или чёрного гриба. Под инстанцией связанная с ней функция увеличения здоровья. Там счётчик.
Реген у дракона нашел, но его применить к гг не получится. Есть ли какая-нибудь зацикленная функция для гг?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.337
Благодарности
3.181
Баллы
525
Есть ли какая-нибудь зацикленная функция для гг?
В оригинале нет. Но её можно организовать, добавив специальные объекты в локации игрового мира. Забей в поиск "циклический триггер".
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
тебе реген с какой целью нужен то? чтобы тот распространялся только на хероя или вообще всех? и чем тебя не устраивает текущий??
 

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
тебе реген с какой целью нужен то? чтобы тот распространялся только на хероя или вообще всех? и чем тебя не устраивает текущий??
Ну вообще реген мне нужен как талант для героя. Имеющийся реген не устраивает скоростью (требуется где-то 3-5 маны в сек). Я так поискал по форуму и отрыл следующую функцию 'func void GLOBAL_CYCLE()', но она использовалась в зелье. Возможно с ней я могу сделать нужный мне реген?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
да, разве что.. если это триггер, не представляю как ты будешь контролить частоту цикла..
а, ну и еще тебе везде придется сообразить триггер
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.236
Благодарности
2.575
Баллы
455
да, разве что.. если это триггер, не представляю как ты будешь контролить частоту цикла..
Да запросто, добавить холостые прогоны через счетчик на глобальной переменной.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
Да запросто, добавить холостые прогоны через счетчик на глобальной переменной.
о том и речь, решение сложных задач на открытом инструментарии движка всегда превращается в костыль.
 

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
Как вообще работает реген в ваниле? Можно его как-то править?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
править? движком.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
То есть? В скриптах никак?
регеном рулит метод Regenerate класса oCNpc..
вот примерно так будет выглядеть код на аст если сообразить перехват метода..

условно поставим задачу: реген драконов нас устраивает? тогда повесим условие, что если нпс == дракон, то отрабатывать будет метод движка.. иначе ->

принимаем условность.. параметры NPC_ATR_REGENERATEHP и NPC_ATR_REGENERATEMANA - количество секунд восстановления одного юнита заданного параметра, где -1 будет отвечать за олтсутствие регена в принципе. ну и далее дело техники.
создаем таймер, в него пихаем значение нашей частоты и лимит выполнения функции.


PHP:
// 0x00741FD0 public: void __thiscall oCNpc::Regenerate(void)
CInvoke<zVOID (__thiscall*) (oCNpc*)> pRegenerate (0x00741FD0, &oCNpc::Regenerate); // хук на метод регенерации
zVOID oCNpc::Regenerate()
{
    // если имеем дело с драконом, вызываем оригинальный г2 метод
    if (this->m_nGuild == GIL_DRAGON)
        return pRegenerate(this);

    // для начала определим уникальный id нашего npc на базе указателя
    int npcID = (int)this;

    // далее для нашего объекта с уникальным id читаем скорость регенерации из параметра NPC_ATR_REGENERATEHP
    if (tmGlobalTimer(npcID + 1, m_nAttribute[NPC_ATR_REGENERATEHP]) &&
        m_nAttribute[NPC_ATR_HITPOINTS] < m_nAttribute[NPC_ATR_HITPOINTSMAX])
        m_nAttribute[NPC_ATR_HITPOINTS] ++;

    // тоже самое делаем с маной
    if (tmGlobalTimer(npcID + 2, m_nAttribute[NPC_ATR_REGENERATEMANA]) &&
        m_nAttribute[NPC_ATR_MANA] < m_nAttribute[NPC_ATR_HITPOINTSMAX])
        m_nAttribute[NPC_ATR_MANA] ++;
}

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

Melonslise

Участник форума
Регистрация
19 Окт 2014
Сообщения
179
Благодарности
19
Баллы
175
регеном рулит метод Regenerate класса oCNpc..
вот примерно так будет выглядеть код на аст если сообразить перехват метода..

условно поставим задачу: реген драконов нас устраивает? тогда повесим условие, что если нпс == дракон, то отрабатывать будет метод движка.. иначе ->

принимаем условность.. параметры NPC_ATR_REGENERATEHP и NPC_ATR_REGENERATEMANA - количество секунд восстановления одного юнита заданного параметра, где -1 будет отвечать за олтсутствие регена в принципе. ну и далее дело техники.
создаем таймер, в него пихаем значение нашей частоты и лимит выполнения функции.


PHP:
// 0x00741FD0 public: void __thiscall oCNpc::Regenerate(void)
CInvoke<zVOID (__thiscall*) (oCNpc*)> pRegenerate (0x00741FD0, &oCNpc::Regenerate); // хук на метод регенерации
zVOID oCNpc::Regenerate()
{
    // если имеем дело с драконом, вызываем оригинальный г2 метод
    if (this->m_nGuild == GIL_DRAGON)
        pRegenerate(this);

    // для начала определим уникальный id нашего npc на базе указателя
    int npcID = (int)this;

    // далее для нашего объекта с уникальным id читаем скорость регенерации из параметра NPC_ATR_REGENERATEHP
    if (tmGlobalTimer(npcID + 1, m_nAttribute[NPC_ATR_REGENERATEHP]) &&
        m_nAttribute[NPC_ATR_HITPOINTS] < m_nAttribute[NPC_ATR_HITPOINTSMAX])
        m_nAttribute[NPC_ATR_HITPOINTS] ++;

    // тоже самое делаем с маной
    if (tmGlobalTimer(npcID + 2, m_nAttribute[NPC_ATR_REGENERATEMANA]) &&
        m_nAttribute[NPC_ATR_MANA] < m_nAttribute[NPC_ATR_HITPOINTSMAX])
        m_nAttribute[NPC_ATR_MANA] ++;
}

ток если тебе это тяжело, то не советую использовать никакие расширители в принципе. сначала подтяни скил на чем есть, а дальше уже можно брать планку выше..

Не сказал бы что это так тяжело, просто еще в аст не погружался особенно и из своей джавы перелезать в си не просто. Еще вопрос: как можно поглядеть на код движка?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
IDA например может интерпретировать асм мусор в вполне себе понятный код.. *для опытного юзера*..
из примера ниже ясно, что первая половина отвечает за реген хп и маны, а нижняя, что забано, отвечает за горение npc
Снимок.JPG
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Подскажите, почему в первой Готике с Икарусом, подобное не срабатывает? Подскажите пожалуйста, как в первой Готике проверить, нажата ли левая кнопка мыши?
Код:
if(MEM_KeyPressed(MOUSE_BUTTONLEFT) == 1)
    {
        PrintScreen("ТЕСТ",-1,-1,"font_old_20_white.tga",1);
    };
    if(MEM_KeyState(MOUSE_BUTTONLEFT) == KEY_PRESSED)
    {
        PrintScreen("ТЕСТ",-1,-1,"font_old_20_white.tga",2);
    };
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
Подскажите, почему в первой Готике с Икарусом, подобное не срабатывает?
Проверка нажатий клавиш в G1 и G2 работает одинаково. Только нужно использовать разные файлы самого Икаруса, конкретно здесь нужен Ikarus_Const_G1.d, а не Ikarus_Const_G2.d. Либо где-то не там сами проверки стоят. Если в цикл-триггере - он точно запущен? Икарус сам инициализирован?

В приведенном коде первое условие должно работать постоянно, пока ЛКМ нажата, а второе - только один раз после нажатия.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.663
Баллы
305
Проверка нажатий клавиш в G1 и G2 работает одинаково. Только нужно использовать разные файлы самого Икаруса, конкретно здесь нужен Ikarus_Const_G1.d, а не Ikarus_Const_G2.d. Либо где-то не там сами проверки стоят. Если в цикл-триггере - он точно запущен? Икарус сам инициализирован?

В приведенном коде первое условие должно работать постоянно, пока ЛКМ нажата, а второе - только один раз после нажатия.
У меня Ikarus_Const_G1.d и остальные кнопки работают, игнорируется только мышь.
 

НастасьСанна

Участник форума
Регистрация
6 Дек 2012
Сообщения
351
Благодарности
521
Баллы
325
У меня Ikarus_Const_G1.d и остальные кнопки работают, игнорируется только мышь.
Хм, похоже в G1 с ее управлением мышка действительно как-то иначе обрабатывается... Пока никаких идей как именно. Может кто-то, кто в исходкиках копался, подскажет.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.281
Благодарности
4.581
Баллы
625
идентично они работают. разница только в смещениях.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Как я понял, для того, чтобы вставить свой интро, нужно скомпиллить PRJMenu. Но в скриптовой болванке Г2а его нет. Где его взять?
 
Сверху Снизу