Форум HeroesWorld-а - Показать сообщение отдельно - Попытка добавления новых spell и skill
Показать сообщение отдельно
#2
Старый 08.11.2020, 12:00
  #2
^
psatkha
 
Аватар для psatkha
📖
Регистрация: 15.03.2007
Адрес: Баталпашинск
Сообщения: 2803
Отправить сообщение для  psatkha с помощью ICQ Psatkha
Регистрация: 15.03.2007
Адрес: Баталпашинск
Сообщения: 2803
Отправить сообщение для  psatkha с помощью ICQ Psatkha
Стрелка
Re: NCF - Расширенный список Нейтральных существ

vasik
Давай немножко разберемся детальнее, мне не совсем понятно.
Вот у меня есть стандартный NCF.exe 3.1 версия игры,  файл 12 783 kb  - 13089792 байт, мной не изменялся после скачивания. Никаких Quantomas'ов и прочих ничего нету.


Иными словами, в моей екзешке ты упоминаешь байты с порядковыми номерами 0044bf40, 00446cb0, 00988с10
Всего в файле 15292 вхождений бита-221

Ок, давай пороемся вот по такому образцу. 


DD 00 00 00 8D 44 24 24  50 8D 4C 24 1C 51 68 FC to 
DE 00 00 00 8D 44 24 24  50 8D 4C 24 1C 51 68 FC

Если все это кинуть в массив чисел для поиска в файле, это
[221, 0, 0, 0, 141, 68, 36, 36, 80, 141, 76, 36, 28, 81, 104, 252]
В моем ncf экзешнике такой комбинации нету (от слова вообще)
Проверил я 0044bf40 +16 у меня она вот такая:

[221, 0, 0, 0, 141, 68, 36, 36, 80, 141, 76, 36, 28, 81, 104, 220]

где есть отличие в последнем байте (DC).

B8 DD 00 00 00 C3 CC CC  CC CC CC CC CC CC CC CC to
B8 DE 00 00 00 C3 CC CC  CC CC CC CC CC CC CC CC

Идем дальше. Выше комбинация
[184, 221, 0, 0, 0, 195, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204]
Она есть только по байту с номером 4484272 или 0x446cb0 , в общем как ты и написал.

28 E8 5A AC FF FF 8D 4C  24 24 51 8B 4E 04 68 DD to 
28 E8 5A AC FF FF 8D 4C  24 24 51 8B 4E 04 68 DE

Выше комбинация 
[40, 232, 90, 172, 255, 255, 141, 76, 36, 36, 81, 139, 78, 4, 104, 221]
Ее у меня тоже нету. По адресу 00988c10 +16 она у меня такая:
[40, 232, 138, 172, 255, 255, 141, 76, 36, 36, 81, 139, 78, 4, 104, 221]

отличается третьим байтом (8а)

В итоге, получается, комбинация, указанная на сайте, может быть неверная. Но, судя по всему, если я поменяю указанные байты под номерами 0044bf40 , 00446cb1, 00988с1f
(нормальной 10 системой это 4505408, 4484273 и 9997343) с b'\xdd' на b'\xff' 
+ изменю xml-ки, то по идее лимит навыков будет повышен к 255. (как указано выше, навыки пустышки без логики)

Но благодаря твоей инфе для этого изменения не надо никаких специальных тулов и Квантомасов, с этим разобрался.

Ну а как обойти 255?

Начнём с того, что с битами тут никто ничего не делал, а все манипуляции проводились исключительно с байтами (бит это минимальная единица измерения информации в двоичной системе счисления способная примать одно из двух допустимых значений - 0 или 1, составная часть байта ... в байте восемь бит)!

То что было приведено тобой в ссылочке абсолютно верно, но верность справедлива исключительно для версии Quantomas и глупо искать полную сигнатуру состоящую из 16 байт в других версиях!

Все эти байты нужно воспринимать не как просто набор байт, а как код в машинных кодах, вот например вот эта сигнатура:

B8 DD 00 00 00 C3 CC CC  CC CC CC CC CC CC CC CC to
B8 DE 00 00 00 C3 CC CC  CC CC CC CC CC CC CC CC

B8 DD 00 00 00 C3 - все последующие cc - это уже не код

это в переводе на ассемблер будет:

mov eax, 000000DDh - помещает в регистр процессора EAX значение 221 (десятичное)
retn - возвращается в вызывающую процедуру

DD 00 00 00 8D 44 24 24  50 8D 4C 24 1C 51 68 FC to 
DE 00 00 00 8D 44 24 24  50 8D 4C 24 1C 51 68 FC

тут за кадром перед DD находится код 68

68 DD 00 00 00
8D 44 24 24
5D

push 000000DDh - размещает значение 221 (десятичное) в стеке, т.е. помещает значение в ячейку памяти, на которую указывает регистр ESP
lea eax,[esp+24h] - загружает в EAX адрес значения, лежащего по адресу ESP + 24h (36 десятчиное)
push eax - выделяет место наверху стека и помещает туда значение из регистра EAX

и т.д.

28 E8 5A AC FF FF 8D 4C  24 24 51 8B 4E 04 68 DD to 
28 E8 5A AC FF FF 8D 4C  24 24 51 8B 4E 04 68 DE

Тут нужный нам код расположен с кода 68 DD за кадром три байта - 00 00 00

push 000000DDh - размещает значение 221 (десятичное) в стеке, т.е. помещает значение в ячейку памяти, на которую указывает регистр ESP

---

Обойти 255 можно, просто нужно внести не 000000FFh, а побольше ... ну скажем 1000 - 000003E8h

Но сперва нужно узнать получилось ли у уважаемого товарища Gerter'а добавить новый функционал в 222-ой скилл!
__________________
С уважением, Psatkha (Псатха)



---------------------------------------------



Неудачное планирование ведёт к неудаче ...


NCF - мод, добавляющий дополнительных существ в HeroesV 3.1
С уважением, Psatkha (Псатха)



---------------------------------------------



Неудачное планирование ведёт к неудаче ...


NCF - мод, добавляющий дополнительных существ в HeroesV 3.1
psatkha вне форума
Ответить с цитированием