IPB

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

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

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




Плагин, добавляющий в чат несколько дополнительных команд и возможность исполнения 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

Сообщений в этой теме
- 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

 



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