просто создай свой скрипт и все. Вот например
HE:R2/$
Установить/проверить/получить пол героя
$ = 0 – мужчина
$ = 1 – женщина
Код
ZVSE
!#HE27:R2/0; Джем теперь мужик, вжик его...
!#HE28:R2/1; а Мальком - девушка
upd: затупил... поправил
feanor
15 Feb 2015, 20:59
Эм, в коде-то тоже !!HE:R2 )
hippocamus
15 Feb 2015, 21:34
С бинарником надёжнее, и будет работать в СОД+ХД
Но если цель - Эра - тогда нет смысла не заморочиться с ЕРМ.
AleXeLix
15 Feb 2015, 23:48
В прирученных нейтралах Хотовского сатира бы в оплот.
hippocamus
16 Feb 2015, 00:01
AleXeLix
Но он-то хотовский! А плагин создавался под СОД.
Да, его в Оплот хорошо бы - но это делается уже совсем другими инструментами!
Richter
09 Nov 2015, 13:16
Если кто знает, поделитесь живыми ссылками на "небольшие моды".
feanor
10 Nov 2015, 17:07
Шо, опять?(с)
храните в облаке, говорили они..
"Чем больше зеркал, тем лучше", говорили они. "Закрепите тему хостинга модов", говорили они.
Это лишь начало, ребят.
Richter
20 Nov 2015, 10:04
Добавил существ с помощью amethyst.dll, но... нужно чтобы они колдовали заклинания. В файле конфигурации не понятно какие значения нужны. Вылет за вылетом, при попытке колдовать. Всё заполнено правильно, в том числе добавлено !!MA:B../..;
Кто нибудь знает как сделать нового монстра кастером? ...без глюков)
А анимация кастования в дефе монстра есть?
Richter
20 Nov 2015, 10:48
Цитата(Iv @ 20 Nov 2015, 12:26)

А анимация кастования в дефе монстра есть?
Да, конечно.
В анимации выстрела должно быть не меньше 9 кадров, иначе появляются вылеты. Возмозможно такая же колбаса и с анимацией каста
Richter
21 Nov 2015, 13:31
Цитата(igrik @ 20 Nov 2015, 13:08)

В анимации выстрела должно быть не меньше 9 кадров, иначе появляются вылеты. Возмозможно такая же колбаса и с анимацией каста
Не помогает 9,10,15 кадров. Вылет без "объяснений" при наводке курсора на существо.
Строки в конфиге:
Spell 1=38.
Spell 2=38.
Spell 3=38.
(38 - воскрешение, с другими номера также не работает)
feanor
21 Nov 2015, 14:00
Номера трындец неправильные.
Это индексы в таблицах.
MasterOfPuppets
14 Aug 2016, 15:48
Цитата(feanor @ 14 Aug 2016, 00:56)

Анимированные существа на поле боя (порт из WoG 3.59)Автор: sergroj
Портировано: feanor в рамках проекта TSW; разрешение автора получено.
Формат: папка с модом.
InstantAnimation.zip, 7 КбСкорости анимаций настраиваются индивидуально для каждого типа существ в файле anims.ini; существующие параметры взяты из блока monanim0 хотовского HotA.dat (версия 1.3.4), для вог-монстров взято по подобию.
Помимо этого, есть глобальный множитель, позволяющий ускорить или замедлить анимацию для всех монстров без пересчета всех параметров.
До чего сейчас дошёл формат плагинов, что эта библиотека у меня вообще не грузится простым LoadLibrary?
feanor
14 Aug 2016, 16:34
MasterOfPuppets
14 Aug 2016, 16:43
Цитата(feanor @ 14 Aug 2016, 16:34)

Она эровское апи пытается подтянуть?
Да хрен его знает. Я переименовал в .dll, включил у себя поддержку плагинов, но в списке модулей оно так и не появилось. При том, что любые левые библиотеки загружаются, даже po.dll, которая, правда, бросает сообщение об отсутствии ЭРЫ.
Цитата(feanor @ 14 Aug 2016, 16:34)

Спасибо, помогло! К счастью, ковыряний в тех местах в моём exe нет и плагин спокойно работает.
Цитата(MoP)
... и плагин спокойно работает.
Проверь, есть ли анимация полета снаряда при стрельбе.
Просто в SoDe с подключением данного плагина через HD - нет.
MasterOfPuppets
18 Aug 2016, 14:36
Проверил. Есть.
MasterOfPuppets
24 Nov 2016, 16:10
Цитата(feanor @ 14 Aug 2016, 00:56)

Анимированные существа на поле боя (порт из WoG 3.59)InstantAnimation.zip, 7 Кб А почему существа >255 игнорируются?
feanor
24 Nov 2016, 17:20
int creature_anim_coeffs[256];
Цитата(MasterOfPuppets @ 24 Nov 2016, 16:10)

Цитата(feanor @ 14 Aug 2016, 00:56)

Анимированные существа на поле боя (порт из WoG 3.59)InstantAnimation.zip, 7 Кб А почему существа >255 игнорируются?
MoP, если тебе нужна перекомпилированная dll на 999 монстров, то вот она (скачать).
Я изменил 256->999 в трех местах. Там инты, поэтому думаю так можно было сделать.upd: ой, там же эровская апи подтягивается. Блин.
Цитата(igrik @ 09 Aug 2017, 17:47)

А где сама DLL?
Приаттачил бы, если б была такая возможность у форума. А где-то там в сети я файлы не храню - дурная это мода, и хорошим она для людей не кончится (как и многие другие тенденции IT последних лет).
По запросу вышлю, если кому-то нужно.
fireman
21 Aug 2017, 23:09
Ben, закинь в гугл/яндекс диск в ближайшие лет 5 не умрёт точно
feanor
23 Aug 2017, 19:17
Цитата
Ben, закинь в гугл/яндекс диск в ближайшие лет 5 не умрёт точно
Да-да, я тож самое думал о дропбоксе
hippocamus
23 Aug 2017, 19:52
Ну, так дропбокс убил только прямые ссылки (и то - для бесплатников). Так-то выкладывать можно.
А Яндекс, Гугл, Мега и проч. их и так не давали изначально.
feanor
23 Aug 2017, 22:57
Цитата
Ну, так дропбокс убил только прямые ссылки (и то - для бесплатников). Так-то выкладывать можно.
Абсолютно одна фигня с точки зрения
вечности долгосрочного хранения.
Выложил человек что-то, а потом на него упал танк и еще после этого дропбокс сменил формат ссылок. В общем-то, всем абсолютно безразлично, что файлы лежат где-то там в облаке, главное - что по ссылкам они более недоступны.
Я был бы не против, если бы прямые ссылки преобразовались в кривые. Но они грохнули их совсем, сраное мудачье.
hippocamus
24 Aug 2017, 00:44
Я где-то читал, что нужно сделать с неработающей прямой ссылкой dropbox, чтобы получить работающую непрямую. Там однозначное преобразование. То есть - если уж совсем на человека танк упал, прямо уж так - абсолютно, напрочь - то можно воскресить ) Не человека, конечно. Но ссылку.
Цитата(feanor @ 08 Feb 2013, 15:55)

Настраиваемые имена классов (turquoise.dll)Плагин:
turquoise.zip,
зеркалоПозволяет настраивать индивидуальное имя класса для каждого героя (аналогично Джем из стандартных кампаний SoD), как с помощью конфигурационного файла (приложен в архиве), так и динамически, с помощью SN:W-переменных с именем
hero_class_name_<hero_id>.
Иллюстрация:

Код
Patcher * globalPatcher;
PatcherInstance *patcher;
_ptr_ GetClassNameDefault;
char* GetClassName(HERO* hero)
{
char tmp[64];
sprintf(tmp,"SN:W^hero_class_name_%i^/?z1;", hero->Number);
ExecErmCmd(tmp);
if(ErmZ[1][0]!=0)
{
return ErmZ[1];
}
return CALL_1(char*, __thiscall, GetClassNameDefault, hero);
}
void __stdcall InitNames(PEvent e)
{
char tmp[1024];
char tmp_erm[1024];
for(int i=0; i!=256;i++)
{
sprintf(tmp,"Hero%i",i);
ReadStrFromIni(tmp, "Classnames", "turquoise.ini", (char*)tmp);
if (*tmp)
{
sprintf(tmp_erm,"SN:W^hero_class_name_%i^/^%s^;", i, tmp);
ExecErmCmd(tmp_erm);
}
}
}
char* __stdcall GetClassName_hook(HiHook* h, HERO* hero)
{
return GetClassName(hero);
}
int __stdcall hook_4E1(LoHook* h, HookContext* c)
{
c->ecx = (int)GetClassName((HERO*)(c->eax));
return EXEC_DEFAULT;
}
int __stdcall hook_4DB(LoHook* h, HookContext* c)
{
c->eax = (int)GetClassName((HERO*)(c->ecx));
return EXEC_DEFAULT;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
//инит Эры, инит патчера
globalPatcher = GetPatcher();
patcher = globalPatcher->CreateInstance(PINSTANCE_MAIN);
ConnectEra();
RegisterHandler(InitNames, "OnBeforeErmInstructions");
RegisterHandler(InitNames, "OnAfterCreateWindow");
HiHook *h = patcher->WriteHiHook(0x4D91E0,SPLICE_,EXTENDED_,THISCALL_,(void*)GetClassName_hook);
GetClassNameDefault = h->GetDefaultFunc();
patcher->WriteLoHook(0x4E1DE6, (void*)hook_4E1);
patcher->WriteLoHook(0x4DB980, (void*)hook_4DB);
patcher->WriteLoHook(0x4DBDF7, (void*)hook_4DB);
}
return TRUE;
}
У кого остался этот плагин? Залейте пожалуйста.
Цитата(Barin @ 24 May 2018, 00:56)

Цитата(feanor @ 08 Feb 2013, 15:55)

Настраиваемые имена классов (turquoise.dll)Плагин:
turquoise.zip,
зеркалоПозволяет настраивать индивидуальное имя класса для каждого героя (аналогично Джем из стандартных кампаний SoD), как с помощью конфигурационного файла (приложен в архиве), так и динамически, с помощью SN:W-переменных с именем
hero_class_name_<hero_id>.
Иллюстрация:

Код
Patcher * globalPatcher;
PatcherInstance *patcher;
_ptr_ GetClassNameDefault;
char* GetClassName(HERO* hero)
{
char tmp[64];
sprintf(tmp,"SN:W^hero_class_name_%i^/?z1;", hero->Number);
ExecErmCmd(tmp);
if(ErmZ[1][0]!=0)
{
return ErmZ[1];
}
return CALL_1(char*, __thiscall, GetClassNameDefault, hero);
}
void __stdcall InitNames(PEvent e)
{
char tmp[1024];
char tmp_erm[1024];
for(int i=0; i!=256;i++)
{
sprintf(tmp,"Hero%i",i);
ReadStrFromIni(tmp, "Classnames", "turquoise.ini", (char*)tmp);
if (*tmp)
{
sprintf(tmp_erm,"SN:W^hero_class_name_%i^/^%s^;", i, tmp);
ExecErmCmd(tmp_erm);
}
}
}
char* __stdcall GetClassName_hook(HiHook* h, HERO* hero)
{
return GetClassName(hero);
}
int __stdcall hook_4E1(LoHook* h, HookContext* c)
{
c->ecx = (int)GetClassName((HERO*)(c->eax));
return EXEC_DEFAULT;
}
int __stdcall hook_4DB(LoHook* h, HookContext* c)
{
c->eax = (int)GetClassName((HERO*)(c->ecx));
return EXEC_DEFAULT;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
//инит Эры, инит патчера
globalPatcher = GetPatcher();
patcher = globalPatcher->CreateInstance(PINSTANCE_MAIN);
ConnectEra();
RegisterHandler(InitNames, "OnBeforeErmInstructions");
RegisterHandler(InitNames, "OnAfterCreateWindow");
HiHook *h = patcher->WriteHiHook(0x4D91E0,SPLICE_,EXTENDED_,THISCALL_,(void*)GetClassName_hook);
GetClassNameDefault = h->GetDefaultFunc();
patcher->WriteLoHook(0x4E1DE6, (void*)hook_4E1);
patcher->WriteLoHook(0x4DB980, (void*)hook_4DB);
patcher->WriteLoHook(0x4DBDF7, (void*)hook_4DB);
}
return TRUE;
}
У кого остался этот плагин? Залейте пожалуйста.
http://yadi.sk/d/_iFx69_O6fb_6turquoise (имена классов).zip
Feanor, а тут ошибки нет в определении цикла. Может for(int i=0; i!=
156;i++)
Код
void __stdcall InitNames(PEvent e)
{
char tmp[1024];
char tmp_erm[1024];
for(int i=0; i!=256;i++) // тут i!=156 ?
{
sprintf(tmp,"Hero%i",i);
ReadStrFromIni(tmp, "Classnames", "turquoise.ini", (char*)tmp);
if (*tmp)
{
sprintf(tmp_erm,"SN:W^hero_class_name_%i^/^%s^;", i, tmp);
ExecErmCmd(tmp_erm);
}
}
}
feanor
24 May 2018, 11:14
На всякий случай (:
Цитата(Iv @ 24 May 2018, 09:18)

Цитата(Barin @ 24 May 2018, 00:56)

Цитата(feanor @ 08 Feb 2013, 15:55)

Настраиваемые имена классов (turquoise.dll)Плагин:
turquoise.zip,
зеркалоПозволяет настраивать индивидуальное имя класса для каждого героя (аналогично Джем из стандартных кампаний SoD), как с помощью конфигурационного файла (приложен в архиве), так и динамически, с помощью SN:W-переменных с именем
hero_class_name_<hero_id>.
Иллюстрация:

Код
Patcher * globalPatcher;
PatcherInstance *patcher;
_ptr_ GetClassNameDefault;
char* GetClassName(HERO* hero)
{
char tmp[64];
sprintf(tmp,"SN:W^hero_class_name_%i^/?z1;", hero->Number);
ExecErmCmd(tmp);
if(ErmZ[1][0]!=0)
{
return ErmZ[1];
}
return CALL_1(char*, __thiscall, GetClassNameDefault, hero);
}
void __stdcall InitNames(PEvent e)
{
char tmp[1024];
char tmp_erm[1024];
for(int i=0; i!=256;i++)
{
sprintf(tmp,"Hero%i",i);
ReadStrFromIni(tmp, "Classnames", "turquoise.ini", (char*)tmp);
if (*tmp)
{
sprintf(tmp_erm,"SN:W^hero_class_name_%i^/^%s^;", i, tmp);
ExecErmCmd(tmp_erm);
}
}
}
char* __stdcall GetClassName_hook(HiHook* h, HERO* hero)
{
return GetClassName(hero);
}
int __stdcall hook_4E1(LoHook* h, HookContext* c)
{
c->ecx = (int)GetClassName((HERO*)(c->eax));
return EXEC_DEFAULT;
}
int __stdcall hook_4DB(LoHook* h, HookContext* c)
{
c->eax = (int)GetClassName((HERO*)(c->ecx));
return EXEC_DEFAULT;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
//инит Эры, инит патчера
globalPatcher = GetPatcher();
patcher = globalPatcher->CreateInstance(PINSTANCE_MAIN);
ConnectEra();
RegisterHandler(InitNames, "OnBeforeErmInstructions");
RegisterHandler(InitNames, "OnAfterCreateWindow");
HiHook *h = patcher->WriteHiHook(0x4D91E0,SPLICE_,EXTENDED_,THISCALL_,(void*)GetClassName_hook);
GetClassNameDefault = h->GetDefaultFunc();
patcher->WriteLoHook(0x4E1DE6, (void*)hook_4E1);
patcher->WriteLoHook(0x4DB980, (void*)hook_4DB);
patcher->WriteLoHook(0x4DBDF7, (void*)hook_4DB);
}
return TRUE;
}
У кого остался этот плагин? Залейте пожалуйста.
http://yadi.sk/d/_iFx69_O6fb_6turquoise (имена классов).zip
Плохо, что в каждом плагине нет более ясной информации. Описания понятны только разработчику этих плагинов. Как менять имена классов динамически? Справочник Эры тоже сложно написан, без детальной информации, без наглядных примеров. SN:W - а что дальше? Напишите пример. Картинка иллюстрации уже не работает.
Как мне сменить название класса у героя 134?
Ничего сложного:
1. Переименуй плагин в "turquoise.era" вместо "turquoise.dll"
2. !#SN:W^hero_class_name_134^/^Целлюлит^;
Цитата(igrik @ 24 May 2018, 18:19)

Ничего сложного:
1. Переименуй плагин в "turquoise.era" вместо "turquoise.dll"
2. !#SN:W^hero_class_name_134^/^Целлюлит^;
1) Получилось. А так попробуй догадайся...
feanor много чего полезного сделал, но наглядное описание не оставляет потомкам-мододелам.
2) Кто-нибудь пытался сделать подобную команду, но только для текстовых файлов?
!!SN:L^Era.dll^/?y1 Ay1/^RedirectFile^/?y2 Ey2/1/^оригинальный
.def^/^мой
.def^; !!VRy1:S0; !!VRy2:S0;
например:
!!SN:L^Era.dll^/?y1 Ay1/^RedirectFile^/?y2 Ey2/1/^оригинальный
.txt^/^мой
.txt^; !!VRy1:S0; !!VRy2:S0;
Была бы очень полезная команда. Можно много чего менять без плагинов. Я постоянно с этим сталкиваюсь - хочется и оригинальный файл оставить и свой подгружать в конкретных картах.
Кто может реализовать это дело?
hippocamus
25 May 2018, 23:32
Текстов к грузятся и обрабатываются сразу при загрузке игры, они не хранятся в памяти в целостном виде, поэтому что заменять динамически, собственно?
feanor
26 May 2018, 12:42
Можно вроде бы сделать RedirectFile и перезагрузить текстовик.
hippocamus
26 May 2018, 19:50
И все другие сделанные изменения откатятся? Тексты при посещении объектов, параметры кричей?..
hippocamus
11 Feb 2019, 16:19
Цитата(Richter @ 11 Feb 2019, 15:15)

Небольшая модификация добавляющая статистику пройденного расстояния героя, просмотр по нажатию клавиши "X"
RichterА почему такое число?
Логичнее было бы 1 км, а по диагонали - sqrt(2).
Richter
11 Feb 2019, 17:17
1 км попробовал сразу, цифры получались слишком "холодные". Поэтому решил с плавающей запятой, подогнал число с помощью деления. Получилось интересно и адекватно.
А насчет sqrt(2) (1.414км) по диагонали, многовато, расстояние есть расстояние. Попробую на досуге, только число сделаю 1,087, плюс минус рандомные варианты погрешности скажем 0,023.
Настраиваемые имена классовСсылки битые.
Насколько я понимаю, dll там не нужна и можно реализовать средствами ERM/UN:C.
Если так, кто может кинуть пример?
feanor
11 Mar 2019, 11:33
Цитата(Algor @ 10 Mar 2019, 16:59)

Настраиваемые имена классовСсылки битые.
Насколько я понимаю, dll там не нужна и можно реализовать средствами ERM/UN:C.
Если так, кто может кинуть пример?
Не-а, там хуки ставятся.
С хукером мб можно, но не пробовал.
ALEKCEN
05 Aug 2025, 11:48
Печально,что тема умерла,хотя хотелось-бы несколько модов утащить оттуда...может кто перезальёт ?(
XEPOMAHT
05 Aug 2025, 19:56
Цитата(ALEKCEN @ 05 Aug 2025, 11:48)

может кто перезальёт ?(
Смысл? То, что собиралось и работало под ERA 1.8 15-летней давности на современной ERA 3.9.ХХ работать без ошибок не станет (для таких старых модов поддержки давно нет или она была реализована в более современных аналогах).
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.