Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Артефакты
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды > Скрипты
Страницы: 1, 2
MasterOfPuppets
Цитата(feanor @ 25 Mar 2010, 13:51)
Тьфу, и ведь почти все нашёл sad.gif теперь придется что нить другое копать для восстановления душевного равновесия gigi.gif.

Впрочем, огромное спасибо, если надо будет что в длл зашить - обращайся biggrin.gif

Несомненно. yes.gif Хотя охота было бы самому научиться их писать, а то у меня даже нет понятия, в чём это делать, вернее - компилировать.
Дьяк
Цитата(feanor @ 25 Mar 2010, 20:31)
Возможно, я криворук и ФИО мои - Бхагаван Рабиндранатыч Шридрахан-Прашантов, но при расширении количества читаемых артефактов из текстовика необходимо, чтобы все они там были. Иначе работает очень нестабильно. Оно так и задумано?)
Придется, видимо, еще и количество строк из текстовиков выдирать
Хотя какого чёрта? До текстовиков в лоде один хрен не добраться.
Хотя какого чёрта? Просплюсь и сделаю конфиг. Или еще что-нить придумаю

Есть такая теория не подтвержденная на артах, но проверенная на монстрах, что увеличение читаемых строк из файла - это не полное решение, т.к. память уже выделена, и при чтении большего количества строк затирается соседняя память, либо чтение нового текстовика затрет новые строки из твоего текстовика. Оптимальным я считаю можно самому выделить память под нужное количество, скопировать то что уже прочитано, а потом заполнить самому новые строки читая их из любого текстовика, можно даже из того же самого. ИМХО.
feanor
2МоР: я все хочу написать ман по написанию дллок с нуля (начиная с установки кодблокса и заканчивая описанием какой-нить простенькой). И всё лень.

2Дьяк. Дык, я и делаю новую таблицу указателей, маллочу всё элементы и переписываю указатели на неё. Копировать, кста, не обязательно - на момент загрузки длл текстовики еще не прочитаны.
feanor
Вроде бы расширил кейсы. Некрасиво, но расширил. Теперь в таблице типов типы 0x80 - 0xFF дают заклинания 0-127. Планирую когда-нить припаять еще "все заклинания 1-2-3-4 уровней" и просто "все заклинания".

Код
char  artspelltable[ART_NUM]; //
int artspellswitch[256];

char _magic[22] = {0x6A,0x01,0x6A,0x09, 0x8D,0x4D,0xE4,0xB8,0xA0,0x67,0x4E,0x00,0xFF,0xD0,0xB8,0x9D,0x97,0x4D,0x00,0xFF,
0xE0,0x90};
//машкод кейса, ответственного за добавление заклинания артефакту.
char new_cases[22*128];
//коды для новых кейсов

...
//новые кейсы
               memset(new_cases, 0x90, 22*128);
               for(unsigned char i=0; i!=128; i++)
               {
                   memcpy(new_cases+i*22,_magic,22);
                   new_cases[i*22+3]=i;
                   artspellswitch[i+0x80]=i*22+(int)(new_cases);
               }
               memcpy((void*)artspellswitch,(void*)0x4D97DC,4*9);
               *(int*)0x4D95F2 = (int)artspellswitch;
feanor
Только хотел выложить полный код и длл - наткнулся на баг. Четыре строки
*(int*)0x7059E2 = (int)(arteventtable);
*(int*)0x705A68 = (int)(arteventtable);
*(int*)0x705FC2 = (int)(arteventtable);
*(int*)0x70613B = (int)(arteventtable);
гробят воговские !!CA и !!CH. Вероятно, виновата только одна из них - но мне влом думать, какая.

Добавлено ([mergetime]1269706512[/mergetime]):
Впрочем..
Код+сама длл.

Добавлено ([mergetime]1269706921[/mergetime]):
Тьфу ж ты блин, совсем забыл о клятом Грохоте Титана, который угробил для тестов и забыл вернуть на место sad.gif
feanor
emerald-alpha.rar
относительно работает, если не смотреть на кривость обвязки (самих артефактов, описаний и пурги из юнитсхинтов в конфиге)

В emerald.cfg хранится количество читаемых строк из artraits и artevents.
Привязка заклятий и бонусов к артефактами пока осуществляется в самой длл - было лень что-либо придумывать.
MasterOfPuppets
Надо было предупредить людей с момента регистрации, что доверять мне можно, а проверять - нужно. gigi.gif
Цитата
Формат: кол-во артов*4+2.

Опечатался. На самом деле - (кол-во артов+2)*4 или кол-во артов*4+8.
Возможно, потому у тебя и некоторые глюки.
feanor
Не, этот баг я словил вчера (не читалась последняя строка из текстовиков).
SAG19330184
feanor, будь умницей, напиши пожалуйста строчку по виртуал-паскальному:
extern "C" __stdcall BOOL DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
feanor
Это точка входа в длл. Основная процедура в паскале, проще говоря.
feanor
http://slil.ru/29104939

собственно, кой-что докрутил. Мелочи в основном.
_________readme.txt__________
emerald.dll -- 0.03

Позволяет использовать артефакты с номерами, большими 170 (до 5000. Кому надо больше - ну..можете перекомпилировать. Извращенцы!11)
Позволяет привязывать к ним заклятья и бонусы первичных навыков.

В архиве есть состряпанный на горячую руку пример.

Установка:
1. Убедитесь, что у вас установлена Era. Предпочтительно - версии не ниже 1.6.
2. Положите emerald.dll в папку плагинов Эры (/EraPlugins/, как правило) и emerald.cfg в папку /Data/. Если вы хотите проверить работоспособность - положите h3wog.lod с расширенным artifact.def в /Data/
3. Запишите дополнительные строки в файлы описания артефактов (artraits и artevents)
4. Запишите их число в emerald.cfg. Охтунг! Если строк будет меньше, чем записано в конфиге - игра просто не запустится.
5. njoy!

нидваниполтора. О привязке заклинаний и первичных бонусов.
DLL экспортирует функцию ExtArtProperties(int num, char spell, char att, char def, char knw, char spp)
num - номер артефакта;
spell - номер заклинания в спецтаблице (для привязки какого-то конкретного заклинания используйте ID = номер заклинания + 128)
att, def, knw, spp - значения первичных навыков
feanor
После привязки заклятья к арту потребуется включить его через UN:A<номер>/8/1;

Второй параметр для ExtArtProperties, окромя 128-255 (что? в Героях нет 127 заклинаний? это вы так думаете.):
Цитата(Master Of Puppets @ 03 Feb 2010, 13:40)
Типы значений в таблице:
0 - дать все заклинания Огня
1 - дать все заклинания Воздуха
2 - дать все заклинания Воды
3 - дать все заклинания Земли
4 - дать заклинания "Вызвать Корабль" и "затопить Корабль"
5 - дать все заклинания 5-го уровня
6 - Дать "Армагеддон"
7 - Дать "Гром Титанов"
8 - ничего

__________________________
Кстати вот да.
Гриты и копирайты:

сабж может быть использован в любом моде, целиком или по частям. Для Мутномода - скидки.
Огромнейший респект Дьякону, major'у и Master of Puppets (в порядке алфавита biggrin.gif ), компиляцией трудов которых, по сути, сей сабж и является.
feanor
Таблица запрета артефактов на карте - [699538h]+4E224h.
Алсо, что-то там иногда мелькает с [699538h]+4E2B4h.
MasterOfPuppets
Цитата(feanor @ 09 May 2010, 21:17)
до 5000. Кому надо больше - ну..можете перекомпилировать. Извращенцы!11)

Кхм...
Цитата(ERM-help)
Свитки имеют номер артефакта 1001+s, где s - номер заклинания

В дополнение: Книга Заклинаний имеет номер 1000 в определённых действиях.
Я поэтому и остановился на лимите в 1000 (0-999) артов.
Но это так, пустяки. Всё равно столько артов когда ещё наделают...
feanor
угу, я знаю. Только мне тоже представить ситуацию с >1000 артов в одном моде было сложно.

Хотя не невозможно. Скажем, генерацию системы вещей аля ММ "в лоб"
MasterOfPuppets
Последние штрихи:

ВСЕ реальные указатели на таблицу артефактов:

44CB32
44CCDF +28
44CCFA +29
44CD1E
44CD6C
660B68
716F8D +24
716F9E +24
716FAE +20
716FBF +20
717117 +20
717146 +24
754A42

Считывание в таблицу признака GivesSpell:
44CCE6 mov eax,L0063B998; <- адрес таблицы, в которой находятся номера артефактов, дающих заклинания.
44CCF3 cmp eax,L0063B9BC; <- адрес, на котором заканчивается считывание.
wtfwtf
А перезалить длл-ку может кто-нибудь?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.