Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
29 Jul 2010, 21:14
(Сообщение отредактировал feanor - 29 Jul 2010, 21:16)
Сообщение
#61
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
Данные, как обычно, почти непроверенные и вообще извлеченные под перегревом и агрофитнессом.
49D040 - функция затемнения участка поверхности. int __thiscall sub_49D040(void *this, int x, int y, int level, int player, int radius); //==================================================== Текущий герой: [69CCFC]+4 a [69CCFC]+8 [69CCFC]+12 [69CCFC]+16 .. список героев на панели. 7 DWORD'ов. [69CCFC]+1 - количество героев в списке. Если поставить больше, чем есть, а в список вытянуть левого героя, он появится, но кликать на него не стоит. Если поставить меньше, чем есть - лишние будут некликабельны. [69CCFC]+E2 - возможно, флаг на определение, ИИ или человек сейчас ходит. //==================================================== sub_553C40(..) печать в внутриигровой чат. Функция напоминает printf. ввод в чат можно хукнуть на 402450 или 4022E0. //==================================================== void *__thiscall sub_5C8590(void *this, char amount) Показать гильдию воров. amount - количество информации //==================================================== Смещения в структурах героев: 476h - атака-защита-спеллпавер-знание 12Dh - слоты артов. Первый - шлем и далее по 4байта 1С5h - записи о блокированных слотах? странный формат. 11 байт после них - рюкзак героя 51h - опыт 55h - уровень 35h,39h - точки назначения для героя 4байта 00h 02h 04h - ворд координаты 4Dh - мувпойнты 430h - таблица заклинаний //==================================================== 51BD60 - заглушка, поставленная вместо функции мультиплеерного лога. Надо вернуть её на место и почитать - интересссно. По формату сходна с ?printf, но первым параметром идет имя файла. //==================================================== 0х69844C - ID недели. Если неделя существа - там лежит номер существа. Если неделя белки, ежа и прочего - там лежит номер названия. Как отличить - пока хз. //==================================================== Текущий день - [840CE0]. Два байта - день, два байта - месяц, два байта - год. //==================================================== Переход хода - функция 4СС490. //==================================================== 5CEC30 - вызов окна гарнизона. 1 параметр - указатель на структуру героя, 2 параметр - цвет флага 3 параметр - указатель на структуру войск гарнизона (7 DWORDов для типов, 7 DWORDов для количества (или наоборот (= ) и 8 байт непонятного назначения) |
|
|
|
30 Jul 2010, 11:49
(Сообщение отредактировал feanor - 30 Jul 2010, 12:35)
Сообщение
#62
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
Проверка на Доспехи Проклятого и Альянс Ангелов - в куске кода от 464F10.
Много вкусных и питательных плюшек можно найти, если проследить вызовы функции 4D9460 - проверка на наличие артефакта на герое. В частности: 0044A26F - свитч на выдачу артам иммуна к заклинаниям. 005A86F3 - дополнительная проверка на Клинок Армагеддона 004E663A - плюшки к скорости на поле боя 004E66CC - плюшки к хитпойнтам 005BFE32 - проверки на части Статуи Легиона |
|
|
|
30 Jul 2010, 16:42
Сообщение
#63
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 819 раз |
Вот покопал тип, подтип недели и месяца:
69844C WeekSubtype: Номер монстра или зверька (кролик и т.п.) 6977A0 WeekType: 2 - inferno imps 1 - growth +5 0 - none (if it's the frst week of month, see MonthType, else it's neutral week) Probability: 2 - 0 1 - 1/4 0 - 3/4 697798 MonthSubType. Номер монстра или зверька (кролик и т.п.) 698884 MonthType: 2 - plague 1 - monster *2 0 - nothing Probability: 2 - 1/10 1 - 4/10 0 - 5/10 63E678 - 12 monsters that can double their population -------------------- ДНК банана на 50% состоит из человека.
|
|
|
|
14 Aug 2010, 19:55
(Сообщение отредактировал sergroj - 15 Aug 2010, 16:22)
Сообщение
#64
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 819 раз |
AI
Вычисляет ценность объекта для AI: .text:00528520 ; int __fastcall AICalculateMapPosWeight(_Hero_ *hp, signed int *moveDist, int packedmapitem) moveDist - расстояние до объекта, packedmapitem - координаты объекта, hp - герой. AI решает, применить ли заклинание монстра: .text:00421400 ; char __thiscall CombatMan_00421400_MonsterAITrySpecial(_CombatMan_ *this, _CombatMonster_ *mon, int *weight, int a4) weight - ценность наилучшего действия, выбранного до этого. Возвращает функцию, вычисляющую ценность заклинания: .text:0043B2E0 combatMan_GetSpellWeightAIProc [edit] Вычисляет ценность удара по монстру: .text:004357E0 ; int __thiscall CombatUnk_004357E0_AI_GetRawWeightOfMonAttack(int this, _CombatMonster_ *MonStr, int monHealth, _CombatMonster_ *enemy, int enemyHealth, signed int canShoot, signed int NotRealDamage) AI для стрелков, у которых есть выстрелы и они не заблокированы: .text:0041F1E0 ; char __thiscall CombatMan_0041F1E0_ShootingCreatureAI(_CombatMan_ *this, _CombatMonster_ *mon, char a3, int side) AI для стрелков, у которых есть выстрелы и они не заблокированы: .text:0041F1E0 ; char __thiscall CombatMan_0041F1E0_ShootingCreatureAI(_CombatMan_ *this, _CombatMonster_ *mon, char a3, int side) Рукопашный AI для остальных: .text:00422100 ; int __thiscall CombatMan_00422100_MeleeCreatureAI(_CombatMan_ *this, _CombatMonster_ *a2, char a3, char a4, int side) -------------------- ДНК банана на 50% состоит из человека.
|
|
|
|
15 Aug 2010, 01:29
Сообщение
#65
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
Структуры классов героя.
Адрес - 67В86С. Ссылки - в 4A6A23 (код), 67DCEC, 78BFC0. Описание: struct { char* name; float agression; char start_prim_param[4]; char prim_param_percentage[4]; char prim_param_percentage2[4]; //10+ char second_param_chances[28]; char town_tavern_chances[9]; char foo[7]; } Названия, впрочем чаще берутся из массива указателей по [698B78]. |
|
|
|
15 Aug 2010, 16:53
(Сообщение отредактировал sergroj - 15 Aug 2010, 17:04)
Сообщение
#66
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 819 раз |
что-то у тебя непонятное. Адрес где-то в середине структуры, у ссылок тоже левые адреса.
.data:0067D868 ; _HeroType_ HeroTypesTable[18] (ссылка - 67DCEC) 00000000 _HeroType_ struc ; (sizeof=0x40) 00000000 Belong2Town dd ? 00000004 TypeName dd ? ; offset (00000000) 00000008 Agression dd ? 0000000C PSkillStart db 4 dup(?) 00000010 ProbPSkillToLvl9 db 4 dup(?) 00000014 ProbPSkillAfterLvl10 db 4 dup(?) 00000018 ProbSSkill db 28 dup(?) 00000034 ProbInTown db 9 dup(?) 0000003D field_3D db 3 dup(?) 00000040 _HeroType_ ends .data:00679DD0 ; _HeroInfo_ HeroInfo[163] (ссылка - 67DCE8) 00000000 _HeroInfo_ struc ; (sizeof=0x5C) 00000000 Female dd ? 00000004 _u1 dd 8 dup(?) 00000024 ArmyType dd 3 dup(?) 00000030 HPSName dd ? ; offset (00000000) 00000034 HPLName dd ? ; offset (00000000) 00000038 _u2 db 8 dup(?) 00000040 Name dd ? ; offset (00000000) 00000044 ArmyNum dd 6 dup(?) 0000005C _HeroInfo_ ends P.S. дополнил пост про AI -------------------- ДНК банана на 50% состоит из человека.
|
|
|
|
18 Aug 2010, 11:30
(Сообщение отредактировал feanor - 18 Aug 2010, 11:30)
Сообщение
#67
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
ага, напортачил при поиске ссылок. Никогда больше не буду постить полученную в три ночи инфу, не проверив её утром.
За описание структуры - спасибо. Вообще, надо бы мне все выложенное проверить, а то то там куча ошибок |
|
|
|
04 Sep 2010, 05:48
Сообщение
#68
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2378 раз |
Тоже немного об ИИ.
Довольно часто (я насчитал 46 вызовов) в коде вызывается простенькая функция SUB_L0044A950. Вычисляет она не что иное, как общую FightValue войск героя. В ecx кладётся указатель на структуру героя (со смещением до первого слота существ), в eax возвращается результат. Два вызова этой функции приходятся на SUB_L004AC270, которая срабатывает в момент нападения ИИ на бродячего монстра и, видимо, управляет логикой этой битвы. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
25 Dec 2010, 18:50
(Сообщение отредактировал feanor - 25 Dec 2010, 18:56)
Сообщение
#69
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
006747B4 - таблица обитателей жилищ в городах. По DWORD'у на рыло, порядок - негрейды Замка, грейды Замка, негрейды Оплота etc
|
|
|
|
08 Jan 2011, 16:41
Сообщение
#70
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
Еще об артефактах, точнее, о расчете их (и не только их) бонусов.
004E3ED0 - функция, возвращающая тип поднимаемого в результате некромантии существа. 004E3F40 - функция, определяющая процент поднятых существ 004E42E0 - функция, определяющая радиус обзора. 004E43D0 - функция, определяющая проценты бонуса Archery 004E4690 - ..Eagle Eye 004E4950 - ..Resistance 004E4C00 - расчет мувпойнтов. 004E5020 - бонус к длительности заклятий 004E59D0 - бонусы к школам магии. 004E5D10 - бонусы к скорости в бою 004E5DF0 - к хитпойнтам |
|
|
|
09 Jan 2011, 16:25
(Сообщение отредактировал Лорд Хаарт - 09 Jan 2011, 16:36)
Сообщение
#71
|
|
![]() Рыцарь в лесу. Сообщений: 4 494 Спасибо сказали: 6286 раз |
Цитата 004E3ED0 - функция, возвращающая тип поднимаемого в результате некромантии существа. Ня, жезл переработки трупов в огненных элементалей! И прочие милые артефакты на тему некромантии по-кригански и по-варлочьи.
-------------------- ![]() |
|
|
|
19 Jan 2011, 22:47
(Сообщение отредактировал feanor - 20 Jan 2011, 00:17)
Сообщение
#72
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
sub_757045 - проверки на прямые атаки воговских существ: душепийство Привидений и миролюбивость Эмиссаров.
sub_75E762 - заклинания, лежащие на воговских существах. sub_7673AD - в начале функции дни полнолуния для Оборотней sub_75C695 - хук на опыт башен, на палатку помощи, на Эмиссаров, на Колдуний и Пожаров. sub_5BFA00 - количество денег, зарабатываемое городом |
|
|
|
23 Jan 2011, 22:52
(Сообщение отредактировал feanor - 23 Jan 2011, 23:08)
Сообщение
#73
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
688f04 - таблица ресурсов, приносимых хранилищем. 7*4 байт для каждого города.
|
|
|
|
20 Feb 2011, 15:07
(Сообщение отредактировал MasterOfPuppets - 24 Mar 2011, 15:15)
Сообщение
#74
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2378 раз |
63E510h – таблица процентных модификаторов затрат очков хода при передвижении по разным почвам. Массив integer-ов, по 4 значения в зависимости от уровня развития Поиска Пути. По порядку:
00 Dirt 01 Sand 02 Grass 03 Snow 04 Swamp 05 Rough 06 Underground 07 Lava 08 Water 09 Rock/No road 10 Dirt 11 Gravel 12 Cobblestone Следующие за таблицей четыре значения используются для доступа к модификаторам дорог. -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
28 Feb 2011, 15:15
(Сообщение отредактировал MasterOfPuppets - 24 Mar 2011, 15:16)
Сообщение
#75
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2378 раз |
Настройки игры
Все адреса в порядке возрастания. Все значения байтовые, но растянуты до двордов. Если опция не комментируется, то статус для неё: 1 - да, 0 - нет 6987A8 - скорость врага (2-5) 6987AC - скорость героя (1-4) 6987B0h - громкость mp3 (0-9) 6987B4h, 6987BCh - громкость wav-звуков (0-9). Почему-то дублируется, хотя на громкость влияет только 6987B4h. 6987C4h - показ маршрута 6987C8h - запрос об окончании хода 6987CCh - быстрая битва 6987D0h - видеосубтитры 6987D4h - контуры гор. зданий 6987D8h - анимация Книги Заклинаний 6987DCh - скорость прокрутки карты (0-2) <<< Настройки автобоя 6987E4h - существа 6987E8h - заклинания 6987ECh - катапульта 6987F0h - баллиста 6987F4h - сан. палатка / >>> 6987F8 - качество видео (0 - низкое, 1 - высокое) <<< Опции битвы 69880Ch - показать сетку? 698810h - тень курсора 698814h - Тень перемещения 698818h - информация об отряде (0 - нет, 1 - вся статистика, 2 - только заклинания) 69883Ch - скорость боевой анимации (0-2) / >>> -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
02 Mar 2011, 23:56
Сообщение
#76
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20610 раз |
Генератор случайного монстра
sub_4C8F80(void *this, int level_from, int level_start); Используется для беженцев и для замены случайных монстров на карте. this = [699538] |
|
|
|
13 Mar 2011, 14:41
(Сообщение отредактировал Дьяк - 13 Mar 2011, 14:42)
Сообщение
#77
|
|
|
Member Сообщений: 97 Спасибо сказали: 80 раз |
Правка генератора случайных монстров при старте карты. Позволяет генерировать новых и воговских монстров на карте без вогификации. Выдрал из наработок по WoG 359
// врезка Fix генератора {0x54110F, 0x0, DP(Hook54110F)}, // Diakon // настройка генератора карт (генерируем новых и ВоГовских монстров) //MGENERATOR mGenerator [MONNUM]; int gmon; int nMon; int NotCheck = 0x541137; int Check = 0x541116; __declspec (naked) void Hook54110F(){ __asm pushad; __asm mov gmon, ebx; __asm mov eax, dword ptr [edi]; __asm mov nMon, eax; if (nMon == -1){ __asm popad; __asm jmp NotCheck; } __asm popad; __asm lea eax, dword ptr [esi + esi*4]; __asm jmp Check; } // врезка FixGeneratora {(Byte*)&JMP, (Byte*)0x54110F, 1}, //Diakon {(Byte*)&PSUB, (Byte*)(0x541013+2), 4}, //Diakon {(Byte*)&MSUB, (Byte*)(0x54106B+2), 4}, //Diakon {(Byte*)&MSUB, (Byte*)(0x54109C+3), 4}, //Diakon {(Byte*)&MSUB, (Byte*)(0x5410E1+3), 4}, //Diakon {(Byte*)&MSUB, (Byte*)(0x541174+3), 4}, //Diakon {(Byte*)&GENMONNUM, (Byte*)(0x541063+1), 4}, //Diakon {(Byte*)&GENMONNUM, (Byte*)(0x5410B3+1), 4}, //Diakon {(Byte*)&GENMON, (Byte*)(0x541159+1), 4}, //Diakon int JMP = 0xE9; //Diakon int PSUB = 0x324; //Diakon int MSUB = -804; // Diakon int GENMONNUM = 0xC5; - изменяется в зависимости от кол-ва монстров. негенерируемых монстров не прописываем в текстовике. Не помню текстовик для рандомной карты. Если кто не знает - напишу. Лень копаться. int GENMON = GENMONNUM -1; |
|
|
|
05 Apr 2011, 14:21
Сообщение
#78
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2378 раз |
6436A8h - родные почвы городов.
63D0A8h - таблица позиций, по которым расставляются существа в обычном бою. 63D0E0h - таблица позиций, по которым расставляются существа при грабеже банка. ERM: !!UN:C4600476/2/37008; - любая битва будет происходить как в банке !!UN:C4600637/4/95721; - дополнительно к этому, уберёт с поля боя машины !!UN:C4600476/2/5236 C4600637/4/24413455; - восстановит стандартный код -------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
01 May 2011, 00:34
Сообщение
#79
|
|
![]() The Unicode Man Сообщений: 993 Спасибо сказали: 6 раз |
Товарищи! Ниже есть тема по обсуждению инженерного анализа! Блин, теперь стали сам инженерный анализ в ту тему писать. Я сначала хотел покопировать куски оттуда сюда, но, добравшись до последней страницы, понял, что лучше просто отослать читателя к той теме куда-то в районе 120-го поста и позже.
-------------------- |
|
|
|
07 May 2011, 13:34
Сообщение
#80
|
|
![]() Анти-Всë Сообщений: 2 989 Спасибо сказали: 2378 раз |
sub_617F94 - возможно, самая частовстречающаяся функция (451 вызов). Округляет float ST0 в меньшую сторону и возвращает результат в виде integer.
-------------------- Circle of destruction, hammer comes crushing
Powerhouse of energy Whipping up a fury, dominating flurry We create the battery |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 14 April 2026 - 14:09 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|