Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Ну вообще реген мне нужен как талант для героя. Имеющийся реген не устраивает скоростью (требуется где-то 3-5 маны в сек). Я так поискал по форуму и отрыл следующую функцию 'func void GLOBAL_CYCLE()', но она использовалась в зелье. Возможно с ней я могу сделать нужный мне реген?
регеном рулит метод 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] ++;
}
ток если тебе это тяжело, то не советую использовать никакие расширители в принципе. сначала подтяни скил на чем есть, а дальше уже можно брать планку выше..
регеном рулит метод 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] ++;
}
ток если тебе это тяжело, то не советую использовать никакие расширители в принципе. сначала подтяни скил на чем есть, а дальше уже можно брать планку выше..
Не сказал бы что это так тяжело, просто еще в аст не погружался особенно и из своей джавы перелезать в си не просто. Еще вопрос: как можно поглядеть на код движка?
IDA например может интерпретировать асм мусор в вполне себе понятный код.. *для опытного юзера*..
из примера ниже ясно, что первая половина отвечает за реген хп и маны, а нижняя, что забано, отвечает за горение npc
Подскажите, почему в первой Готике с Икарусом, подобное не срабатывает? Подскажите пожалуйста, как в первой Готике проверить, нажата ли левая кнопка мыши?
Проверка нажатий клавиш в G1 и G2 работает одинаково. Только нужно использовать разные файлы самого Икаруса, конкретно здесь нужен Ikarus_Const_G1.d, а не Ikarus_Const_G2.d. Либо где-то не там сами проверки стоят. Если в цикл-триггере - он точно запущен? Икарус сам инициализирован?
В приведенном коде первое условие должно работать постоянно, пока ЛКМ нажата, а второе - только один раз после нажатия.
Проверка нажатий клавиш в G1 и G2 работает одинаково. Только нужно использовать разные файлы самого Икаруса, конкретно здесь нужен Ikarus_Const_G1.d, а не Ikarus_Const_G2.d. Либо где-то не там сами проверки стоят. Если в цикл-триггере - он точно запущен? Икарус сам инициализирован?
В приведенном коде первое условие должно работать постоянно, пока ЛКМ нажата, а второе - только один раз после нажатия.
Хм, похоже в G1 с ее управлением мышка действительно как-то иначе обрабатывается... Пока никаких идей как именно. Может кто-то, кто в исходкиках копался, подскажет.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.