IPB

Здравствуйте, гость ( Вход | Регистрация )

> Небольшие моды и плагины.
feanor
сообщение 25 Jul 2012, 11:30 (Сообщение отредактировал Iv - 10 Nov 2015, 21:49)
Сообщение #1

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20606 раз




Эта тема предназначена для небольших модов, не требующих оформления отдельной темы.
Все обсуждения - в соседней теме.

При выкладке указывайте:
  • краткое описание. Скриншот - факультативно
  • авторство (если не свое - особенно)
  • формат (инсталлятор, архив или одиночный плагин),
  • язык (или его отсутствие в случае безтекстового мода).
  • разумеется, ссылку на скачивание. Не рекомендуются как zalil, rghost и подобные обменники с кратким сроком жизни файла, так и depositfiles, letitbit и прочие многоэтапные файлопохранилища.


Замена воговского таймера для Эры

Всегда убивали воговские таймеры (которые TM, не TL).

Их мало (сто, из них изрядная часть зарезервирована), они перегружены и вообще мастдай.
В дллках оно еще более усугубляется - совершенно не хочется делать лишний хэндл для инициализации таймера, долбаться с его резервированием etc etc..


Поэтому для удобства написания дллок я набросал простенькую библиотеку, которая хукает RunTimer и посылает сообщение плагинам и ERM'у.
Требует Бараторчевский патчер, ибо он трушный.

Плагин: timerevent.era
Проект: eratimer_code.rar

Интерфейс:
Простой как топор.

Для ерм: функция !?FU4074700, в x1 - номер игрока (0..7), в x2 - день (1,2,3,4,5,6,7,8..)
Для эры: событие OnGlobalTimer с двумя аналогичными параметрами. См. пример ниже.

Повторю еще раз, требует patcher_x86.dll в корне папки с героями!!

Пример (Си)
Код
void __stdcall TimerTest (PEvent e)
{
    char buf[128];
    int i = *(int*)(e->Data);
    sprintf(buf,"IF:L^%i %i^;",*(int*)(e->Data), *(1+(int*)(e->Data)));
    ExecErmCmd(buf);
}
..
RegisterHandler(TimerTest,"OnGlobalTimer");



Код:
<div class="sp-wrap"><div class="sp-body" title="Код">
Код
#include <windows.h>
#include <stdio.h>
#include "....includeera.h"
#include "....includeheroes.h"
#include "....includepatcher_x86_commented.hpp"

Patcher * globalPatcher;
PatcherInstance *patcher;


int __cdecl OnAnyTimer(HiHook* h, int owner)
{
    ErmX[1]=owner;
    ErmX[2]=CALL_0(int, __cdecl ,0x7103D2);
    FireErmEvent(4074700);

    int param[2] = {owner,CALL_0(int, __cdecl ,0x7103D2)};
    FireEvent("OnGlobalTimer",(void*)param,8);

    

    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("timerwrapper");
        ConnectEra();

        patcher->WriteHiHook(0x74DC74, SPLICE_, EXTENDED_, CDECL_, (void*)OnAnyTimer);
    }
    return TRUE;
}
</div></div>

Просьба здесь особо не обсуждать. Мне куда более доставляет складывать добро в чистую тему.
Go to the top of the pageAdd Nick
 
+Quote Post
 
Start new topic
Ответов
feanor
сообщение 28 Mar 2013, 14:27
Сообщение #2

laughed as one fey
Сообщений: 12 167
Спасибо сказали: 20606 раз




Вызовы элементалей (summoniots.dll)

Плагин: summoniots.dll

Позволяет подменять результаты заклинаний вызова элементалей.
Помимо этого, отключает невозможность применения более чем одного заклинания вызова.

События: !?FU4074520 - попытка вызова.
x1 - указатель на флаг того, сработает ли заклинание (не сработавшее заклинание тратит ману и магический ход, но ничего не делает)
x2 - указатель на номер заклинания
x3 - указатель на номер существа
x4 - указатель на уровень колдовской силы, используемый при расчете количества вызванных.

Пример (ERM):

Вызов чародеев вместо любого из элементалей.
Код
ZVSE
!?FU4074520;
!!UN:Cx3/4/?y1; --кого вызываем
!!BG:H?y3;
!!IF:L^Hero %Y3 trying to summon %Y1..^;
!!UN:Cx3/4/136;
!!UN:Cx4/4/999;
!!UN:Cx3/4/?y1;
!!IF:L^..but summons horde of %Y1^;


Код
Patcher * globalPatcher;
PatcherInstance *citrine;

int __stdcall SummonHook(HiHook* h, _BattleMgr_ *combatman, int spell, int creature, int spellpower, int unk)
{
    int flag = 1;
    ((int*)0x91DA34)[1] = (int)(&flag);
    ((int*)0x91DA34)[2] = (int)(&spell);
    ((int*)0x91DA34)[3] = (int)(&creature);
    ((int*)0x91DA34)[4] = (int)(&spellpower);
    ((int*)0x91DA34)[5] = (int)(&unk);
    ((int*)0x91DA34)[6] = (int)combatman+combatman->current_side*4+0x132C0;

    CallERM(4074520);

    return flag?CALL_5(int, __thiscall, h->GetDefaultFunc(), (int)combatman, spell, creature, spellpower, unk):-1;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        globalPatcher = GetPatcher();
        citrine =  globalPatcher->CreateInstance("summon_elems");

        citrine->WriteHiHook(0x5A7390, SPLICE_, EXTENDED_, THISCALL_, (void*)SummonHook);
        citrine->WriteByte(0x59F887,0xEB);
        citrine->WriteWord(0x5A96D0, 0x9090);        
    }
    return TRUE;
}
Go to the top of the pageAdd Nick
 
+Quote Post

Сообщений в этой теме
- feanor   Небольшие моды и плагины.   25 Jul 2012, 11:30
- - feanor   Обработка копания (granite.dll) Плагин: granite.e...   18 Aug 2012, 22:10
- - feanor   Работа с датой (malachite.dll) Плагин: malachite....   18 Aug 2012, 22:41
- - feanor   Контроль восьмого слота (obsidian.dll) Плагин: ob...   19 Oct 2012, 20:35
- - feanor   Отрицательная удача (badluck.dll) (с) Sav, feanor ...   03 Jan 2013, 00:10
- - feanor   Настраиваемые имена классов (turquoise.dll) Плаги...   08 Feb 2013, 15:55
- - feanor   Вызовы элементалей (summoniots.dll) Плагин: summo...   28 Mar 2013, 14:27
- - feanor   Гильдия воров вместо "Братства меча" в З...   17 Jul 2013, 18:31
- - Iv   Другие флаги игроков Автор: Iv (с участием Algor...   18 Jul 2013, 13:31
- - feanor   Несколько небольших патчей. Автор: feanor Язык: н...   25 Jul 2013, 08:00
|- - Iv   Зомбивод (39 б) Автор: Master of puppets Язык: нет...   25 Jul 2013, 16:02
- - feanor   Часы реального времени. ПКМ по дате на экране к...   01 Aug 2013, 14:30
- - feanor   Еженедельная газета "Голос из-под стойки...   16 Sep 2013, 00:59
- - Iv   -Why do you call your software "beta"? -...   19 Sep 2013, 23:55
- - igrik   Рюкзак героя Версия 1.04. Автор: igrik Язык: русск...   21 Sep 2013, 23:13
- - Iv   Случайные нейтральные герои Нейтралы с вероятност...   13 Mar 2014, 13:14
- - feanor   Статуя Ленина в Инферно вместо Бога Огня Автор: f...   22 Apr 2014, 20:39
- - Iv   Родная грязь (dirt) для Подземелья Маленький пат...   15 Jun 2014, 20:37
- - Orzie   Культ Вождя Мирового Пролетариата Авторы: feanor,...   15 Jul 2014, 13:12
- - feanor   Магические сундуки Сундуки с артефактами теперь о...   31 Jul 2014, 22:57
- - feanor   Вуду-гарпии. Иногда гарпии-ведьмы будут атаковать...   03 Feb 2015, 19:06
- - feanor   Иной формат даты. Дни недели и месяцы именуются, ...   10 Feb 2015, 03:13
- - feanor   Иные виды снарядов-лучей. Архимаги стреляют молни...   10 Feb 2015, 20:56
- - hippocamus   Приручённые нейтралы Большинство нейтралов теперь...   12 Feb 2015, 16:27
- - Iv   Больше колодцев для бога колодцев Маленький патчи...   19 Feb 2015, 23:46
- - feanor   В честь минувших праздников полового диморфизма.. ...   13 Mar 2015, 23:57
- - feanor   Анимированные существа на поле боя (порт из WoG 3....   14 Aug 2016, 00:56
- - igrik   Цифровое отображение морали и удачи в окне стека. ...   21 Oct 2016, 19:17
- - Ben   Новая версия заклинания Городской портал Авторы: ...   08 Aug 2017, 21:11
- - igrik   А где сама DLL? Кстати забыл. Тестировал. Багов ...   09 Aug 2017, 17:47
- - Iv   Напоминаю: Цитата(feanor @ 25 Jul 2012, 11...   22 Aug 2017, 16:33
- - Ben   Модификация Зыбучих песков и Мин Dll плагин к HD ...   02 Sep 2017, 17:46
- - Ben   Улучшение вторичного навыка Обучение Dll плагин к...   27 Sep 2017, 18:41
- - Ben   Улучшение навыка Орлиный глаз Авторы: AlexSpl, Be...   30 Sep 2017, 09:02
- - igrik   WoG Native Dialogs (Вог диалоги в родном исполнен...   20 Sep 2018, 22:02
- - igrik   Защита артефактов, пандор и свитков Скачать (41.5...   16 Nov 2018, 08:42
- - Richter   Небольшая модификация добавляющая статистику пройд...   11 Feb 2019, 15:15
- - suftfree   Модификация добавляющая огромное количество новых ...   26 Apr 2020, 15:21


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 23 January 2026 - 02:38
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика