Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
22 Mar 2016, 07:59
Сообщение
#101
|
|
![]() 😸🧡✊✌️ Сообщений: 16 521 Спасибо сказали: 3472 раза |
Может, я чего-то не понимаю, но разве проблема вообще стоит?
-------------------- Я слежу за тобой!
tolic.narod.ru![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
|
22 Mar 2016, 19:00
(Сообщение отредактировал AlexSpl - 22 Mar 2016, 19:45)
Сообщение
#102
|
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз |
В Двойке есть флаги: int gbGameOver (если мы на экране победы или поражения), int gbInCombat (если в бою), int bEnteringTown (если открыто окно города) и т.п. Нужно найти в Тройке аналогичные (или лучше один: "мы на карте приключений") или другим образом определить идёт ли игра на карте (началась, но ещё не завершена) в произвольном месте кода.
|
|
|
|
23 Mar 2016, 21:17
Сообщение
#103
|
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз |
Пока тупо сделал проверку MaxMP на ноль для Героев 3 (номера дерева прокачки в Героях 1, 2). Всё равно это полумера. Если начинаешь новую игру, то структуры остаются инициализированными, пока не перейдёшь к выбору карты. Следовательно, на них нельзя опираться. Нужно точно знать, в меню я или нет. Неужели никто не знает? Если не желаете делиться информацией, пойму. Хотя с чего бы это?
|
|
|
|
23 Mar 2016, 22:25
Сообщение
#104
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20606 раз |
Нет, ну не **. Есть обсуждения же тред, есть еще куча прочих тредов, нет, надо писать в справочные.
Цитата(хэлп эры) PROCEDURE GetGameState (VAR GameState: TGameState); STDCALL; Gets the current state of the game as a pair of dialog identifiers—the main parent and current dialogs. 0 - no dialogs have been created yet. This function is useful for determining in which window a key was pressed. Цитата(код эры) Код PPAdvManager = ^PAdvManager; PAdvManager = ^TAdvManager; TAdvManager = PACKED RECORD Dummy: ARRAY [0..79] OF BYTE; RootDlgIdPtr: PPINTEGER; CurrentDlgIdPtr: PPINTEGER; (* Dummy *) END; // .RECORD TAdvManager AdvManagerPtr: PPAdvManager = Ptr($6992D0); PROCEDURE GetGameState (OUT GameState: TGameState); BEGIN IF AdvManagerPtr^.RootDlgIdPtr <> NIL THEN BEGIN GameState.RootDlgId := AdvManagerPtr^.RootDlgIdPtr^^; END // .IF ELSE BEGIN GameState.RootDlgId := 0; END; // .ELSE IF AdvManagerPtr^.CurrentDlgIdPtr <> NIL THEN BEGIN GameState.CurrentDlgId := AdvManagerPtr^.CurrentDlgIdPtr^^; END // .IF ELSE BEGIN GameState.CurrentDlgId := 0; END; // .ELSE END; // .PROCEDURE GetDialogsIds или же сразу |
|
|
|
23 Mar 2016, 23:16
(Сообщение отредактировал AlexSpl - 23 Mar 2016, 23:23)
Сообщение
#105
|
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз |
У меня была такая идея. Но в Героях 2 недостаточно, чтобы int iDialogNestCount был равен 0. В игре мы же можем начинать различные диалоги, но игра же не прерывается.
Допустим, в Тройке этой информации достаточно. Как получить AdvManagerPtr^.RootDlgIdPtr^^ и AdvManagerPtr^.CurrentDlgIdPtr^^? И какие значения будут соответствовать тому факту, что игра не началась или уже закончилась? |
|
|
|
23 Mar 2016, 23:52
(Сообщение отредактировал AlexSpl - 23 Mar 2016, 23:56)
Сообщение
#106
|
|
|
Immortal Сообщений: 798 Спасибо сказали: 555 раз |
Может, я недостаточно чётко сформулировал проблему. После выбора карты, мы начинаем игру. После "Начать новую игру"/"Загрузить сейв"/победы/проигрыша игра заканчивается. Как определить, что мы [по-прежнему] здесь, а не [* карты больше нет и продолжить игру невозможно*] там?
Не знаю, как в Тройке, но в Двойке это большая проблема, т.к. все игровые структуры не реинициализируются, т.е. хранят данные последней игры, хотя карты уже нет и мы в меню. |
|
|
|
12 Jun 2016, 00:29
(Сообщение отредактировал feanor - 12 Jun 2016, 00:30)
Сообщение
#107
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20606 раз |
Шестая ида умеет в экспорт структур в сишные хедеры, так что вот вам из вогобазы.
https://dl.dropboxusercontent.com/u/61759222/HoMM/Heroes3.h Надо бы, конечно, стандартизировать структуры, хоть тему открывай.. |
|
|
|
03 Aug 2016, 22:58
(Сообщение отредактировал Richter - 03 Aug 2016, 23:04)
Сообщение
#108
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
У кого нибудь есть решение ввиде bin файла, либо dll файла или через ERM для отключения экрана Wog'ификации?
-------------------- |
|
|
|
04 Aug 2016, 07:26
Сообщение
#109
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Сейчас нет игры под рукой, но можешь посмотреть патч в исходниках MoP: BIN-files, файл WoG-options.txt.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
04 Aug 2016, 10:19
(Сообщение отредактировал igrik - 04 Aug 2016, 10:19)
Сообщение
#110
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
*.bin класть в "AfterWoG"
0071010F EB20 -------------------- |
|
|
|
01 May 2017, 11:30
(Сообщение отредактировал Barin - 01 May 2017, 11:32)
Сообщение
#111
|
|
![]() Member Сообщений: 84 Спасибо сказали: 70 раз |
Поменять координаты здания в экране города сложно? Может уже есть алгоритм. Если не сложно, подскажите как это сделать.
-------------------- |
|
|
|
01 May 2017, 12:30
Сообщение
#112
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
Ты вообще темы по UN:C читаешь?
вот © feanor -------------------- |
|
|
|
01 May 2017, 14:41
(Сообщение отредактировал Barin - 01 May 2017, 14:44)
Сообщение
#113
|
|
![]() Member Сообщений: 84 Спасибо сказали: 70 раз |
Ты вообще темы по UN:C читаешь? вот © feanor Хорошо, работает для объектов которые можно построить. А как определить подобные декоративные объекты непонятно: ![]() Это деф анимированного водопада из Сопряжения. Его конечно же можно сделать прозрачным фоном, чтобы не отображался, но всё-таки, есть идея как его сместить? -------------------- |
|
|
|
01 May 2017, 15:52
Сообщение
#114
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
Хорошо, работает для объектов которые можно построить. А как определить подобные декоративные объекты непонятно: Сначала проверь указанное, а потом говори что "непонятно". Откуда эта инфа, что можно менять только строящиеся объекты? Ты проверял? Конечно нет. Поэтому и не знаешь, что можно. И в сотый раз тебе повторять уже надоело - есть специальные темы для обсуждений. А эти темы для чистой информации. Смекаешь? -------------------- |
|
|
|
13 Jul 2017, 15:19
(Сообщение отредактировал hippocamus - 18 Jan 2019, 20:49)
Сообщение
#115
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20606 раз |
Деревья строительства и маски заменяющих друг друга объектов, дамп
CODE #define BLD_ID_MAGE1 0 #define BLD_ID_MAGE2 1 #define BLD_ID_MAGE3 2 #define BLD_ID_MAGE4 3 #define BLD_ID_MAGE5 4 #define BLD_ID_TAVERN 5 #define BLD_ID_WHARF 6 #define BLD_ID_FORT1 7 #define BLD_ID_FORT2 8 #define BLD_ID_FORT3 9 #define BLD_ID_HALL1 10 #define BLD_ID_HALL2 11 #define BLD_ID_HALL3 12 #define BLD_ID_HALL4 13 #define BLD_ID_MARKET 14 #define BLD_ID_SILO 15 #define BLD_ID_SMITH 16 #define BLD_ID_SPEC17 17 #define BLD_ID_HORDE1 18 #define BLD_ID_HORDE1U 19 #define BLD_ID_WHARF2 20 #define BLD_ID_SPEC21 21 #define BLD_ID_SPEC22 22 #define BLD_ID_SPEC23 23 #define BLD_ID_HORDE2 24 #define BLD_ID_HORDE2U 25 #define BLD_ID_GRAIL 26 #define BLD_ID_DECOR27 27 #define BLD_ID_DECOR28 28 #define BLD_ID_DECOR29 29 #define BLD_ID_DWELL1 30 #define BLD_ID_DWELL2 31 #define BLD_ID_DWELL3 32 #define BLD_ID_DWELL4 33 #define BLD_ID_DWELL5 34 #define BLD_ID_DWELL6 35 #define BLD_ID_DWELL7 36 #define BLD_ID_DWELL1U 37 #define BLD_ID_DWELL2U 38 #define BLD_ID_DWELL3U 39 #define BLD_ID_DWELL4U 40 #define BLD_ID_DWELL5U 41 #define BLD_ID_DWELL6U 42 #define BLD_ID_DWELL7U 43 int Dependencies0[] = { BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_WHARF, -1, BLD_ID_TAVERN, -1, BLD_ID_SPEC22, BLD_ID_TAVERN, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_SMITH, -1, BLD_ID_SPEC17, BLD_ID_WHARF, -1, BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MAGE1, BLD_ID_MARKET, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL4, BLD_ID_DWELL1, BLD_ID_SMITH, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL3, BLD_ID_DWELL4, -1, BLD_ID_HORDE1, BLD_ID_DWELL3, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_HORDE1U, BLD_ID_DWELL3U, -1, BLD_ID_SPEC21, BLD_ID_DWELL4, -1, BLD_ID_DWELL6, BLD_ID_SPEC21, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL5, BLD_ID_DWELL4, BLD_ID_MAGE1, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL7, BLD_ID_DWELL5, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies1[] = { BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_SPEC17, -1, BLD_ID_SPEC21, BLD_ID_SPEC17, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_SMITH, BLD_ID_MARKET, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_HORDE1, BLD_ID_DWELL2, -1, BLD_ID_SPEC22, BLD_ID_HORDE1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL5, BLD_ID_DWELL3, -1, BLD_ID_HORDE2, BLD_ID_DWELL5, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_HORDE2U, BLD_ID_DWELL5U, -1, BLD_ID_DWELL4, BLD_ID_DWELL3, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_MAGE2, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies2[] = { BLD_ID_FORT1, -1, BLD_ID_SPEC21, BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_MAGE1, -1, BLD_ID_SPEC22, BLD_ID_MAGE1, -1, BLD_ID_SPEC23, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_SPEC17, BLD_ID_MARKET, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_HORDE1, BLD_ID_DWELL2, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_HORDE1U, BLD_ID_DWELL2U, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL4, BLD_ID_DWELL2, BLD_ID_DWELL3, BLD_ID_MAGE1, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC22, -1, BLD_ID_DWELL5, BLD_ID_DWELL4, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies3[] = { BLD_ID_FORT1, -1, BLD_ID_SPEC21, BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_SPEC22, BLD_ID_FORT2, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_SPEC23, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_HORDE2, BLD_ID_DWELL3, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_HORDE2U, BLD_ID_DWELL3U, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL4, BLD_ID_DWELL2, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_MAGE1, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL5, BLD_ID_DWELL4, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_MAGE2, -1, BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies4[] = { BLD_ID_FORT1, -1, BLD_ID_SPEC17, BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_WHARF, -1, BLD_ID_MAGE1, -1, BLD_ID_SPEC21, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_SPEC22, BLD_ID_DWELL1, -1, BLD_ID_HORDE1, BLD_ID_SPEC22, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_SPEC22, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL4, BLD_ID_DWELL2, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_SPEC21, -1, BLD_ID_DWELL5, BLD_ID_DWELL2, BLD_ID_MAGE1, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL7, BLD_ID_DWELL6, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies5[] = { BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_SPEC22, -1, BLD_ID_SPEC23, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_SPEC17, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_SPEC21, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_SMITH, BLD_ID_MARKET, BLD_ID_MAGE1, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL4, BLD_ID_DWELL3, BLD_ID_DWELL2, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL5, BLD_ID_DWELL4, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL7, BLD_ID_DWELL5, BLD_ID_DWELL6, BLD_ID_MAGE2, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, BLD_ID_MAGE3, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies6[] = { BLD_ID_FORT1, -1, BLD_ID_SPEC17, BLD_ID_FORT1, -1, BLD_ID_SPEC23, BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_SPEC22, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_SPEC21, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MAGE1, BLD_ID_MARKET, BLD_ID_SMITH, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, BLD_ID_DWELL1U, -1, BLD_ID_DWELL5, BLD_ID_DWELL2, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL7, BLD_ID_DWELL5, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, BLD_ID_SMITH, -1, BLD_ID_DWELL4, BLD_ID_DWELL3, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_MAGE1, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies7[] = { BLD_ID_FORT1, -1, BLD_ID_SPEC21, BLD_ID_FORT1, -1, BLD_ID_SPEC22, BLD_ID_SPEC21, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_SPEC17, BLD_ID_HALL2, BLD_ID_SPEC21, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1, BLD_ID_WHARF, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, BLD_ID_TAVERN, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL6, BLD_ID_DWELL2, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL4, BLD_ID_DWELL3, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL5, BLD_ID_DWELL3, BLD_ID_DWELL2, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, BLD_ID_SILO, -1, BLD_ID_DWELL7, BLD_ID_DWELL6, BLD_ID_DWELL4, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int Dependencies8[] = { BLD_ID_FORT1, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_WHARF, -1, BLD_ID_TAVERN, -1, BLD_ID_SMITH, -1, BLD_ID_MARKET, -1, BLD_ID_SILO, BLD_ID_MARKET, -1, BLD_ID_SPEC17, BLD_ID_MARKET, -1, BLD_ID_MAGE1, -1, BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_SPEC21, BLD_ID_MAGE1, -1, BLD_ID_HALL2, BLD_ID_TAVERN, -1, BLD_ID_HALL3, BLD_ID_HALL2, BLD_ID_MARKET, BLD_ID_SMITH, BLD_ID_MAGE1, -1, BLD_ID_HALL4, BLD_ID_HALL3, BLD_ID_FORT3, -1, BLD_ID_DWELL1, BLD_ID_FORT1, -1, BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, -1, BLD_ID_DWELL2, BLD_ID_DWELL1, BLD_ID_MAGE1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL3, BLD_ID_DWELL1, BLD_ID_MAGE1, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL4, BLD_ID_DWELL2, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, BLD_ID_DWELL2U, -1, BLD_ID_DWELL5, BLD_ID_DWELL3, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL6, BLD_ID_DWELL4, BLD_ID_DWELL5, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, BLD_ID_MAGE2, -1, BLD_ID_DWELL7, BLD_ID_DWELL6, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, BLD_ID_GRAIL, -1, -100 }; int ObsolutionsAll[] = { BLD_ID_MAGE2, BLD_ID_MAGE1, -1, BLD_ID_MAGE3, BLD_ID_MAGE2, -1, BLD_ID_MAGE4, BLD_ID_MAGE3, -1, BLD_ID_MAGE5, BLD_ID_MAGE4, -1, BLD_ID_FORT2, BLD_ID_FORT1, -1, BLD_ID_FORT3, BLD_ID_FORT2, -1, BLD_ID_HALL2, BLD_ID_HALL1, -1, BLD_ID_HALL3, BLD_ID_HALL2, -1, BLD_ID_HALL4, BLD_ID_HALL3, -1, BLD_ID_HORDE1U, BLD_ID_HORDE1, -1, BLD_ID_HORDE2U, BLD_ID_HORDE2, -1, BLD_ID_DWELL1U, BLD_ID_DWELL1, -1, BLD_ID_DWELL2U, BLD_ID_DWELL2, -1, BLD_ID_DWELL3U, BLD_ID_DWELL3, -1, BLD_ID_DWELL4U, BLD_ID_DWELL4, -1, BLD_ID_DWELL5U, BLD_ID_DWELL5, -1, BLD_ID_DWELL6U, BLD_ID_DWELL6, -1, BLD_ID_DWELL7U, BLD_ID_DWELL7, -1, -100 }; int Obsolutions0[] = { BLD_ID_SPEC22, BLD_ID_TAVERN, -1, BLD_ID_HORDE1, BLD_ID_DWELL3, -1, BLD_ID_HORDE1U, BLD_ID_DWELL3U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions1[] = { BLD_ID_HORDE1, BLD_ID_DWELL2, -1, BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1, BLD_ID_HORDE2, BLD_ID_DWELL5, -1, BLD_ID_HORDE2U, BLD_ID_DWELL5U, BLD_ID_HORDE2, -1, BLD_ID_SPEC21, BLD_ID_SPEC17, -1, -100 }; int Obsolutions2[] = { BLD_ID_HORDE1, BLD_ID_DWELL2, -1, BLD_ID_HORDE1U, BLD_ID_DWELL2U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions3[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, BLD_ID_HORDE2, BLD_ID_DWELL3, -1, BLD_ID_HORDE2U, BLD_ID_DWELL3U, BLD_ID_HORDE2, -1, -100 }; int Obsolutions4[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions5[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions6[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions7[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, -100 }; int Obsolutions8[] = { BLD_ID_HORDE1, BLD_ID_DWELL1, -1, BLD_ID_HORDE1U, BLD_ID_DWELL1U, BLD_ID_HORDE1, -1, -100 }; //патчим буквально сразу в DllMain, иначе данные уйдут в битовое поле *(int*)0x004EB816 = (int)Dependencies0; *(int*)0x004EB8B3 = (int)Dependencies1; *(int*)0x004EB971 = (int)Dependencies2; *(int*)0x004EBA39 = (int)Dependencies3; *(int*)0x004EBA48 = (int)Dependencies4; *(int*)0x004EBA5C = (int)Dependencies5; *(int*)0x004EBA70 = (int)Dependencies6; *(int*)0x004EBA84 = (int)Dependencies7; *(int*)0x004EBA98 = (int)Dependencies8; *(int*)0x004EBAC9 = (int)ObsolutionsAll; *(int*)0x004EBB04 = (int)ObsolutionsAll; *(int*)0x004EBB3F = (int)ObsolutionsAll; *(int*)0x004EBB7A = (int)ObsolutionsAll; *(int*)0x004EBC74 = (int)ObsolutionsAll; *(int*)0x004EBAD8 = (int)Obsolutions0; *(int*)0x004EBB13 = (int)Obsolutions1; *(int*)0x004EBB89 = (int)Obsolutions2; *(int*)0x004EBB4E = (int)Obsolutions3; *(int*)0x004EBB98 = (int)Obsolutions4; *(int*)0x004EBBA7 = (int)Obsolutions5; *(int*)0x004EBBB6 = (int)Obsolutions6; *(int*)0x004EBBC5 = (int)Obsolutions7; *(int*)0x004EBBD4 = (int)Obsolutions8; Экраны холла будут когда-нибудь позже Ну и порождающий это говнокод, потому что писать программы, чтобы они писали программы - это весело, а еще так можно убить свою профессию с её рабочим местом CODE string GetDescByID(int id) { if(id ==-1) return "-1"; if(id ==-100) return "-100"; string[] arr = { "MAGE1", "MAGE2", "MAGE3", "MAGE4", "MAGE5", "TAVERN", //5 "WHARF", //6 "FORT1", //7 "FORT2", "FORT3", "HALL1", //10 "HALL2", "HALL3", "HALL4", "MARKET", //14 "SILO", "SMITH", //16 "SPEC17", "HORDE1", //18 "HORDE1U", "WHARF2", //20 "SPEC21", "SPEC22", "SPEC23", "HORDE2", "HORDE2U", "GRAIL", "DECOR27", "DECOR28", "DECOR29", "DWELL1", "DWELL2", "DWELL3", "DWELL4", "DWELL5", "DWELL6", "DWELL7", "DWELL1U", "DWELL2U", "DWELL3U", "DWELL4U", "DWELL5U", "DWELL6U", "DWELL7U" }; return "BLD_ID_"+arr[id]; } int ReadInt(byte[] arr, ref int offset) { int ret = arr[offset] | arr[offset+1] << 8 | arr[offset+2] << 16 | arr[offset+3]<<24; offset+=4; return ret; } List<int> FindRefs(byte[] arr, int addr) { List<int> ret = new List<int>(); for(int i =0; i!=arr.Length-3; i++) { if((arr[i] == (addr & 0xFF)) && (arr[i+1] == ((addr>>8) & 0xFF)) && (arr[i+2] == ((addr>>16) & 0xFF)) && (arr[i+3] == ((addr>>24) & 0xFF))) { ret.Add(i+0x400000); } } return ret; } string ProduceTable(byte[] file, int tree_offset, string name) { int v_tree_offset = tree_offset- 0x400000; string s = ""; s += "\r\n"; s += "int "+name+"[] = {\r\n"; int i = 0; do { i = ReadInt(file,ref v_tree_offset); s += '\t'; s += GetDescByID(i); if(i!=-100) s += ","; if(i<0) s += Environment.NewLine; }while( i != -100); s += "};"; s += "\r\n"; return s; } string ProduceHooks(byte[] file, int tree_offset, string name) { string t = "\r\n"; foreach(int refaddr in FindRefs(file,tree_offset)) { t+= string.Format("*(int*)0x{0:X8} = (int){1};\r\n", refaddr, name); } return t; } void MainFormLoad(object sender, EventArgs e) { var file = File.ReadAllBytes(@"d:\\h3era24\\h3era.exe"); string[] names = { "Dependencies0", "Dependencies1", "Dependencies2", "Dependencies3", "Dependencies4", "Dependencies5", "Dependencies6", "Dependencies7", "Dependencies8", "ObsolutionsAll", "Obsolutions0", "Obsolutions1", "Obsolutions2", "Obsolutions3", "Obsolutions4", "Obsolutions5", "Obsolutions6", "Obsolutions7", "Obsolutions8" }; int[] addrs = { 0x63EC80, 0x63EE24, 0x63EFE4, 0x63F1A0, 0x63F364, 0x63F51C, 0x63F6D0, 0x63F870, 0x63FA14, 0x63FBC4, 0x63FCA0, 0x63FCCC, 0x63FD14, 0x63FD34, 0x63FD70, 0x63FD90, 0x63FDB0, 0x63FDD0, 0x63FDF0 }; for(int j=0; j!=44; j++) { textBox1.Text += string.Format("#define\t{0}\t{1}\r\n",GetDescByID(j),j); } for(int j = 0; j!=19; j++) { textBox1.Text += ProduceTable(file,addrs[j], names[j]); textBox1.Text +=Environment.NewLine; } for(int j = 0; j!=19; j++) { textBox1.Text += ProduceHooks(file,addrs[j], names[j]); } } |
|
|
|
25 Jul 2017, 21:20
Сообщение
#116
|
|
|
Power Member Сообщений: 198 Спасибо сказали: 134 раза |
Поисследовал, как изменить коэффициент первичного навыка защиты.
По ряду соображений хочется сделать его не 2,5%, а 3,5% - снижение ущерба от атаки. В воговской базе соответствующих комментариев нет. Обнаружилось, что коэффициент 0.025 нужно менять по адресу 0x0063B8C0 Ограничение на общее снижение ущерба (сейчас 70%) правится по адресу 0x0063B8B8. Величину 0.3 меняю на 0.2 Дополнительно это дело захардкожено в одной процедуре (2 ассемблерных мува со значениями). Нужно поправить значения в 0x00443913 и 0x00443918 |
|
|
|
18 Jan 2019, 10:18
(Сообщение отредактировал Richter - 18 Jan 2019, 13:46)
Сообщение
#117
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Образовался вопрос, где хранится статус "выбрано существо или нет" и как его убрать (жёлтая рамка) в окне героя? Надеюсь с темой для поста не ошибся)
![]() -------------------- |
|
|
|
18 Jan 2019, 17:54
Сообщение
#118
|
|
![]() Immortal Сообщений: 589 Спасибо сказали: 891 раз |
Образовался вопрос, где хранится статус "выбрано существо или нет" и как его убрать (жёлтая рамка) в окне героя? Надеюсь с темой для поста не ошибся) ![]() !!UN:C6911880/4/?y1; -------------------- |
|
|
|
27 Jan 2019, 09:46
Сообщение
#119
|
|
![]() collector of time Сообщений: 159 Спасибо сказали: 73 раза |
Понимаю тема не для вопросов, однако такой вопрос не нашёл более где задать. Появилась необходимость в использовании свободных адресов в exe. Какие диапазоны могу использовать, чтобы не нарушить код после запуска и во время игры?
Необходимо 3800 адресов. Вот пример: Код 008CA2E0 0000 ADD BYTE PTR DS:[EAX],AL
008CA2E2 0000 ADD BYTE PTR DS:[EAX],AL 008CA2E4 0000 ADD BYTE PTR DS:[EAX],AL 008CA2E6 0000 ADD BYTE PTR DS:[EAX],AL .................. 00639D55 00 DB 00 00639D56 00 DB 00 00639D57 00 DB 00 00639D58 00 DB 00 -------------------- |
|
|
|
27 Jan 2019, 10:47
Сообщение
#120
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2377 раз |
Зачем?
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 22 January 2026 - 13:00 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|