| 
 
				Исходники patcher_x86 (MS VC++ 2008):http://sites.google.com/site/heroes3hd/f...ects=0&d=1 Berserker Wrote:Наконец, если там вдруг ошибка или ошибка в SDK, или нужно глянуть реализацию, потому что мой код не работает, исходников нет. 
Примеры SDK для всех языков билдились и тестировались успешно. 
В самом патчере 1.7 пока ни ХотА ни ХД не нарвались на баг.
 Berserker Wrote:Помимо прочего я не помню (поправьте если не прав), чтобы клиенты патчера могли делать то же самое: получить список всех заплаток, например (а ради чего ещё остальным такая централизация?). Наконец, если там вдруг ошибка или ошибка в SDK, или нужно глянуть реализацию, потому что мой код не работает, исходников нет. 
Список всех заплаток клиент получить не может. Было бы не плохо если б было можно. Еще лучше  была бы функция: получить патчи в указанном диапазоне адресов.  
 
Что сейчас может клиент. Может отменить/применить все патчи, может отменить применить все патчи указанного PatcherInstance (т.е. мода или части мода). Можно получить все патчи по конкретному адресу.  
А еще клиент может сохранить в файл дамп - карту всех наложенных патчей в данный момент времени; и лог, показывающий очередность применения/отменения патчей с деталями и потенциальные конфликты. Разработчик смотрит дамп и лог и, руководствуясь увиденным, делает изменения в коде мода. 
Вот ради возможности посмотреть такие дамп и лог (которые кроме всего прочего показывают какой мод (PatcherInstance) установил определнный патч/хук) и возможности включать отключать патчи установленные из других модов и нужна централизация.
 
Все патчи хранятся в упорядоченном двоичном дереве, каждый лист которого - адрес с динамическим массивом всех наложенных по этому адресу патчей.  Правда в каждом PatcherInstance хранится еще и связанный список всех его патчей. 
Возможно это всё лишние нагромождения, и можно б было обойтись  динамическим массивом вместо дерева, но дерево сделано для скорости доступа к патчу по конкретному  адресу (хотя я, крайне редко использую эту возможность).
  (20.11.2012 06:56)GrayFace Wrote:   (15.11.2012 03:03)baratorch Wrote:  Было бы здорово, если б 3.59 тоже перешел на патчер, ибо никакие узкоспециализированные API и скриптовые языки не смогут решать такие задачи, какие может патчерЯ сейчас использую удобную систему хуков на Луа. По сути, любые задачи с помощью моего модуля хуков/структур/работы с памятью можно решать. Одно исключение - когда нужна скорость, тогда придется грузить dll или байт-код писать строкой. Да, еще ограничение - код должен исполняться в основном потоке. Патчер я глянул только чуть-чуть и, как я понял, есть сходства с моими хуками в высокоуровневости. 
Главная фича хуков патчера - это то, что разные моды независимо друг от друга могут хучить одну и туже функцию или ее конкретный вызов сколько угодно раз, не перекрывая а дополняя её код при желании. 
Ну и описанные выше возможности по управлению чужими патчами/хуками и просмотр дампа и лога - очень важная и полезная вещь.
 
вот пример дампа:
 Quote:instances(7): 'HD', 'HotA', 'spellbook.patch', 'HD.Af', 'HD.TE', 'HD.IG', 'HD.Pack.SuperRus',addresses count: 3460
 patches count: 3637
 
 
 00401448: count = 1	[Patch , size: 04, owner: HD]
 0040144F: count = 1	[Patch , size: 04, owner: HD]
 00401510: count = 2	[HiHook, size: 05, owner: HD]	[HiHook, size: 05, owner: HD.Af]
 00402480: count = 1	[Patch , size: 04, owner: HotA]
 00402E70: count = 1	[HiHook, size: 05, owner: HD]
 00402F00: count = 1	[Patch , size: 04, owner: HD]
 00402F49: count = 1	[Patch , size: 04, owner: HD]
 ...
 
и лога: Quote:log records count: 3769
 Patch 	00599B31/06 ->Apply       (HD), z-order = 0
 ...
 HiHook	00479853/05 ->Apply       (HotA), z-order = 0
 HiHook	0047999B/05 ->Apply       (HotA), z-order = 0
 
 WARNING! 00493E31: Applying Patch  (size: 32, owner: HotA), which overwrites a part of already applied HiHook (size: 5, owner: HD) at 00493E4C! Older one becomes FIXED!
 
 Patch 	00493E31/32 ->Apply       (HotA), z-order = 0
 ...
				
(This post was last modified: 21.11.2012 08:05 by baratorch.)
 |