IPB

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

2 страниц V   1 2 >  
Reply to this topicStart new topic
> ERM-консоль, chalk.dll
feanor
сообщение 20 Jul 2012, 22:52 (Сообщение отредактировал feanor - 09 May 2013, 15:16)
Сообщение #1

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




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

https://dl.dropboxusercontent.com/u/61759222/HoMM/chalk.era (v001)
https://dl.dropbox.com/u/61759222/HoMM/chalk.rar (исходники)



Команды:
  • /showfps - включает отображение FPS вместо строки чата
  • /leveldebugger - включает встроенный "отладчик карты". Единственная функция, которую я заметил - отображение координат в подсказке по почве.
  • /execerm <command> - исполнение ERM-команды. Команда приводится без предваряющих восклицательных знаков, но с точкой-с-запятой (т.е. /execerm IF:L^Hello!^; ). Поддерживаются !!HE-1 и v998/999/1000 (ограниченно)
  • /heroid - номер, имя и адрес структуры текущего героя.
  • !!<command> - аналогично execerm.
  • [здесь может быть ваше пожелание]



Код
#include <windows.h>
#include <stdio.h>
#include "..\..\include\era.h"
#include "..\..\include\heroes.h"
#include "..\..\include\patcher_x86_commented.hpp"

void InitWoGSpecials()
{
    if (*(int *)(*(int*)0x69CCFC + 4)!=-1)
    {
        HERO* currhero = (HERO*)GetHeroRecord(*(int *)(*(int*)0x69CCFC + 4));

        *(int*)0x27F9970 = (int)currhero;
        ErmV[998] = currhero->x;
        ErmV[999] = currhero->y;
        ErmV[1000] = currhero->l;

        ErmF[1000]= !CALL_1(int, __thiscall, 0x4BAA60, *(int*)0x69CCFC);
    }
}

void PrintString(char* str)
{
        char buf[1024];

        sprintf(buf,"IF:L^{~green}%s{~}^;",str);
        ExecErmCmd(buf);

        /*sprintf(buf,"IF:L^%s^;",str);
        EventParams[1] = str*/
}

void __stdcall  OnChat(PEvent e)
{
    if(EventParams[0] == 1)
    {
        EventParams[2] = 1;

        char *buf=(char*)malloc(32+strlen((const char*)EventParams[1]));
        sprintf(buf,"IF:L^{~%s}%s{~}^;\0","lime",EventParams[1]);
        ExecErmCmd(buf);
        free(buf);

        char str[256];

        if(!stricmp((const char*)EventParams[1],"/showfps"))
            {
                *(int*)((*(int*)0x6992B8)+0x3C) = !*(int*)((*(int*)0x6992B8)+0x3C);
                PrintString("FPS switched off");
            }

        if(!stricmp((const char*)EventParams[1],"/leveldebugger"))
            {
                *(int*)0x698A18 = !*(int*)0x698A18;
                PrintString(*(int*)0x698A18?"Level debugger switched on":"Level debugger switched off");
            }

        if(!stricmp((const char*)EventParams[1],"/heroid"))
            {
                int id = *(int *)(*(int*)0x69CCFC + 4);
                if (id!=-1)
                {
                    sprintf(str,"%s: id %i, struct at 0x%08X",
                                                        ((HERO*)GetHeroRecord(id))->Name,
                                                        id,
                                                        GetHeroRecord(id)
                             );
                }
                else
                {
                    strcpy(str,"Hero not selected");
                }

                PrintString(str);
            }

        if(!strnicmp((const char*)EventParams[1],"/execerm",strlen("/execerm")))
        {
            InitWoGSpecials();

            ExecErmCmd((char*)(strlen("/execerm")+1+EventParams[1]));
            PrintString("Executed");
        }

        if(!strnicmp((const char*)EventParams[1],"!!",strlen("!!")))
        {
            InitWoGSpecials();

            ExecErmCmd((char*)(strlen("!!")+EventParams[1]));
            PrintString("Executed");
        }


        //ExecErmCmd(str);
        //MessageBoxA(0,(LPCSTR)(EventParams[1]),(LPCSTR)str,0);
    }
}



BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        ConnectEra();    
        RegisterHandler(OnChat, "OnChat");
    }
    return TRUE;
}

Сорцы и нормальная заливка будут позже.
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Jul 2012, 01:56
Сообщение #2

Immortal
Сообщений: 1 468
Спасибо сказали: 1151 раз




Вспомнилось:

Код
ZVSE
!?FU77003;
!!SN:W^InChat^/?y1;
!!SN&y1=1:Q;

!?FU77014;
!!SN:X?y1;

!!if&y1=0:;
  !!SN:W^InChat^/1;
!!en:;

!!if&y1=1:;
  !!SN:X?y1/?z1/0;
  !!SN:L^Era.dll^/?y10 Ay10/^ExecErmCmd^/?y11 Ey11/0/z1;
!!en:;

!!if&y1=2:;
  !!SN:W^InChat^/0;
!!en:;


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 21 Jul 2012, 02:27
Сообщение #3

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




Упс. Ну ладно, у меня понтовее happy.gif


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Jul 2012, 13:29
Сообщение #4

Immortal
Сообщений: 1 468
Спасибо сказали: 1151 раз




Кстати, а почему бы точку с запятой автоматом не добавлять?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 26 Jul 2012, 15:56
Сообщение #5

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




Цитата
Кстати, а почему бы точку с запятой автоматом не добавлять?

Мысль была, но она пришла ровно через шестьдесят одну секунду после нажатия кнопки "Загрузить".


Кстате, еще какие команды нужны?
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 26 Jul 2012, 18:40 (Сообщение отредактировал feanor - 26 Jul 2012, 18:41)
Сообщение #6

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




Версия..ну пусть 001 (от 18 часов 26 июля 2012 года)

[*] Исправлена ошибка (точнее, не оправдавшая себя фича), из-за которой нельзя было вводить чит-коды
[+] Добавлены команды /chalk (выводит список команд и дату/время компиляции плагина), /console on|off (включение/отключение консоли)
[+] Вывод в чат теперь идет без посредства ERM.
[+] Точка с запятой теперь добавляется автоматически

http://zalil.ru/33613281 - плагин
https://dl.dropbox.com/u/61759222/HoMM/chalk.rar - код+плагин+меньшая вероятность потери ссылки


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 27 Jul 2012, 16:13
Сообщение #7

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




если написать группу команд для одного ресивера через пробел, они будут адекватно обработаны?
Например:
Код
!!BM0:S2 P12;


и второй вопрос:
можно ли так же через пробел использовать разные ресиверы?
Например:
Код
!!BM0:S2; !!BM1:P12



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 27 Jul 2012, 16:35
Сообщение #8

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




Цитата
если написать группу команд для одного ресивера через пробел, они будут адекватно обработаны?

Да.

Цитата
можно ли так же через пробел использовать разные ресиверы?

Нет, выполнится только первый


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 27 Jul 2012, 17:30
Сообщение #9

Immortal
Сообщений: 1 468
Спасибо сказали: 1151 раз




Можно, конечно, по ";" разбивать строку и вызывать ExecErmCmd на каждой.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 08 Jan 2013, 03:32 (Сообщение отредактировал Bes - 08 Jan 2013, 03:36)
Сообщение #10

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




feanor
активирую чат (жму TAB), нажимаю ВВОД (Enter)
= безмолвный вылет игры (

Версия: chalk 001 (18:03:18 от 26 июля 2012 года)


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 08 Jan 2013, 15:27
Сообщение #11

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




Хм. У меня все норм.
Кто-нибудь еще, подтвердите или опровергните?
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 08 Jan 2013, 15:45
Сообщение #12

пират с чёрной меткой
Сообщений: 23 646
Спасибо сказали: 12920 раз




У меня почему-то не активируется плагин. Но и не вылетает. Пишет: "Красный:"
Плагин помещён в Mods\Wog\EraPlugins\
Версия Эры 2.41
Моды: Wog, Wog Rus, Wog Revised


--------------------
Давший быка на убой не выпросил и печень на жаркое.
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 08 Jan 2013, 15:49
Сообщение #13

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




Цитата
У меня почему-то не активируется плагин. Но и не вылетает. Пишет: "Красный:"

Это при tab+enter? Дак палгин и не должен в этом случае ничего делать, так что все нормально
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 08 Jan 2013, 16:20
Сообщение #14

пират с чёрной меткой
Сообщений: 23 646
Спасибо сказали: 12920 раз




Команда !!IF:M^2^; не работает.


--------------------
Давший быка на убой не выпросил и печень на жаркое.
Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 08 Jan 2013, 17:00
Сообщение #15

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




Цитата(feanor @ 08 Jan 2013, 16:27) *
Хм. У меня все норм.
Кто-нибудь еще, подтвердите или опровергните?

вылет был на era+HD3.28fв оконном режиме. Повторно пробовал в полноэкранном.... вылетело так: tab+enter+enter. ошибка приложения, будет закрыто (диалог win7, никаких крашлогов не создавалось). Пробовал тут же ещё раз повторить - ничего (
Странно, ERA2.4.

на h3era.exe не получилось пока такого повторить.

hippocamus, а нефиг 2,41 какую-то ставить... нет релиза, нет и гарантий


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 08 Jan 2013, 17:18
Сообщение #16

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




Ага, с HD вылетело.

Цитата
Команда !!IF:M^2^; не работает.

Вбил !!IF:M^2^; - вывело мессаджбокс с двойкой.
Вбил /exec IF:M^2^; - тоже вывело.
Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 14 Jan 2013, 21:19
Сообщение #17

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




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

feanor
спасибо за очень удобный тестовый инструмент!!! я доволен как чёрт!!!


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 14 Jan 2013, 22:12
Сообщение #18

пират с чёрной меткой
Сообщений: 23 646
Спасибо сказали: 12920 раз




Shift-Ins и Ctrl-V не рабоатют? Жаль, не могу полноценно потестить. Часть клавиш заменяется у мну виртуальной клавиатурой...


--------------------
Давший быка на убой не выпросил и печень на жаркое.
Go to the top of the pageAdd Nick
 
+Quote Post
Bes
сообщение 14 Jan 2013, 22:22
Сообщение #19

замолкаю.
Сообщений: 2 340
Спасибо сказали: 1010 раз




Цитата(hippocamus @ 14 Jan 2013, 23:12) *
Shift-Ins и Ctrl-V не рабоатют? Жаль, не могу полноценно потестить. Часть клавиш заменяется у мну виртуальной клавиатурой...

так там же нет выделения, просто набирается текст в чате и всё...


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 14 Jan 2013, 22:39 (Сообщение отредактировал feanor - 14 Jan 2013, 22:42)
Сообщение #20

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




Вот Ctrl+С/V и нумпада не хватает адназначна.

А вообще - еще много чего не хватает


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post

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

 



Текстовая версия Сейчас: 24 April 2024 - 16:45
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика