IPB

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

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

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




Плагин, добавляющий в чат несколько дополнительных команд и возможность исполнения 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
 
Start new topic
Ответов
feanor
сообщение 27 Jul 2012, 16:35
Сообщение #2

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




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

Да.

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

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


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

Сообщений в этой теме
- feanor   ERM-консоль   20 Jul 2012, 22:52
- - Berserker   Вспомнилось: КодZVSE !?FU77003; !!SN...   21 Jul 2012, 01:56
- - feanor   Упс. Ну ладно, у меня понтовее   21 Jul 2012, 02:27
- - Berserker   Кстати, а почему бы точку с запятой автоматом не д...   21 Jul 2012, 13:29
- - feanor   ЦитатаКстати, а почему бы точку с запятой автомато...   26 Jul 2012, 15:56
- - feanor   Версия..ну пусть 001 (от 18 часов 26 июля 2012 год...   26 Jul 2012, 18:40
- - Bes   если написать группу команд для одного ресивера че...   27 Jul 2012, 16:13
- - feanor   Цитатаесли написать группу команд для одного ресив...   27 Jul 2012, 16:35
- - Berserker   Можно, конечно, по ";" разбивать строку ...   27 Jul 2012, 17:30
- - Bes   feanor активирую чат (жму TAB), нажимаю ВВОД (Ente...   08 Jan 2013, 03:32
- - feanor   Хм. У меня все норм. Кто-нибудь еще, подтвердите ...   08 Jan 2013, 15:27
|- - Bes   Цитата(feanor @ 08 Jan 2013, 16:27) Хм. У...   08 Jan 2013, 17:00
- - hippocamus   У меня почему-то не активируется плагин. Но и не в...   08 Jan 2013, 15:45
- - feanor   ЦитатаУ меня почему-то не активируется плагин. Но ...   08 Jan 2013, 15:49
- - hippocamus   Команда !!IF:M^2^; не работает.   08 Jan 2013, 16:20
- - feanor   Ага, с HD вылетело. ЦитатаКоманда !!IF:M...   08 Jan 2013, 17:18
- - Bes   после многочисленных манипуляций с чатом стало оче...   14 Jan 2013, 21:19
- - hippocamus   Shift-Ins и Ctrl-V не рабоатют? Жаль, не могу полн...   14 Jan 2013, 22:12
|- - Bes   Цитата(hippocamus @ 14 Jan 2013, 23:12) S...   14 Jan 2013, 22:22
- - feanor   Вот Ctrl+С/V и нумпада не хватает адназначна. А в...   14 Jan 2013, 22:39
|- - Bes   Цитата(feanor @ 14 Jan 2013, 23:39) Вот C...   14 Jan 2013, 23:06
- - feanor   лезть в обработку ввода не хочется категорически. ...   15 Jan 2013, 01:24
- - Iv   Очень не хватает, как в DOS, по нажатию кнопки ...   27 Jan 2013, 11:18
- - tolich   В DOS она тоже не сразу появилась.   27 Jan 2013, 11:53
|- - gerkruger   Просьба перезалить файл, так как ссылка в первом п...   21 Apr 2013, 18:50
- - feanor   Псто №6 же.   26 Apr 2013, 17:19
- - gamecreator   так вставь эту ссылку в первый пост что ли   26 Apr 2013, 17:27
|- - Algor   Кидаю chalk.dll в Mods\WoG\EraPlugins. З...   29 Apr 2013, 07:07
|- - hippocamus   Цитата(Algor @ 29 Apr 2013, 08:07) hippoc...   29 Apr 2013, 13:21
- - gamecreator   так команды /chalk и нету то   29 Apr 2013, 09:44
|- - Algor   Цитата(gamecreator @ 29 Apr 2013, 10:44) ...   29 Apr 2013, 14:58
- - feanor   А если в chalk.era переименовать?   29 Apr 2013, 15:18
- - Algor   Цитата(feanor @ 29 Apr 2013, 16:18) А есл...   29 Apr 2013, 15:47


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

 



Текстовая версия Сейчас: 15 December 2025 - 13:44
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика