feanor
20 Nov 2013, 20:23
Цитата
Надо только найти, как хук на триггер !?ОВ поставить.
Вогосорцы же, не?
Ну или поставить бряк на CallERM и когда поймается нужный номер триггера, искать в стеке нужное место.
kostya76
20 Nov 2013, 20:40
Цитата(feanor @ 20 Nov 2013, 22:23)

Вогосорцы же, не?
Все правильно, я же и говорю найти нужно))
Berserker
22 Nov 2013, 21:47
Цитата
У меня они появляются во вкладке сокровища и только как декоративные объекты, иначе исчезают из редактора. Это так и должно быть?
И еще вопрос. Пытался расположить объекты в zeobjts.txt по своему усмотрению (напр. все зимние в снежный ландшафт - не получилось, нахожу их где угодно, но не в нужной вкладке. Как это можно исправить?
Решите второй вопрос — заработает и первый. Я делал для примера, ставил разное расположение и всё было нормально в редакторе. Объекты добавлялись в конец нужной секции или, если такие уже существовали, заменяли оригинал.
Вопрос по
нестандартным диалогам DL В TXT координаты отрисовки задаются только статически.
Код
3: номер x позиции - X позиция от верхнего левого угла (-1=центр экрана)
4: номер y позиции - Y позиция от верхнего левого угла (-1=центр экрана)
А возможно ли как-то их двигать динамически в процессе игры?
Или как найти указатель на:
Код
"1: знак '#' - означает начало нового шаблона диалога"
Как через ЭРУ считать значение в ECX с определенного адреса? Вроде как там хранится указатель.
feanor
24 Nov 2013, 16:33
Только через постановку хука в длл.
Berserker
25 Nov 2013, 00:00
igrik, ты на каком-нибудь ЯП пишешь, пусть даже скриптовом?
tolich
25 Nov 2013, 07:50
язык программирования
Berserker
25 Nov 2013, 19:38
Пробовал DL:A?
52 – установить положение по X (без перерисовки) (число/числовая переменная)
53 – установить положение по Y (без перерисовки) (число/числовая переменная)
hippocamus
30 Nov 2013, 17:29
Нигде не могу найти emerald.dll от Феанора. Никто не подскажет? И нельзя ли им заменить ТПМ-овский? ТПМ работать со своим не хочет вообще.
Господин Уэф
30 Nov 2013, 17:32
Не помню, насколько он свежий, но вот
http://rusfolder.com/38989637
hippocamus
04 Dec 2013, 21:51
Интересует возможность снимать книгу магии и ставить вместо неё стихийные книги (как вариант, другие книги, вроде дающих определённый уровень магии, или тематические подборки, вроде Книги смерти, Книги разума).
Где-то в Вог видел возможность ставить и передавать книгу с уже установленным набором заклинаний, но не помню, каким образом там хранился список заклинаний. Для стихийных же и указанных мной память о заклинаниях не нужна, т.к. они фиксированы.
Также - возможность ставить свиток в этот слот, чтобы этот свиток давал в бою единственное доступное заклинание (на карте пусть заклы читаются и из слотов "разное", т.к. их всё равно можно переставить, а в бою не переставишь. Зато закл будет доступен без книги.
feanor
04 Dec 2013, 21:56
Замаешься.
feanor
04 Dec 2013, 22:23
Для начала нужно обеспечить всем книгам заклинаний уникальность. Это можно сделать через кастомдата, но её еще надо заполнять. Ну ладно, в момент надевания можно выдавать им уникальный ID: хук на GiveArtifact, думаю, поможет.
Потом нужно как-то связать массив заклинаний с ID книги. Либо через хук на GiveSpell писать не только в структуру героя, но и в допмассив для книг, либо при снятии книги запоминать все заклинания скопом - и делать сопутствующие действия при одевании героя..в общем, довольно криво и чревато побочками.
Ну и напоследок - сделать возможность каста при отсутствии обычной книги, но наличии стихийных книг.
Цитата(feanor @ 04 Dec 2013, 22:56)

Замаешься.
Почему? Я делал похожее:
Код
!#UN:A47/2/14; [карты пророчества надеваются в слот Книги]
и по !?AE меняешь состав заклинаний. Или я не понял вопроса?
Цитата(feanor @ 04 Dec 2013, 23:23)

Для начала нужно обеспечить всем книгам заклинаний уникальность.
Эм.. задача вроде так не стоит. Разделять ведь надо обычную книжку магии и другие "тематические" артефакты. А две разных книжки даже отличать-то в рюкзаке проблемно будет.
Hippo, или ты хотел иметь возможность и между героями передавать заклинания вместе с книжкой?
feanor
04 Dec 2013, 22:33
Одеваем карты, снимаем книгу, получаем спецзаклинание.
Выбрасываем книгу леваку, покупаем новую книгу в гильдии, одеваем - опа, заклинания те же самые что и в старой. Нехорошо.
Цитата(feanor @ 04 Dec 2013, 23:23)

Ну и напоследок - сделать возможность каста при отсутствии обычной книги, но наличии стихийных книг.
У меня с картами пророчества в слоте "книга" в бою все без проблем кастовалось. Тип артефакта видимо не проверяется.
feanor
04 Dec 2013, 22:37
Цитата
А две разных книжки даже отличать-то в рюкзаке проблемно будет.
Ну, в структуре артефакта на кукле есть специальное поле, дающее возможность отличать
конкретный артефакт от всех прочих его же типа.
Свитки ведь отличаются друг от друга, хоть и имеют один и тот же номер.
Цитата(feanor @ 04 Dec 2013, 23:33)

Одеваем карты, снимаем книгу, получаем спецзаклинание.
Выбрасываем книгу леваку, покупаем новую книгу в гильдии, одеваем - опа, заклинания те же самые что и в старой. Нехорошо.
Опять же, смотря, чего нужно достичь...
Цитата(feanor @ 04 Dec 2013, 23:37)

Цитата
А две разных книжки даже отличать-то в рюкзаке проблемно будет.
Ну, в структуре артефакта на кукле есть специальное поле, дающее возможность отличать
конкретный артефакт от всех прочих его же типа.
Свитки ведь отличаются друг от друга, хоть и имеют один и тот же номер.
Всегда считал, что артефакты обезличены. В т.ч. и что свитки с одним и тем же заклинанием имеют один и тот же номер (1000+).
Тебе виднее конечно, это у меня инструментарий erm'ом ограничен... А есть пример, как (на ерм) можно использовать id конкретного артефакта?
feanor
04 Dec 2013, 23:16
Вот, по ЛКМ на артефакту на кукле можно посмотреть номер артефакта и его данные.
Код
ZVSE
!?CM2;
!!CM:I?y1 F?y2;
!!if&y1>1/y1<21/y2=512:;
!!VRy3:Sy1 -2; //y3 - номер слота
!!HE-1:N?y4; //y4 - номер героя
!!VRy5:Sy3 *8;
!!UN:C6919480/4/?y10;
!!VRy11:Sy4 *1170 +305 +y5 +136736 +y10;
!!UN:Cy11/4/?y6;
!!VRy11:Sy4 *1170 +301 +y5 +136736 +y10;
!!UN:Cy11/4/?y7;
!!IF:M0/4/^Тип артефакта: %Y7 Доп.информация: %Y6^;
!!el:;
!!en:;
Задать, соответственно ../y6; и ../y7;
У свитков номер = 1, доп.информация = номеру заклинания; у прочих артефактов в доп.информации по умолчанию лежит -1.
Если изменить этой функцией номер артефакта (или выставить -1, убрав его со стека, или, наоборот, создать артефакт из ничего) - артефакт сменится, но соответствующие функции (GiveArtifact/TakeArtifact и связанные с ними ERM-триггеры) запущены не будут. Т.е., скажем, бонус первичных навыков не снимется/новый не начислится.
Для рюкзака примерно так же, только вместо 301/305 - 468/472, и после уничтожения артефакта могут быть проблемы с прокруткой: количество артефактов в рюкзаке хранится отдельно.
Еще что-то совсем черномагическое есть здесь:
http://forum.df2.ru/index.php?showtopic=6737
hippocamus
05 Dec 2013, 13:25
Цитата(Algor @ 04 Dec 2013, 22:31)

Hippo, или ты хотел иметь возможность и между героями передавать заклинания вместе с книжкой?
Ну, такое я как раз где-то видел. Да, и это было бы неплохо, хотя не принципиально (рукописную книгу другой герой может не разобрать, в отличие от печатных)
feanor
20 Dec 2013, 21:56
Я в упор не помню, спрашивал я или нет..
Кто-то составлял альтернативные концепции командиров, помимо стандартной воговской, оруженосцев и Iv'овских питомцев?
Цитата(feanor @ 20 Dec 2013, 22:56)

Я в упор не помню, спрашивал я или нет..
Кто-то составлял альтернативные концепции командиров, помимо стандартной воговской и Iv'овских питомцев?
У меня их две было: питомцы и воплощение героя на поле боя
Никто не знает, как отключить желтую обводку после клика ЛКМ в слот существа в окне города и в окне встречи героев?
P.S. feanor, если не сложно подскажи как выловить нажаты ли Ctrl или Shift одновременно с ЛКМ через "GetKeyState" в user32.dll
Berserker
24 Dec 2013, 18:05
Два последовательных вызова. VK_SHIFT, VK_CONTROL. Проверка обоих результатов. Есть ещё функция, возвращающая массив всех статусов клавиш. GetKeyboardState.
Цитата(Iv @ 20 Dec 2013, 23:06)

У меня их две было: питомцы и воплощение героя на поле боя
А где можно глянуть, прошу прощения за нескромный вопрос?
Цитата(Orzie @ 24 Dec 2013, 19:18)

Цитата(Iv @ 20 Dec 2013, 23:06)

У меня их две было: питомцы и воплощение героя на поле боя
А где можно глянуть, прошу прощения за нескромный вопрос?
Тут. В первом посте, в конце
kostya76
28 Dec 2013, 10:49
Как узнать, на какое количество стэков поделятся нейтралы в битве в зависимости от армии текущего героя? Нужен адрес функции, которая это вычисляет.
feanor
06 Jan 2014, 18:45
Слушайте, есть способ подгрузить патч/плагин в редактор без его правки?
Помнится, то ли Эра, то ли Сергроевский патч такое позволяли.
feanor
06 Jan 2014, 20:05
Вопрос снят.
Berserker
06 Jan 2014, 22:37
Из папки EraEditor подгружаются модули как из EraPlugins, включая заплатки. Правда, событий нет.
kostya76
07 Jan 2014, 23:12
Пробовал кто-нибудь изменять зону тактического перестроения перед битвой? Насколько понимаю, в этой функции вычисляется:
char __thiscall FillAccessableSquares(int this, _CombatMonster_ *MonStr, int side, signed int speedMayBe0, signed int tactics, signed int speed)
{
int v6; // edi@1
signed int v7; // eax@4
_CombatMonster_ *v8; // esi@4
signed int v9; // ebx@10
signed int v10; // edi@10
int v11; // eax@11
int v12; // ecx@13
int v13; // esi@20
int v14; // esi@20
char v15; // sf@20
_CombatMan_ *v16; // eax@30
int v17; // ebx@33
char *i; // edi@33
int v20; // [sp+Ch] [bp-4h]@1
int v21; // [sp+20h] [bp+10h]@10
v6 = this;
v20 = this;
if ( !*(_DWORD *)(this + 36) )
sub_004B11C0(this);
if ( (_BYTE)tactics )
{
v8 = MonStr;
v7 = 1000;
speed = 1000;
}
else
{
v8 = MonStr;
if ( speed < 0 )
speed = combatMonster_GetSpeed(MonStr);
if ( MonStr->SpellDuration[72] )
v7 = 0;
else
v7 = speedMayBe0;
}
sub_004B3160((void *)v6, v8, side, -1, tactics, v7, speed);
v10 = 0;
v9 = 0;
v21 = 0;
do
{
v11 = *(_DWORD *)(v20 + 36);
if ( v11 )
v11 += v10;
v12 = *(_DWORD *)(v11 + 4);
if ( v12 & 1 )
{
if ( *(_WORD *)(v11 + 24) <= speed )
{
if ( !(v12 & 0xFC000000) )
{
if ( !(_BYTE)tactics || !CombatMan_IsSquareInTacticsZone(pCombatManager, side, v9) )
{
*(&pCombatManager->Squares[0].AvailableForLeftSquare + v21) = 1;
if ( v8->Flags & 1 )
{
if ( !(((unsigned int)v8->Flags >> 6) & 1) )
{
v14 = (v8->Square2Orientation != 0 ? 2 : 0) - 1;
v15 = v9 + v14 < 0;
v13 = v9 + v14;
if ( v15 || v13 >= 187 || v13 % 17 && v13 % 17 != 16 )
{
if ( (_BYTE)tactics && CombatMan_IsSquareInTacticsZone(pCombatManager, side, v13) )
*(&pCombatManager->Squares[0].AvailableForLeftSquare + v21) = 0;
else
pCombatManager->Squares[v13].AvailableForRightSquare = 1;
}
v8 = MonStr;
}
}
}
}
}
}
v10 += 30;
++v9;
v21 += 112;
}
while ( v10 < 5610 );
LOBYTE(v16) = combatMonster_CanCreatureShoot(v8, 0);
if ( (_BYTE)v16 )
{
LOBYTE(v16) = tactics;
if ( !(_BYTE)tactics )
{
if ( v8->Type != 145 )
{
v17 = 0;
v16 = pCombatManager;
for ( i = (char *)&pCombatManager->Monsters[21 * (1 - side)]; v17 < *(&v16->HeroAMonCount + 1 - side); i += 1352 )
{
if ( !((*((_DWORD *)i + 33) >> 21) & 1) )
{
if ( *((_DWORD *)i + 13) != 149 )
{
v16->Squares[*((_DWORD *)i + 14)].AvailableForLeftSquare = 1;
if ( i[132] & 1 )
pCombatManager->Squares[combatMonster_GetMonSecondSquarePosition((_CombatMonster_ *)i)].AvailableForLeftSquare = 1;
v16 = pCombatManager;
}
}
++v17;
}
}
}
}
return (char)v16;}
Тень изменить легко ( вычисляется функцией CombatMan_IsSquareInTacticsZone), а вот саму доступность как изменять?
feanor
07 Jan 2014, 23:28
Дык, очевидно ж.
Код
//----- (00475D20) --------------------------------------------------------
char __thiscall CombatMan_IsSquareInTacticsZone(_CombatMan_ *this, int side, signed int squareId)
{
bool v3; // eax@2
if ( side )
v3 = squareId % 17 < 2 * this->TacticsDifference + 15;
else
LOBYTE(v3) = squareId % 17 > 2 * this->TacticsDifference + 1;
return v3;
}
kostya76
08 Jan 2014, 15:51
Цитата(feanor @ 08 Jan 2014, 01:28)

Дык, очевидно ж.
Я так же думал поначалу. При изменении результата вычисления данной функции меняется только область отображения затемненными клетками. При этом доступность клеток для перемещения стэков остается прежней.
Точнее, для возможности перемещения на определенную клетку затенение необходимо, но недостаточно.
Хотя на автобое стэки перемещаются таки на затемненные клетки. Причем, если снова вернуть расстановку в ручной режим, то тень вообще пропадает.
Нашел. Нужно увеличивать значение уровня тактики в структуре this->TacticsDifference после того, как туда будет помещено реальное значение. Если поставить 8, например, то перекрывается все поле боя, и доступность будет определяться исходя из результатов вычисления функции CombatMan_IsSquareInTacticsZone, либо их подменой.
Vadim_FVE
15 Jan 2014, 09:35
Подскажите, что нужно сделать, чтобы существо на поле боя перемещалась телепортом (по подобию дьяволов)?
Я для теста брал копейщика, менял ему деф и озвучку на деф и озвучку дьявола, в CrAnim.txt строку копейщика заменял на строку дьявола. Но при перемещении вместо телепортации такой дьявол медленно перемещался с мигающим кадром и каким-то пищанием.
feanor
15 Jan 2014, 17:07
А полет выставлял?
Axolotl
15 Jan 2014, 17:57
Еще, работает просто существо с полетом и то ли просто пустым кадром (т.е. просто залитый цветом прозрачности) вместо анимации движения, то ли вообще можно не вставлять никакого.
Или есть еще какие-то особенности у телепортации?
hippocamus
15 Jan 2014, 18:28
Всё-таки, мне кажется, игра различает телепортеров и летунов. Не помню только в чём.
Vadim_FVE
15 Jan 2014, 18:47
Проверял, у обычных дьяволов во время боя флаги = 65808 = 16 (Живое существо) + 256(Король 2) + 65536 (Враг не отвечает), полета нет, но это им не мешает перемахивать через стену.
Замененный копейщик на дьвола имеет теже флаги, но при этом не может перемахнуть через стену.
Видимо за телепортацию что-то еще отвечает, помимо флагов.
hippocamus
15 Jan 2014, 19:38
Ну копейшику-то полёт поставь. А так - мне кажется, в экзешник зашита проверка на принадлежность к подмножеству (в оригинале это улучшенный и неулучшенный дьяволы; у нас в ХотЕ ещё нимфы прибавились)
Спроси у Сава, он с этим разбирался. У нас вроде сначала у Нимф была имитация телепорта, а потом сделали настоящий.
feanor
15 Jan 2014, 19:44
Я знаю, что для телепорта нужны спецправки для озвучки. А больше, вроде, ничо.
navigator777
20 Jan 2014, 21:53
Подскажите в каком скрипте или где отредактировать чтоб убрать или уменьшить умение у Чудище-Привидение "Игнорирует защиту".
feanor
20 Jan 2014, 22:24
Для Эры
Код
!?PI;
!!UN:C7722324/4/666; zogryzanie zoschischennyh zohaval zotona
!?GM0;
!!UN:C7722324/4/666; zogryzanie zoschischennyh zohaval zotona
Vadim_FVE
21 Jan 2014, 07:14
Как-то можно с помощью UN:C подменить картинку существа в окне героя?
feanor
21 Jan 2014, 18:12
Нет.
hippocamus
21 Jan 2014, 19:09
Ну как это - нет? Можно.
Другое дело, что никто не написал кода для этого, и поэтому не можем помочь.
А так - с помощью UN:C можно хоть флешку отформатировать.
feanor
21 Jan 2014, 19:50
Хорошо, можно, но все равно нельзя.
А другим каким-либо способом в рамках Эры?
feanor
21 Jan 2014, 20:23
Готовых нету в любом случае.
Да и незачем оно, как по мне.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.