Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Здравствуйте. Хотелось бы собрать полный комплект информации по довнгрейду Gf-il. PTS
Что известно:
- Рендж выстрела из лука Gf-дальше, il-ближе.
- Gf быстрый хп реген у мобов. il-медленный.
- Battle roar совместно с blessed body есть проблема когда батлроар не хилит, если висит белс бади.
- Trait system - il(предсказуемый урон магии). Gf разброс дмага при маг атаках.
- Скрипты: Зависимость от ярлыков прописанных в сервере. Нельзя изменить базовые названия скилов, и айтемов. Можно только добавить новые, удалить стараые нельзя без хуков?
- ai nasc совершенно другая логика и все та же зависимость от названий скилов и айтемов.
Пожалуйста дополните тему своими знаниями... Есть ли различия в крит атаке, шансе или силе крита?
Есть ли различия в атаках с вампиризмом? Любые другие критически важные различия...
Скрипты: Зависимость от ярлыков прописанных в сервере. Нельзя изменить базовые названия скилов, и айтемов. Можно только добавить новые, удалить стараые нельзя без хуков?
шта?
понятно что в большинстве мест ссылки на предметы/нпс/скиллы идут по их символическим именам, но почему это мешает их менять? понятно что придется и все их упоминания в других местах поправлять, но это и логично.
но не спорю что есть конечно некоторый хардкод в самих экзешниках на тему "если это предмет/умение с таким-то ид, то делаем это ..." - от него полноценно не избавились даже в свежих серверах. помнится в экзешнике хомки тоже натыкался на подобные поверки.
шта?
понятно что в большинстве мест ссылки на предметы/нпс/скиллы идут по их символическим именам, но почему это мешает их менять? понятно что придется и все их упоминания в других местах поправлять, но это и логично.
но не спорю что есть конечно некоторый хардкод в самих экзешниках на тему "если это предмет/умение с таким-то ид, то делаем это ..." - от него полноценно не избавились даже в свежих серверах. помнится в экзешнике хомки тоже натыкался на подобные поверки.
Вероятно я мог недосмотреть этот момент, и нужно было удалить по всюду, включая nasc, npc data, skill data, skill patch, skill patch2, где еще areadata? есть неочевидные места, в которых сервер будет выдавть ругань, а ты ищи свищи где оно там застряло)
Как например точечно отловить корень ошибки в логах?
для наглядности имеются данные в skilldata:
effect={{p_max_hp;{all};15;per;1};{i_hp_per_max;15}}
сервер не выдает никаких ошибок.
мне захотелось, методом тыка, добавить одну цифру в конце эффекта:
effect={{p_max_hp;{all};10;per;1};{i_hp_per_max;10;1}} и знаете что произошло с сервером?
он сошел с ума и обвинил все все скилы поголовно выдав 230690 тысяч строк с дублирующимися ошибками, не имеющими никакого отношения к этому булиан значению которое я попытался присвоить в конце эффекта в скиллдате.) а корень проблемы всего лишь в одной лишней цифре.
Ну где-то в начале лавины этих сообщений будет к примеру стэктрейс с указанием какой эффект не удалось нормально разобрать. Правда не факт что с конкретизацией в кком конкретно скилле.
А вобще с валидацией данных в парсерах в птс вобще беда та еще - они спокойно переваривают к примеру не существующие данные наподобие задания в эффекте нпс, которого даже нет в npcdata и т.п.
Ну где-то в начале лавины этих сообщений будет к примеру стэктрейс с указанием какой эффект не удалось нормально разобрать. Правда не факт что с конкретизацией в кком конкретно скилле.
А вобще с валидацией данных в парсерах в птс вобще беда та еще - они спокойно переваривают к примеру не существующие данные наподобие задания в эффекте нпс, которого даже нет в npcdata и т.п.
спасибо, действительно первое важное сообщение в начале лавины указывает line:
Parsing SkillData file failed after line[1479] хотябы уже есть номер строки в которую нужно смотреть.
Первая огромная трабла при довнгрейде возникает в skilldata с effect. Нельзя просто так воткнуть копипастом эффект из с4 например, или из Gfil Advext у них там свой кастом вписан. из Интера тоже нельзя. Gf это чисто Gf и хоть кол на голове верти у них свой отдельный синтаксис с поломанной механикой всего.
Скорее всего без хуков точно не обойтись. У Vanganth есть превосходный HookManager, Emca чуть по другому методу но тоже сильно шарит в реверсе. Осталось совсем чуть чуть, разобраться в том как отлавливать адреса которые не будут съезжать после рестарта от ASLR, понять что такое виртуал протекшан, сколько именно байт менять и каких именно, когда джампить а когда и врайтить) WriteBYTE, WriteDWORD, WriteQWORD, WriteDOUBLE, понять как работает исходный код, понять как работает процессор. И все. готово.
Скорее всего без хуков точно не обойтись. У Vanganth есть превосходный HookManager, Emca чуть по другому методу но тоже сильно шарит в реверсе. Осталось совсем чуть чуть, разобраться в том как отлавливать адреса которые не будут съезжать после рестарта от ASLR, понять что такое виртуал протекшан, сколько именно байт менять и каких именно, когда джампить а когда и врайтить) WriteBYTE, WriteDWORD, WriteQWORD, WriteDOUBLE, понять как работает исходный код, понять как работает процессор. И все. готово.
От мейна 162 протокола, лежит в в теме classic 3.0 адаптировать структуры классов под гф труда не составит. Потом перенести структуры к себе в екст и работать по человечески с норм экстом
PDB (Program Database) файла. PDB-файл - это файл отладочной информации, который создается компиляторами Microsoft Visual C++ (и некоторыми другими) в процессе сборки программ.
Есть большая база под Gf спасибо Osie. Он кстати начал довнгрейд еще давно, но потом перешел на Perfect World. Вот его репа там же и PDB :
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
PDB (Program Database) файла. PDB-файл - это файл отладочной информации, который создается компиляторами Microsoft Visual C++ (и некоторыми другими) в процессе сборки программ.
Есть большая база под Gf спасибо Osie. Он кстати начал довнгрейд еще давно, но потом перешел на Perfect World. Вот его репа там же и PDB :
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
Ну как основу можно взять экст от осие гф, навалить туда разобранных структур, стянутых из 162 и подведенных побайтово под гф, и получится в полне себе хорошая база для работы по даунгрейду до ит
ничесиииии ии мне написал уже штук 8 парсеров) и вот что он думает по поводу була в конце эффекта:
Спасибо за теплые слова, я рад, что могу быть полезным!
Давайте разберем данные из `skilldata.txt` и сделаем предположение о методе хука.
* **`skill_begin` и `skill_end`**: Очевидно, что это маркеры начала и конца описания скилла.
* **`skill_name=[s_battle_roar1]`**: Название скилла.
* **`skill_id=121`**: Идентификатор скилла.
* **`effect={{p_max_hp;{all};10;per;1};{i_hp_per_max;10;1}}`**: Это самое интересное. Похоже на описание эффектов скилла. Здесь два эффекта:
* `{p_max_hp;{all};10;per;1}`: Вероятно, повышение максимального HP на 10%, действие на всех (возможно на себя, ввиду `target_type=self`).
* `{i_hp_per_max;10;1}`: Судя по `i_`, это *мгновенный эффект*, возможно, восстановления HP в процентах от максимального.
* **`1` в конце**: Это, как вы правильно заметили, Boolean. Вероятно, это флаг, указывающий, что при применении этого эффекта нужно вызвать *хук функцию*.
* **`target_type=self`**: Указывает, что скилл накладывается на себя.
* **`operate_type=A2`**: Это, скорее всего, тип операции скилла.
* **Прочие параметры:** описывают детали скилла, такие как время каста, отката, расход маны, дальность и прочее.
**Предположение о методе хука:**
Исходя из этих данных и наличия в конце `1`, что, вероятно, является булевым флагом, можно предположить, что **используется табличный метод хука с инъекцией кода**.
Вот как это может работать:
1. **Структура данных:** В ядре движка (сервере) существует таблица, в которой хранятся данные о скиллах. Эта таблица, вероятно, имеет структуру, где одна из колонок содержит список эффектов, которые нужно применить для конкретного скилла, как мы видим из `skilldata.txt`.
2. **Обработчик эффектов:** При выполнении скилла вызывается некий обработчик эффектов, который перебирает эффекты из таблицы скиллов, и на их основе вносит изменения.
3. **Хук-флаг:** В этой структуре данных присутствует специальное поле, которое соответствует значению *1* из `skilldata.txt`. Это булевское значение и указывает на необходимость вызвать хук-функцию.
4. **Инъекция кода и таблица хуков:** Где-то в движке есть таблица или другое хранилище адресов *кастомных функций-хуков*. Когда обработчик эффектов встречает значение `1` у эффекта в скиле, он понимает, что нужно вызвать такую функцию из этой таблицы. В этом месте происходит переход управления на написанную разработчиком кастомную функцию, чтобы изменить стандартное поведение.
5. **Логика хук-функции:** Хук-функция, в свою очередь, реализует кастомную логику изменения эффекта скилла (например, как именно будет реализовано восстановление HP), затем управление возвращается в оригинальный обработчик эффектов.
**Почему это табличный хук с инъекцией кода:**
* **Табличный:** Потому что обработчик эффектов обращается к некоторой структуре данных (таблице) для определения, какие эффекты применять и какие хук-функции вызывать.
* **Инъекция кода:** Использование кастомных функций подразумевает, что разработчик внедрил свой код в память процесса и создал таблицу вызовов этих функций.
**Альтернативные предположения:**
* **Inline Hook:** Также возможен вариант, что *1* это не флаг, а ID эффекта и для этого эффекта (i\_hp\_per\_max) есть отдельный обработчик с inline hook, и, в зависимости от этого ID, вызывается нужный хук. Однако, судя по тому что мы видим, такая конструкция менее вероятна, но ее тоже стоит учитывать.
* **Ветвление в коде:** Возможно, в обработчике эффектов есть ветвление, основанное на каком-то ID эффекта, которое вызывает кастомную логику, то есть без инъекции кода, а на уровне обычного if/else. Но это менее вероятно, т.к. такое решение не подходит для будущих модификаций.
**Заключение:**
Исходя из анализа данных и наличия хук-флага, самым вероятным методом для реализации этой кастомной фичи является **табличный метод хука с инъекцией кода**.
Такой метод позволяет гибко модифицировать эффекты скилов, добавляя кастомную логику через хук-функции, адреса которых хранятся в отдельной таблице.
Вы сначала разберите необходимые классы, такие как csharedcreaturedata, ccreature, user, csocket, cusersocket, cskillinfo и многие другие, потом разберете эффекты скиллов нужных и перепишите как вам надо перехватом.
Вы сначала разберите необходимые классы, такие как csharedcreaturedata, ccreature, user, csocket, cusersocket, cskillinfo и многие другие, потом разберете эффекты скиллов нужных и перепишите как вам надо перехватом.
Если вы хотите добавить или удалить какой то из параметров в эффекте скилла, то конечно же. Серверу же надо брать информацию из тхт файла о новом или удаленном параметре и дальше уже в своей длл обрабатывать это
0x0081F198 void CSkillInfo::ActivateSkillEffects(class CCreature*, class CObject*, enum CSkillInfo::EffectActivateTiming,class CSkillAction2*, double)
выбрал эту точку входа для изучения того, как работает Battle_roar и нахождения нужного VMT адреса...
Не подскажите как осуществить логирование в файл, каждого шага f7 с помощью x64dbg?
пробовал стандартным логером, и скриптом, не вышло, там много настроек...
логика работы effect = {{p_max_hp;{all};10;per;1}} сильно пострадала в GF.
Вместо ожидаемого увеличения максимального значения хп на 10% происходит попытка изменения максимального значения хп, возврат на исходное значение без изменений, затем еще и отхил впендюрили. Не понимаю кому это было нужно, ведь все хорошо работало(
ура, накрутил решение:
effect = {{p_max_hp;{all};10;per};{i_hp_per_max;10}}
с таким синтаксисом ничего не мешает использовать батл роар даже когда висит блес зе бади.
проблема была в непонятном буле в конце {{p_max_hp;{all};10;per;1}}.
I'm not aware of any, but you can use //skill_master on, it removes skill cooldown, mp consumption, operate conditions and maybe some other restrictions such as item consumption. Makes testing easier.
На данном сайте используются файлы cookie, чтобы персонализировать содержимое и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.