Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Мод на ХотА
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
DedMorozzz
Добрый день, мы частенько на хотсите играем в герои 3.
Последний примерно год в ХОТА. Играем только шаблон джебусс кросс... и нас не устраивает несколько моментов в игре которые хотелось бы для себя исправить:

Что получилось:
- уже убрал орлиный глаз навык. Шанс выпадения = 0 для всех классов.
- уменьшил стоимость покупки дьяволов
- уменьшил цену здания улучшения титанов
- взрыв сделал магией огня. Увеличил урон от огненого шара/инферно

Что осталось
1. замедление. Оно слишком читерное. Хотелось бы изменить округление с большую сторону. Т.е. скорость 5 -> 3, вместо 5 -> 2 как сейчас
2. сделать более балансные школы магии. Сейчас получается так, что или есть у тебя земля или тебе ничего не светит... Я уже подправил магию огня, усилив заклинания
но хотелось бы сделать чуток большую реализацию. К примеру что бы слабость у магии воды, так же вешало проклятие. Как это сделать?
3. где изменить бонус специализации с 5% за левел на 2% для логистики/защиты/атаки. На джебусе это чит. Или логист или проиграл...
4. где изменить требуемые постройки для зданий. Т.е. хочу упростить постройку дьяволов и усложнить ангелов
5. где сменить цифры навыков. Т.е. я хочу сделать защиту от магии не 5-10-15, а 10-20-30 (покачто изменить получилось только описание, а не фактическое значение)
6. ифриты что бы не игнорили сферу и не били щитом чёрных/золотных драконов. Или юнитов под иммуном к магии
7. Если играть джебус с подземельем, то зачастую трежи огромные. Потому ираем в основном без... можно ли как-то ограничить размер зоны с ништяками (Утопии, топ арты и прочее...). что бы она была размером с 1/5 от карты, не больше?

Если удастся решить хоть 1 момент - будет уже здорово smile.gif

Интересует именно файлы ХотА, т.к. новые постройки/замок очень здорово вписались в игру
Спасибо!
MasterOfPuppets
Цитата(DedMorozzz @ 18 Nov 2016, 17:04) *
3. где изменить бонус специализации с 5% за левел на 2% для логистики

Ну скажем вот (вряд ли в ХотЕ иначе):

004E4F1C D80D E4EA6300 FMUL DWORD PTR DS:[63EAE4]

В [63EAE4] находится 0.05 (естественно, в виде float). Но число по этому адресу менять нельзя, так как оно используется ещё во многих участках кода. Надо перенаправить на другой адрес. Можно использовать какую-нибудь пустоту в коде Героев, допустим:

44FBD1 0AD7A33C; 0.02
4E4F1C D80DD1FB4400; FMUL DWORD PTR DS:[44FBD1]

Всё.
Аналогично с Нападением и Обороной.
serovoy
Цитата(DedMorozzz @ 18 Nov 2016, 20:04) *
убрал орлиный глаз навык

А спецы?
tolich
Цитата(MasterOfPuppets @ 18 Nov 2016, 17:55) *
Можно использовать какую-нибудь пустоту в коде Героев.
Или поискать готовое .2f среди констант.
DedMorozzz
Цитата(tolich @ 18 Nov 2016, 21:08) *
Или поискать готовое .2f среди констант.

А это где?

Цитата(serovoy)
А спецы?

Их не менял. Убирал шанс выпадения только. Не ставлю задачу "убрать упоминание навыка из игры" smile.gif
DedMorozzz
Цитата(MasterOfPuppets @ 18 Nov 2016, 16:55) *
Ну скажем вот (вряд ли в ХотЕ иначе):

004E4F1C D80D E4EA6300 FMUL DWORD PTR DS:[63EAE4]

В [63EAE4] находится 0.05 (естественно, в виде float). Но число по этому адресу менять нельзя, так как оно используется ещё во многих участках кода. Надо перенаправить на другой адрес. Можно использовать какую-нибудь пустоту в коде Героев, допустим:

44FBD1 0AD7A33C; 0.02
4E4F1C D80DD1FB4400; FMUL DWORD PTR DS:[44FBD1]

Всё.
Аналогично с Нападением и Обороной.


https://sc-cdn.scaleengine.net/i/9d9c420fd1...e5d05883f28.png --- вот нашел этот код. А что с ним дальше делать пока не соображу...
Куда его перенести? И как найти другие навыки. Пока что логики поиски данных не уловил вовсе
tolich
Цитата(DedMorozzz @ 18 Nov 2016, 22:15) *
А это где?
Понятия не имею, но это должно быть CD CC 4C 3E. Ой, тебе же .02f нужно. Тогда 0A D7 A3 3C. И Мастер этот код написал, ага.
hippocamus
Код переносить не надо. МОП рекомендует подменить адрес [63EAE4] на другой, по которому будет расположено 0AD7A33C.
А искать нужно с помощью отладчика. Или базы дизассемблера. Можно в ВОГовских сорцах посмотреть, если понимаешь как.
DedMorozzz
я вообще силач... нашел в редакторе то, что сам вставил. Вместо поиска - заменил выделенный кусок

Итого, правильно ли я понимаю, постараюсь более высокоуровнево описать:
имеется код, который говорит как должен с уровнем увеличиваться навык. Значение взять с функции такой-то. И задача заменить ф-ю, которая возвращает нужное число (0.02 вместо 0.05), а не выдачу ф-и?

Но даже тут я не пойму как искать данные. Из соседней темы взял редактор 010 Editor. Искать данные не понял как. Не ищет ничего, какой формат данных не выбирай. Но мне по сути нужен (как я понял) только HEX.

Итого, 4 момента:
1. правильно ли я понял основную идею?
2. как найти нужные данные? (со 2го поста)
3. как понять, как выглядит навык нападения
4. из темы - http://forum.df2.ru/lofiversion/index.php/t24380.html
Там вижу указатели. Но в открываемом exe файле максимальное значение 2B. Т.е. до указателя, к примеру мистицизма (004E41C8) 4E надо в 2 раза больше данных. Ибо по 00 нет данных
Я понимаю что смотрю не туда, но куда надо - не пойму...
XEPOMAHT
Цитата(DedMorozzz @ 19 Nov 2016, 00:32) *
4. из темы - http://forum.df2.ru/lofiversion/index.php/t24380.html
Там вижу указатели. Но в открываемом exe файле максимальное значение 2B. Т.е. до указателя, к примеру мистицизма (004E41C8) 4E надо в 2 раза больше данных. Ибо по 00 нет данных
Я понимаю что смотрю не туда, но куда надо - не пойму...


Там адреса памяти, а ты пытаешься их найти в exe. Для этого нужно пересчитывать адрес, например для мистицизма: 004E41C8 -> 0E41C8 и т.д.
serovoy
Цитата(DedMorozzz @ 19 Nov 2016, 01:15) *
Их не менял.

Какой кошмар! Ну хоть у Аш стартовую зоркость заменили?
DedMorozzz
Цитата(serovoy @ 19 Nov 2016, 16:18) *
Цитата(DedMorozzz @ 19 Nov 2016, 01:15) *
Их не менял.

Какой кошмар! Ну хоть у Аш стартовую зоркость заменили?

Знал бы где.. я тут у мистицизма цифры 1-2-3-4, на любые другие не пойму пока как заменять. Не говоря о замене навыка А, на навык Б

Если кините какой нить ман для чайников - буду признателен!
MasterOfPuppets
Цитата(tolich @ 18 Nov 2016, 22:08) *
Или поискать готовое .2f среди констант.

Проверил. На весь экзешник - лишь по адресу 63AC60h.
DedMorozzz
Цитата(MasterOfPuppets @ 18 Nov 2016, 16:55) *
В [63EAE4] находится 0.05 (естественно, в виде float). Но число по этому адресу менять нельзя, так как оно используется ещё во многих участках кода. Надо перенаправить на другой адрес. Можно использовать какую-нибудь пустоту в коде Героев, допустим:


Мне явно требуется дополнительное пояснение...
Нашел CD CC 4C 3D примерно в 5и местах. Заменив 1е (на 0AD7A33C) я не получил нужного результата. Заменив последнее - получил (Кирь + ангел, на 10м левеле бегает 2720, вместо 2900).
Заменял по "смещению" 0023EAE0. Или именно этого и нельзя было делать?

Так же - каким образом перевести 0.02 в 0AD7A33C? Я так понял, что путаю значение с адресом значения, но как их связать - не понятно
Как мне к примеру получить в 16и ричной системе не 0.02 а 30?
https://gregstoll.dyndns.org/~gregstoll/floattohex/ -- тут получаю 0x41f00000. Но видимо это совсем не то что нужно, потому что из 0AD7A33C я 0.02 не получаю ...

PS: перепроверил, логистика/атака/интеллект стали по 2% за левел. Я так понимаю все спеки стали по 2% считаться. Или ещё что-то мог зацепить?
hippocamus
Цитата(DedMorozzz @ 20 Nov 2016, 20:20) *
PS: перепроверил, логистика/атака/интеллект стали по 2% за левел. Я так понимаю все спеки стали по 2% считаться. Или ещё что-то мог зацепить?
Вот именно.
Тебе же говорят - нельзя просто менять это значение, потому что оно во многих местах используется.
Возьми адрес, по которому лежит 0.2 (63AC60) - и его (адрес, а не 0.2) пропиши в тех местах, где был адрес 63EAE4, указывающий на 0.5, а ты хочешь сделать 0.2.
DedMorozzz
Цитата(hippocamus @ 20 Nov 2016, 20:19) *
Цитата(DedMorozzz @ 20 Nov 2016, 20:20) *
PS: перепроверил, логистика/атака/интеллект стали по 2% за левел. Я так понимаю все спеки стали по 2% считаться. Или ещё что-то мог зацепить?
Вот именно.
Тебе же говорят - нельзя просто менять это значение, потому что оно во многих местах используется.
Возьми адрес, по которому лежит 0.2 (63AC60) - и его (адрес, а не 0.2) пропиши в тех местах, где был адрес 63EAE4, указывающий на 0.5, а ты хочешь сделать 0.2.

Я не знаю как "63EAE4" найти... поиск по HEX не находит(пробовал и 63EAE4 и 63 EA E4). Что в HxD редакторе. Что в 010 Editor.
При этом числа с плавающей запятой находит. Как хексовые значения искать то?
hippocamus
Первую "6" замени на "2" в обоих случаях. Чтобы получить адреса в экзешнике нужно отнять 400000 от адреса в памяти.
feanor
Цитата
потому что из 0AD7A33C я 0.02 не получаю ...

0AD7A33C => 0x3CA3D70A => 0.02 float
hippocamus
feanor, виндовский калькулятор, к сожалению, с float в гексе не работает. Видимо, DedMorozzz говорит об этом - не знает как конвертировать dec <-> hex.
feanor
Человек уже нашел IEEE754-конвертор, только про эндианы не знал.
DedMorozzz
Цитата(hippocamus @ 20 Nov 2016, 20:19) *
Цитата(DedMorozzz @ 20 Nov 2016, 20:20) *
PS: перепроверил, логистика/атака/интеллект стали по 2% за левел. Я так понимаю все спеки стали по 2% считаться. Или ещё что-то мог зацепить?
Вот именно.
Тебе же говорят - нельзя просто менять это значение, потому что оно во многих местах используется.
Возьми адрес, по которому лежит 0.2 (63AC60) - и его (адрес, а не 0.2) пропиши в тех местах, где был адрес 63EAE4, указывающий на 0.5, а ты хочешь сделать 0.2.


Я вроде понял что требуется. Но не до конца
число 0,02 (0A D7 A3 3C) лежит по адресу 0023AC60, в значениях от 00 до 03. Необходимо перенаправить на нулевой байт. Т.е. откуда начинается, т.е. на 0023AC60
Так же надо найти все варианты где вызывается "63EAE4". И методом проб смотреть. Заменилась ли логистика/защита/нападения. Если заменилось - угадал
Но и тут не ясно как мне найти "63EAE4". Не 1 редактор не ищет это. Не 010 Editor, не HxD. Пишет не найдено. Хоть с пробелами, хоть без.. Пробовал и 23EAE4 вместо 63EAE4

Цитата(feanor @ 20 Nov 2016, 21:34) *
Цитата
потому что из 0AD7A33C я 0.02 не получаю ...

0AD7A33C => 0x3CA3D70A => 0.02 float

ага! Вот недостающего звена и не хватало...
К примеру перевёл 0.012. Перевёл в 0x3C449BA6 а каким образом ещё раз перевести. Это ж уже и так 16и ричный.
Отняв 400000 получу 3C049BA6. Так что явно не в этом дело, ибо пример выше так не работает.
Соотв вопрос - как из 0AD7A33C получить 0x3CA3D70A ?
igrik
Цитата(DedMorozzz @ 21 Nov 2016, 23:15) *
Я вроде понял что требуется. Но не до конца
число 0,02 (0A D7 A3 3C) лежит по адресу 0023AC60, в значениях от 00 до 03. Необходимо перенаправить на нулевой байт. Т.е. откуда начинается, т.е. на 0023AC60
Так же надо найти все варианты где вызывается "63EAE4". И методом проб смотреть. Заменилась ли логистика/защита/нападения. Если заменилось - угадал
Но и тут не ясно как мне найти "63EAE4". Не 1 редактор не ищет это. Не 010 Editor, не HxD. Пишет не найдено. Хоть с пробелами, хоть без.. Пробовал и 23EAE4 вместо 63EAE4

Конечно ты не можешь его найти. В Hex системе значения лежат в перевернутом виде. Т.е нужно искать не значение 0063EAE4, а E4EA6300.
Но это слишком черное шаманство. Проще ознакомиться с феаноровской базой IDA и с помощью патчера и dll внести эти изменения.
feanor
Цитата
Но и тут не ясно как мне найти "63EAE4". Не 1 редактор не ищет это. Не 010 Editor, не HxD. Пишет не найдено. Хоть с пробелами, хоть без.. Пробовал и 23EAE4 вместо 63EAE4

Все-таки лучше использовать отладчик, OllyDbg.
Там есть замечательная функция, "Find reference".
Ну и вообще оно нагляднее получается, рантайм-редактирование, нормальные адреса и "copy to executable", если надо.

Ну и да, скорее всего просто искать надо опять же перевернутое значение, E4EA6300
tolich
Не значение, а последовательность байтов.
hippocamus
Но если в экзешнике - то 6 на 2 менять.
feanor
Цитата
Но если в экзешнике - то 6 на 2 менять.
С какой радости-то?
Вы щас тут запутаете человека вконец, демагоги.
DedMorozzz
Фууух, всем спасибо, сделал!
Получилось следующее, что выяснил. 5% для специализации для следующих навыков находятся:
0E20E0 - интеллект
0E4560 - нападение
0E45C0 - защита
0E4F10 - логистика

Написал в какой строке начинается значение.
В этих строках надо искать значение "E4EA6300"

Теперь следующий вопрос... где искать округление замедления? Что бы изменить в меньшую сторону
Или проще момент - где зависимости для построек хранятся?
DedMorozzz
Или же тоже важный момент. Как и где изменить не одно значение, а массив значение. Как к примеру для мистицизма:
Цитата
004E41C8: указатель на массив интов (63E9C8), хранящий значения регена маны по уровням мистицизма (1-2-3-4).

Как массив чисел преобразовывается в хекс?

К примеру, правильно ли посчитал для 0-5-10-15 -> 00050a0f
feanor
там четырехбайтные значения
00000000 05000000 0A000000 0F000000

ой, и на самом деле
01000000 06000000 0B000000 10000000
если ты не хочешь сделать невосполнение маны без мистицизма в принципе
MasterOfPuppets
Не, только первое значение единицей, остальным-то уровням её прибавлять зачем...
DedMorozzz
ага, понял! Ещё раз спасибо smile.gif Дома буду поищу, перепроверю что да как. ну а без навыка, да, нужна еденица

а по постройкам есть идеи где поискать или что погуглить?
Что бы быть более конкретным. Хочу для дьяволов сделать требуемые постройки - ГМ1, ифриты, демоны (не помню, требуют ли ифриты их, если не требуют то ГМ2 на замену...)
Замок - ГМ3 для ангелов. И гм4 для архангелов
Насколько это реально?
DedMorozzz
Не пойму как создать свой массив значений... нашел в редакторе штук 20 рядов с одними нулями
В один из рядов, по адрессу 23E8F0 (63E8F0) записал массив данных. В обычном (пробовал и в перевёрнутом) виде. Писал следующее:
1. 07000000 14000000 1E000000 23000000
2. 00000007 00000014 0000001E 00000023

по адрессу 0E41C8 заменил значение на F0E86300. Восстановление манны стало 0
Причём если менять значения куда сразу смотрит - тогда всё ок. Как всё же убедить смотреть в другое место?
И можно ли нули было заполнять значениями?
igrik
Ты играешь HD модом?
И ты выбрал не правильное место (0x63E8F0) для записи своего массива.
Цитата
6. ифриты что бы не игнорили сферу и не били щитом чёрных/золотных драконов. Или юнитов под иммуном к магии

Выдать им флаг 16384 иммунитет к заклинаниям огня
feanor
в случае мистицизма создавать не надо, можно править прямо исходные данные

он только для мистицизма и используется
DedMorozzz
Цитата(igrik @ 23 Nov 2016, 21:41) *
Ты играешь HD модом?
И ты выбрал не правильное место (0x63E8F0) для записи своего массива.
Цитата
6. ифриты что бы не игнорили сферу и не били щитом чёрных/золотных драконов. Или юнитов под иммуном к магии

Выдать им флаг 16384 иммунитет к заклинаниям огня

Да, HD. А чего не правильное?
И по ифритам я так понял, что им дать бафф такой (иммун к огню)?
Если да, то задача несколько другая (но из всего списка самая не значительная в плане игрового процесса):
сейчас нападая на ифритов (султанов естессно) обладая сферой. Юниты всё равно получают урон от щита. То же самое с драконами. Атакуя чёрными драконами ифритов - всё равно получу урон от щита... хоть это и магия огня, а драконы иммуны к ней

Цитата(feanor @ 23 Nov 2016, 21:44) *
в случае мистицизма создавать не надо, можно править прямо исходные данные

он только для мистицизма и используется

ага, понял. Заменю значит там. Ну а в целом можно те нули заменять значениями и на них ссылаться?
XEPOMAHT
Цитата(DedMorozzz @ 23 Nov 2016, 23:12) *
Юниты всё равно получают урон от щита. То же самое с драконами. Атакуя чёрными драконами ифритов - всё равно получу урон от щита... хоть это и магия огня, а драконы иммуны к ней


Это не магия, а способность монстра, так же как яд, старение и т.д. Просто реализовано через жо магию. По правилам игры антимагия не действует на способности монстров (способность Огненный Щит учитывает только флаг "иммунитет к огню").
DedMorozzz
Цитата(XEPOMAHT @ 24 Nov 2016, 06:51) *
Цитата(DedMorozzz @ 23 Nov 2016, 23:12) *
Юниты всё равно получают урон от щита. То же самое с драконами. Атакуя чёрными драконами ифритов - всё равно получу урон от щита... хоть это и магия огня, а драконы иммуны к ней


Это не магия, а способность монстра, так же как яд, старение и т.д. Просто реализовано через жо магию. По правилам игры антимагия не действует на способности монстров (способность Огненный Щит учитывает только флаг "иммунитет к огню").


Тогда в механике стало больше не очевидностей)
Сфера запрещает всю магию. И когда одета сфера, яды, старения и смертельные взгляды не работают... соотв я думал что это всё магия
Но получается сфера отключает магию и некоторые способности. Оставля всякие двойные выстрелы и урон на 2 клетки...
hippocamus
Цитата(DedMorozzz @ 23 Nov 2016, 15:54) *
Замок - ГМ3 для ангелов. И гм4 для архангелов
Насколько это реально?
Где-то далеко и когда-то давно, лет 10 назад, была одна программа, написанная форумчанином по имени Irh для мода под названием REKVIZIT - редактор зависимости зданий в экзешнике. Не знаю, реально ли её ещё найти, и работает ли она для СОД (и ХотЫ соответственно). Думается, должна работать.
feanor
Цитата
Что бы быть более конкретным. Хочу для дьяволов сделать требуемые постройки - ГМ1, ифриты, демоны (не помню, требуют ли ифриты их, если не требуют то ГМ2 на замену...)
Замок - ГМ3 для ангелов. И гм4 для архангелов
Насколько это реально?
Реально, попозже посмотрю.
Там, правда, структура не особенно предназначена для редактирования в самом экзешнике.
igrik
Цитата
Что бы быть более конкретным. Хочу для дьяволов сделать требуемые постройки - ГМ1, ифриты, демоны (не помню, требуют ли ифриты их, если не требуют то ГМ2 на замену...)
Замок - ГМ3 для ангелов. И гм4 для архангелов
Насколько это реально?

Реально, но не совсем ясна формулировка, а в следствии и что точно нужно про Дьяволов.
Код
Patcher* _P;
PatcherInstance* _PI;

// Замок
int BuildDepends_Castle[] =
{
0,                              -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
6,                              -1,
5,                              -1,
22, 5,                          -1,
14,                             -1,
15, 14,                         -1,
16,                             -1,
17, 6,                          -1,
7,                              -1,
8, 7,                           -1,
9, 8,                           -1,
11, 5,                          -1,
12, 11, 16, 0, 14,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
37, 30,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 30, 16,                     -1,
40, 33,                         -1,
32, 33,                         -1,
18, 32,                         -1,
39, 32,                         -1,
19, 39,                         -1,
21, 33,                         -1,
35, 21,                         -1,
42, 35,                         -1,
34, 33, 0,                      -1,
41, 34,                         -1,
36, 34, 2,                      -1, // Ангелы требуют еще и ГМ3
43, 36, 3,                      -1, // Архангелы требуют еще и ГМ4
26,                             -1,
-100
};

// Инферно  
int BuildDepends_Inferno[] =
{
7,                              -1,
21, 7,                          -1,
8, 7,                           -1,
22, 8,                          -1,
9, 8,                           -1,
5,                              -1,
16,                             -1,
14,                             -1,
15, 14,                         -1,
0,                              -1,
23, 0,                          -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
4, 3,                           -1,
11, 5,                          -1,
12, 11, 16, 14, 0,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
18, 30,                         -1,
37, 30,                         -1,
19, 37,                         -1,
32, 30,                         -1,
24, 32,                         -1,
39, 32,                         -1,
25, 39,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 31,                         -1,
40, 33,                         -1,
35, 33, 0,                      -1,
42, 35,                         -1,
34, 33,                         -1,
41, 34, 0,                      -1, // ул. провал требует ГМ1 взамен ГМ2 (согласно описаниям HotA)
36, 34, 5,                      -1,
43, 36,                         -1,
26,                             -1,
-100
};


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    static _bool_ plugin_On = 0;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        if (!plugin_On)
        {
            plugin_On = 1;        

            _P = GetPatcher();
            _PI = _P->CreateInstance("HD.Plugin.DedMorozzz");

            *(int*)0x4EB816 = (int)BuildDepends_Castle;
            *(int*)0x4EBA39 = (int)BuildDepends_Inferno;

        }
        break;

    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


Кстати, тут народ тоже пытается редактировать hota.exe
XEPOMAHT
Цитата(igrik @ 25 Nov 2016, 08:41) *
Кстати, тут народ тоже пытается редактировать hota.exe


Только лишь выкладывают те же адреса и значения данных, что и в sod.exe. Из неразобранного - только значение вида героя (добавил в исходники МоПа):

0 = Demon
1 = Dwarf
2 = Efreeti
3 = Elf
4 = Genie
5 = Gnoll
6 = Goblin
7 = Human
8 = Lich
9 = Lizardman
10 = Minotaur
11 = Ogre
12 = Troglodyte
13 = Vampire

А вот добавлять, например, новых монстров через hota.dll и hota.dat отчего-то никто не пробует (наверное просто это никому не интересно из моддеров (или никто не хочет с этим связываться), хотя данные hota.dll и hota.dat не шифрованы и спокойно подвергаются разбору).
tolich
Цитата(XEPOMAHT @ 25 Nov 2016, 10:02) *
Efreeti
Efreet. Тут же он один, и в остальных случаях единственное число.
Хотя тут одержимые указаны, как Efreet, а еретики, как Efreeti.
Странно, в общем, особенно учитывая, что множественное Efreets.
Sav
В Героях Efreeti - единственное число, Efreet - множественное. Впрочем, при этом грейд Efreet Sultan / Efreet Sultans (в подобных конструкциях определение пишется в единственном числе), что намекает на ошибку либо у грейда, либо у негрейда.
Насколько я вижу, в интернете можно найти источники и с одим строением слова, и с другим.

P. S. Ещё одно слово, которое многих смущает - это Cyclops - Cyclopes. Но здесь такая конструкция уже более однозначна, грейд в определении корректно использует единственное число Cyclops.
MasterOfPuppets
Цитата(XEPOMAHT @ 25 Nov 2016, 11:02) *
Только лишь выкладывают те же адреса и значения данных, что и в sod.exe. Из неразобранного - только значение вида героя (добавил в исходники МоПа):

0 = Demon
1 = Dwarf
2 = Efreeti
3 = Elf
4 = Genie
5 = Gnoll
6 = Goblin
7 = Human
8 = Lich
9 = Lizardman
10 = Minotaur
11 = Ogre
12 = Troglodyte
13 = Vampire

Ничего не понял. Значение вида где? Ни на поле боя, ни на карте вид героя не зависит от этого параметра.
XEPOMAHT
Цитата(MasterOfPuppets @ 25 Nov 2016, 15:01) *
Ничего не понял. Значение вида где? Ни на поле боя, ни на карте вид героя не зависит от этого параметра.


То, что нарисовано на портрете героя. Записано в HeroesChanges.txt, второе значение, которое нигде не используется и там можно хранить какую-нибудь информацию для стартовых параметров героев (например номер галереи портретов, чтобы нельзя было поменять портрет рыцаря на нежить и т.д., или сидел ли герой в тюрьме, был ли уволен, короче то что потребуется узнать для героя перед его наймом непосредственно через структуру, а не геройскую переменную)
MasterOfPuppets
Цитата(XEPOMAHT @ 25 Nov 2016, 16:05) *
Записано в HeroesChanges.txt, второе значение

Да это-то я понял, я спрашивал: где оно используется? Ответ, видимо: нигде. Но тогда с чего вообще такие названия - Goblin или Gnoll? Это даже не раса и не класс.
И я бы не стал так уж безоговорочно считать его ненужным и свободным для использования, поэтому и не затрагивал его. Возможно, это что-то значит для ИИ, нужно ставить бряк и проверять. Долго проверять.
Я и тринадцатый флаг использовал для рейд-боссов только после того, как убедился (да и то не до конца), что он реально не используется.
Etoprostoya
Читаю название темы, как "Мода на ХотА".
feanor
Цитата
Но тогда с чего вообще такие названия - Goblin или Gnoll? Это даже не раса и не класс.
Потому что это все-таки раса.
DedMorozzz
Цитата(igrik @ 25 Nov 2016, 07:41) *
Цитата
Что бы быть более конкретным. Хочу для дьяволов сделать требуемые постройки - ГМ1, ифриты, демоны (не помню, требуют ли ифриты их, если не требуют то ГМ2 на замену...)
Замок - ГМ3 для ангелов. И гм4 для архангелов
Насколько это реально?

Реально, но не совсем ясна формулировка, а в следствии и что точно нужно про Дьяволов.
Код
Patcher* _P;
PatcherInstance* _PI;

// Замок
int BuildDepends_Castle[] =
{
0,                              -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
6,                              -1,
5,                              -1,
22, 5,                          -1,
14,                             -1,
15, 14,                         -1,
16,                             -1,
17, 6,                          -1,
7,                              -1,
8, 7,                           -1,
9, 8,                           -1,
11, 5,                          -1,
12, 11, 16, 0, 14,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
37, 30,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 30, 16,                     -1,
40, 33,                         -1,
32, 33,                         -1,
18, 32,                         -1,
39, 32,                         -1,
19, 39,                         -1,
21, 33,                         -1,
35, 21,                         -1,
42, 35,                         -1,
34, 33, 0,                      -1,
41, 34,                         -1,
36, 34, 2,                      -1, // Ангелы требуют еще и ГМ3
43, 36, 3,                      -1, // Архангелы требуют еще и ГМ4
26,                             -1,
-100
};

// Инферно  
int BuildDepends_Inferno[] =
{
7,                              -1,
21, 7,                          -1,
8, 7,                           -1,
22, 8,                          -1,
9, 8,                           -1,
5,                              -1,
16,                             -1,
14,                             -1,
15, 14,                         -1,
0,                              -1,
23, 0,                          -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
4, 3,                           -1,
11, 5,                          -1,
12, 11, 16, 14, 0,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
18, 30,                         -1,
37, 30,                         -1,
19, 37,                         -1,
32, 30,                         -1,
24, 32,                         -1,
39, 32,                         -1,
25, 39,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 31,                         -1,
40, 33,                         -1,
35, 33, 0,                      -1,
42, 35,                         -1,
34, 33,                         -1,
41, 34, 0,                      -1, // ул. провал требует ГМ1 взамен ГМ2 (согласно описаниям HotA)
36, 34, 5,                      -1,
43, 36,                         -1,
26,                             -1,
-100
};


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    static _bool_ plugin_On = 0;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        if (!plugin_On)
        {
            plugin_On = 1;        

            _P = GetPatcher();
            _PI = _P->CreateInstance("HD.Plugin.DedMorozzz");

            *(int*)0x4EB816 = (int)BuildDepends_Castle;
            *(int*)0x4EBA39 = (int)BuildDepends_Inferno;

        }
        break;

    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}


Кстати, тут народ тоже пытается редактировать hota.exe


Если совсем кратко - для дьяволов убрать провал из требований

И какой это файл редактировал? Патчер... не в курсе что это ):
igrik
Вкратце, что такое patсher_x86 (тут)
Как создать dll для HD-мода. (тут)

Код
#include "patcher_x86.hpp"

Patcher* _P;
PatcherInstance* _PI;

// Замок
int BuildDepends_Castle[] =
{
0,                              -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
6,                              -1,
5,                              -1,
22, 5,                          -1,
14,                             -1,
15, 14,                         -1,
16,                             -1,
17, 6,                          -1,
7,                              -1,
8, 7,                           -1,
9, 8,                           -1,
11, 5,                          -1,
12, 11, 16, 0, 14,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
37, 30,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 30, 16,                     -1,
40, 33,                         -1,
32, 33,                         -1,
18, 32,                         -1,
39, 32,                         -1,
19, 39,                         -1,
21, 33,                         -1,
35, 21,                         -1,
42, 35,                         -1,
34, 33, 0,                      -1,
41, 34,                         -1,
36, 34, 2,                      -1, // Ангелы требуют еще и ГМ3
43, 36, 3,                      -1, // Архангелы требуют еще и ГМ4
26,                             -1,
-100
};

// Инферно  
int BuildDepends_Inferno[] =
{
7,                              -1,
21, 7,                          -1,
8, 7,                           -1,
22, 8,                          -1,
9, 8,                           -1,
5,                              -1,
16,                             -1,
14,                             -1,
15, 14,                         -1,
0,                              -1,
23, 0,                          -1,
1, 0,                           -1,
2, 1,                           -1,
3, 2,                           -1,
4, 3,                           -1,
11, 5,                          -1,
12, 11, 16, 14, 0,              -1,
13, 12, 9,                      -1,
30, 7,                          -1,
18, 30,                         -1,
37, 30,                         -1,
19, 37,                         -1,
32, 30,                         -1,
24, 32,                         -1,
39, 32,                         -1,
25, 39,                         -1,
31, 30,                         -1,
38, 31,                         -1,
33, 31,                         -1,
40, 33,                         -1,
35, 33, 0,                      -1,
42, 35,                         -1,
34, 33,                         -1,
41, 34, 0,                      -1, // ул.Провал требует ГМ1 взамен ГМ2 (согласно описаниям HotA)
36, 33, 5,                      -1, // Дьяволы не требуют Провал для постройки (34 -> 33)
43, 36,                         -1,
26,                             -1,
-100
};


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    static _bool_ plugin_On = 0;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        if (!plugin_On)
        {
            plugin_On = 1;        

            _P = GetPatcher();
            _PI = _P->CreateInstance("HD.Plugin.DedMorozzz");

            *(int*)0x4EB816 = (int)BuildDepends_Castle;
            *(int*)0x4EBA39 = (int)BuildDepends_Inferno;

        }
        break;

    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.