Часть 1
Основы редактирования
В Данном гайде были использованны:- IDA PRO 6.0 + HEX RAYS Скачать
- Конвертер skillstr от Рони.
- 010 editor
Начнем. Для начала с помощью конвертера Рони сделаем себе удобный файл, содержащий id скилла, название и остальные параметры. Для этого запустим skillstr2tab.exe из консоли с аргументом в виде пути к файлу skillstr
Во сконвертированном файле мы видем цифру и название скилла. Цифра - это его id в gs.
Начнем сразу с момента, когда вы скачали и установили IDA:
запускаете исполняемый файл -> new -> выбираете файл gs -> жмете ok, после чего придется подождать некоторое время, пока IDA будет загружать gs в свои базы.
После чего слева вы увидете названия функций в ядре. Можно воспользоваться поиском, кликнув 1 раз на любое значение и выбрав вверху Searh -> Search. Давайте попробуем, например, отредактировать скилл шамана
Код:
Дух мести: отражение
Вбиваем в поиск по функциям Skill1102Stub и видим примерно следующее1102 Дух мести: отражение

Кликаем на выделенный участок 2 раза и видим примерно следующее

Это нужная нам функция в ассемблере, но нам удобнее будет читать в C/C++ поэтому жмем F5 видим следующий псевдокод

Тут видно, что дамаг считается по формуле
Код:
Сила Духа*0.23*0.1*Уровень скилла
и находим там эти 2 значения (Значение операнда видно при наведении).

Жмем 2 раза на dbl_88F3500 и попадаем сюда

Тут мы видим адрес данной переменной.

В нашем Hex редакторе переходим по вышеописанному адресу, для этого жмем Ctrl+G и вводим 0x и адрес.

Попадаем сюда

Меняем значение, например, на 0.3 сохраняем. Готово.
Часть 2
Основные параметры скилла

Гайд не полный, вскоре будет пополнение
--- добавлено: 31 дек 2012 в 22:42 ---
С новым годом!
Часть 3
Расчет дамага
В этой части гайда я хотел бы рассказать об особенности расчета дамага у некоторых скиллов. Ни для кого не секрет, что у скилла есть свои статы, но они не всегда расчитываются там, где я описывал в прошлых частях гайда. Начнем с момента, когда вы загрузили gs в IDA. Для примера мы рассмотрим скилл
Код:
508 Светлый Армагеддон

Как мы видим, в основной функции вызывается 3 стата
Код:
GNET__Skill508Stub__State1__State1
GNET__Skill508Stub__State2__State2
GNET__Skill508Stub__State3__State3
За расчет дамага у этих статов у нас отвечает функция *::Calculate
Пробуем просмотреть эти функции для всех 3х статов:
Смотрим первую функцию
Код:
GNET::Skill508Stub::State1::Calculate

Хм....В первой функции ничего, пробем вторую
Код:
GNET::Skill508Stub::State2::Calculate

Да, вот наша формула расчета

Код:
4*(ХП/2+ПМ/2)+5000

GetMpcost - требуемая мана
GetExecutetime - призывание или подготовка
GetCoolingtime - перезарядка
GetRequiredLevel - требуемый уровень для изучения скилла
GetRequiredSp - требуемый дух для изучения
GetRequiredMoney - Кол-во юаней
GetRequiredItem - требуемый предмет
GetRadius, getEffectDistance, GetPrayDistance - радиус и расстояние
StateAttack - основной эффект скилла
TakeEffect - основной эффект пассивного скилла
GetTime - время активации
[/spoiler]
GetExecutetime - призывание или подготовка
GetCoolingtime - перезарядка
GetRequiredLevel - требуемый уровень для изучения скилла
GetRequiredSp - требуемый дух для изучения
GetRequiredMoney - Кол-во юаней
GetRequiredItem - требуемый предмет
GetRadius, getEffectDistance, GetPrayDistance - радиус и расстояние
StateAttack - основной эффект скилла
TakeEffect - основной эффект пассивного скилла
GetTime - время активации
[/spoiler]
1 - Атака
2 - Баф
3 - Дебаф
4 - Призыв
5 - Пассивка
6 - Стан (Нокаут)
7 - Полет
8 - Перемещение (телепорт)
9 - Шлифовка[/spoiler]
2 - Баф
3 - Дебаф
4 - Призыв
5 - Пассивка
6 - Стан (Нокаут)
7 - Полет
8 - Перемещение (телепорт)
9 - Шлифовка[/spoiler]