hippocamus
07 Jul 2008, 18:24
А ерм здесь не поможет. Может ты можешь выделить эти свойства в формат опыта существ? И добавить в ерм-команду.
Зависимость от опыта не хочу ставить. Регенерацию и контратаку организовать не сложно с помощью ЕРМ (уже делал), а вот с облаком смерти точно не поможет. Плюс еще кое-какие абилки добавить.
2sergroj
А где находится конец секции кода? Самый простой вариант - открыл h3wog, перешел в самый конец, изменил, загрузил, - сразу вылет в бою при выстреле (что-то типа не может записать в недопустимую область памяти).
hippocamus
08 Jul 2008, 15:45
Цитата(major @ 07 Jul 2008, 19:44)
Зависимость от опыта не хочу ставить.
Можно поставить линию опыта, которая с самого начала имеет 100%
Я это говорю для того, чтобы подобные линии можно было давать и другим существам. Регенерация и ответки действительно есть, а вот облако... Неплохо бы сделать. И давать на высшем уровне каким-нибудь Злобоглазам..
FakerNeo
08 Jul 2008, 16:40
Цитата(major @ 07 Jul 2008, 19:44)
изменил, загрузил, - сразу вылет в бою при выстреле (что-то типа не может записать в недопустимую область памяти).
Видать так изменил...
Цитата(FakerNeo @ 08 Jul 2008, 20:40)
Видать так изменил...
Вот оригинальный код
Код
002FF990 83F8 40 CMP EAX,40
002FF993 74 12 JE SHORT 002FF9A7
002FF995 83F8 41 CMP EAX,41
002FF998 74 0D JE SHORT 002FF9A7
002FF99A 3D C4000000 CMP EAX,0C4
002FF99F 74 06 JE SHORT 002FF9A7
002FF9A1 B8 00000000 MOV EAX,0
002FF9A6 C3 RETN
Вот так работает (но появляется баг с подземельем)
Код
002FF990 E9 13AD0100 JMP 0031A6A8
002FF995 83F8 41 CMP EAX,41
002FF998 74 0D JE SHORT 002FF9A7
002FF99A 3D C4000000 CMP EAX,0C4
002FF99F 74 06 JE SHORT 002FF9A7
002FF9A1 B8 00000000 MOV EAX,0
002FF9A6 C3 RETN
002FF9A7 B8 41000000 MOV EAX,41
002FF9AC C3 RETN
...
0031A6A8 83F8 08 CMP EAX,8
0031A6AB ^0F84 F652FEFF JE 002FF9A7
0031A6B1 83F8 09 CMP EAX,9
0031A6B4 ^0F84 ED52FEFF JE 002FF9A7
0031A6BA 3D A9000000 CMP EAX,0A9
0031A6BF ^0F84 E252FEFF JE 002FF9A7
0031A6C5 83F8 40 CMP EAX,40
0031A6C8 ^0F84 D952FEFF JE 002FF9A7
0031A6CE ^E9 C252FEFF JMP 002FF995
А вот гарантирован вылет
Код
002FF990 E9 DB850400 JMP 00347F70
002FF995 83F8 41 CMP EAX,41
002FF998 74 0D JE SHORT 002FF9A7
002FF99A 3D C4000000 CMP EAX,0C4
002FF99F 74 06 JE SHORT 002FF9A7
002FF9A1 B8 00000000 MOV EAX,0
002FF9A6 C3 RETN
...
00347F70 83F8 08 CMP EAX,8
00347F73 ^0F84 2E7AFBFF JE 002FF9A7
00347F79 83F8 09 CMP EAX,9
00347F7C ^0F84 257AFBFF JE 002FF9A7
00347F82 83F8 40 CMP EAX,40
00347F85 ^0F84 1C7AFBFF JE 002FF9A7
00347F8B ^E9 057AFBFF JMP 002FF995
с сообщением вот такого содержания
Код
EIP = 0x007ACF70, Access Violation. Attempt to [B]read[/B] the inaccessible data at 0x00000092
FakerNeo
09 Jul 2008, 18:11
Ну тут нет никаких загадок. 0x007ACF70 - это твой джамп JMP 00347F70 на вроде как прописанный код. Но игра данный адрес использует для своих целей и заносит туда данные. На моей машине там dd 32 , а это равнозначно команде
007ACF70 3200 XOR AL,BYTE PTR [EAX]
где в eax у тебя хранится номер монстра стреляющего. В твоем случае - это 92, т.е. балиста. естественно обращение по этому адресу запрещено.
Короче игра затирает твой код...
FakerNeo
09 Jul 2008, 18:33
Похожий случай и с подземельем
CrackedMind
10 Jul 2008, 10:55
уж лучше добавить еще одну секцию кода, и джамп делать ту да
sergroj
12 Jul 2008, 13:47
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.
Цитата(sergroj @ 12 Jul 2008, 17:47)
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.
А можно делать jump в эту часть кода? Попробовал, все равно вылетает с той же ошибкой. Куда можно джампнуть? Мне и 500 байт хватило бы.
sergroj
23 Jul 2008, 14:18
дело не в том, куда, а в том, откуда
Ниче не помогает.
Цитата(sergroj @ 12 Jul 2008, 17:47)
Секция .idata начинается по адресу 63A000, секция кода заканчивается на 639BF2. 1038 байта свободны. Так что в 639BF2 без проблем можно писать код загрузки dll.
А что насчет диапазона 77F366 (31A366) - 780000 (31B000). Мне кажется там структура так же идет, т.е. код заканчивается на 77F366, а с 780000 идут данные. Или это мне только кажется?
sergroj
27 Jul 2008, 00:54
Да, скорее всего, верно. (лень проверять) Только это место находится в ВоГовской части .exe'шника и в других версиях оно по другим адресам.

Подземелья работают!
Почему-то оказалось, что вместо
Код
000CDBA4 83F9 67 CMP ECX,67
у меня написано
Код
000CDBA4 83F9 66 CMP ECX,66
Отсюда и баг.
Все равно всем спасибо за помощь!
hippocamus
28 Jul 2008, 09:47
А что это? Можно также третий уровень добавить?
Вряд ли, просто так не работают туннели, которые связывают верхний мир с подземкой.
Может кто-нибудь знает, где в коде находятся проверки на тип существа при выкачивании 2 очков маны (привидения), атаку смертельным взглядом и кастование различных заклинаний, а еще на проверку иммунитета к заклам (троглодиты, элементалы). Очень, очень нужно. Никак не могу найти.
hippocamus
31 Jul 2008, 08:48
Ну и пусть туннели не работают. Сделать их порталами.
Я выкладывал где-то карту с 4 уровнями.
Добавлено ([mergetime]1217483315[/mergetime]):
Но при загрузке возникает ошибка.
Могу перевыложить.
FakerNeo
31 Jul 2008, 15:48
Цитата(major @ 31 Jul 2008, 08:03)
Может кто-нибудь знает, где в коде находятся проверки на тип существа при выкачивании 2 очков маны (привидения), атаку смертельным взглядом и кастование различных заклинаний, а еще на проверку иммунитета к заклам (троглодиты, элементалы). Очень, очень нужно. Никак не могу найти.
Есть две таблицы, которые отвечают за некоторые св-ва (а может и за все, до конца так и не проверил) св-ва монстров при атаке и при защите. 9 св-в при атаке и 9 при защите.
А не можешь подсказать, где они находятся? Ну или хотя бы намекнуть, как они выглядят...
2hippocamus
Т.е. карта не работает? Третий уровень прикольно, хотя и XL с подземкой за глаза хватает. Можешь выложить.
FakerNeo
31 Jul 2008, 16:16
Домой приду кину адреса...
FakerNeo
31 Jul 2008, 17:35
атака 44065C - таблица для монстров начиная с 16h монстра
защита 4412D8 - начиная с 3Fh монстра.
Но я расширял таблицу на всех монстров
КЛЕВО!!!
Только в 44065C находятся наложения заклинаний на монстров, а в 4412D8 - уникальные способности, как я понял.
По аналогии нашел таблицу, включающую WOG существ.
mem332AD8 - наложение заклов
mem332A4C - способности
FakerNeo
31 Jul 2008, 18:37
Я думал туда и Вог входят
Еще нашел
mem332СС4 - таблица сопротивляемости магии существ начинается с гнома 10h
магические способности существ начинается с Архангела 0Dh почему то по трем адресам 332990, 3328D4 и 332818.
Осталось найти кавалерийский бонус, отсос 2 очков маны, магический канал, смертельный удар, подавление магии, ну и атаку тремя головами.
А кстати, FakerNeo, не подскажешь, как расширить таблицу существ?
hippocamus
01 Aug 2008, 21:21
А снижение стоимости заклов? Ауру сопротивления?
FakerNeo
01 Aug 2008, 21:35
Удар тремя головами - я где-то писал скрипт. Я находил данный флаг в структуре стека на поле боя. На счет таблицы не знаю. Но можно посмотреть какая часть кода выставляет данный флаг. Где скрипт - не помню.
Расширить таблицу существ - элементарно. Прописываешь свою таблицу, например в файле. Убираешь ограничение на кол-во монстров. Т.е. там где вычитается кол-во монстров (например add eax, -10h) ставишь 0.
Потом подгружаешь длл, віделяешь память для файла и копируешь в выделенный диапазон файл. Ну и из длл меняешь указатели существующие на свои (т.е. указатель на выделенную память). Меняешь во всех местах где встречаются старые указатели (в этом тебе артмани поможет, очень удобно искать). Все.
hippocamus
01 Aug 2008, 22:11
Эх, так убери ограничение на количество заклов, почв, уровней карты
FakerNeo
01 Aug 2008, 22:18
Вот люди наивные
hippocamus
01 Aug 2008, 22:26
А что? Уже сделал?

Или слабо?
А как выглядят указатели, ну например, на таблицу 4412D8?
И может посмотришь про церберов с их атакой?
FakerNeo
03 Aug 2008, 09:55
00440914 MOV CL,BYTE PTR [EAX+4412D8]
по адресу 00440916 находится значение 4412D8 (только отображается как D81244)
Т.е. по адресу 00440916 размером dword нужно поставить свой указатель на таблицу.
Возможно указатель не один поэтому в артмани ищешь 4412D8h только в десятиричном виде и она тебе выдаст все места в памяти которые нужно заменить на свои.
Спасибо, очень помог! Вот еще бы помог найти, где находится смертельный удар и аура магического сопротивления...
FakerNeo
04 Aug 2008, 09:51
Цитата(major @ 03 Aug 2008, 12:47)
Спасибо, очень помог! Вот еще бы помог найти, где находится смертельный удар и аура магического сопротивления...
Чего не знаю, того не знаю. Смертельный удар попробуй найти через анимацию, а вот аура - посложнее будет, хотя если очень захотеть
скажите следующие два кода одинаковы или есть принципиальные отличия?
Код
002F2983 837D 08 1A CMP DWORD PTR SS:[EBP+8],1A
002F2987 75 02 JNZ SHORT 002F298B
002F2989 EB 3D JMP SHORT 002F29C8
002F298B 837D 08 1B CMP DWORD PTR SS:[EBP+8],1B
...
002F29C8 B8 01000000 MOV EAX,1
002F29CD 5D POP EBP
002F29CE C3 RETN
Код
002F2983 837D 08 1A CMP DWORD PTR SS:[EBP+8],1A
002F2987 74 3F JE SHORT 002F29C8
002F2989 837D 08 1B CMP DWORD PTR SS:[EBP+8],1B
...
002F29C8 B8 01000000 MOV EAX,1
002F29CD 5D POP EBP
002F29CE C3 RETN
hippocamus
13 Sep 2008, 21:57
Одинаковы.
JNZ и JNE это вообще одно и то же, ну а в 1-м просто перепрыгивается безусловный.
Ну я так и думал...
Почему любое изменение в ТЕ-шном exe ведет к такой ошибке?
Код
EIP = 0x00774678, Access Violation. Attempt to write the inaccessible data at 0x00000001
Это типа защита что ли? Как можно это исправить?
И еще как можно поменять зависимость очередности построек в городе? Ну например, чтоб улучш. Чудища строились при наличии Цитадели? Или улучш. волчий загон не требовал улучш. казарм гоблинов?
hippocamus
14 Sep 2008, 14:20
Да. А ты не знал? Он защищён. Используй экзешник от Феникс-мода. Это тот же ТЕ, но с него Берсеркер снял защиту.
Добавлено ([mergetime]1221391219[/mergetime]):
major, всё это сделано уже, но не распространяется, т.к. приберегается для релизов HotA и Wog3.59

(про очерёдность построек)
хотя, если хочешь - напиши FakerNeo, может он чем-то поможет.
Чёртос-2 (Chortos-2)
28 Sep 2008, 16:07
Убедительная просьба ко всем, кто владеет хоть какой-нибудь информацией, скидывать её в тему «
Инженерный анализ».
hippocamus
16 Oct 2008, 11:06
А что нужно сделать, чтобы добавить в окно найма существ 8-й слот?
Без Портала, в другом городе? Это возможно, или там идёт чистая проверка на город №5 и постройку №19?
Docent Picolan
16 Oct 2008, 17:43
мм.. не знаю зачем он ему, но у меня появилась идея что при желании можно разместить туда того же Хранителя в HotA - будет достаточно удобно, хоть и нанимать его приходится не так часто
Если и можно (вероятнее всего что можно), то:
1. Что делать с порталом вызова у Данжеона
2. Разберется ли с этим AI. Иначе придется прописывать и его действия
как перевести дробное число 2.5 из десятичной системы в шестнадцатеричную?
вроде целая часть и дробная переводится отдельно
http://www.lyceum95.ru/inform/ss_drob.htm
hippocamus
19 Oct 2008, 22:12
Мне 8-й слот именно для того, для чего предложил Доцент. А из Портала можно нанять вручную, не надорвутся

И это будет красивее, т.к. в портале существа часто бывают чужие, а тут все родные.
Хмм! А какая для АИ разница, сколько слотов для покупки будет в диалоговом окне??? А скупку Хранителя можно им дать автоматом.
Tamerlan
20 Oct 2008, 12:56
а зачем ваще ио?и как его ис?
Добавлено ([mergetime]1224496563[/mergetime]):
Цитата
Мне 8-й слот именно для того, для чего предложил Доцент. А из Портала можно нанять вручную, не надорвутся
И это будет красивее, т.к. в портале существа часто бывают чужие, а тут все родные.
Хмм! А какая для АИ разница, сколько слотов для покупки будет в диалоговом окне??? А скупку Хранителя можно им дать автоматом.
80% шанс взять родного
15% другого?
5% содовой?
Цитата(major @ 18 Oct 2008, 23:06)
как перевести дробное число 2.5 из десятичной системы в шестнадцатеричную?
Цитата(Хмм.. @ 18 Oct 2008, 23:40)
вроде целая часть и дробная переводится отдельно
http://www.lyceum95.ru/inform/ss_drob.htmТочнее меня интересует, как это делается в героях.
За 3F800000 принимается единица, а как идет расчет исходя из этого?
sergroj
20 Oct 2008, 23:25
А, дак это в каком-нибудь языке программирования можно посмотреть - присвой single'у это значение и потом приведи указатель на число к указателю на DWORD и выведи число.
Для 2.5 будет 40200000.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.