Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Как из hl.exe сделать лаунчер для своего мода.
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: по месту прописки
Сообщений: 4180

Рейтинг



Как из hl.exe сделать лаунчер для своего мода.

Я предполагаю что с помощью HEX редактора. Если можно по подробнее.
И как изменить иконку стандартную. Пробовал использовать "Restorator" ничего годного не вышло.

Сообщить модератору | | IP: Записан
Сообщение: 123649

Старое сообщение 02-08-2013 10:02
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 28

Рейтинг



Ну я же где-то выкладывал исходники лаучера, правда там интерфейсы движка кривые. Игру он запускает лишь при использовании параметра -steam ну и при выходе из игры, продолжает висеть в процессах.

C++ Source Code:
class IEngineAPI
{
    // Functions
public:
    virtual int UnkFunc( int t ) = 0;
    virtual bool Run( void *instance, char *basedir, const char *pCommandLine, CreateInterfaceFn launcherFactory ) = 0;
};


#define VENGINE_LAUNCHER_API_VERSION "VENGINE_LAUNCHER_API_VERSION002"



В методе Run аргументы неверные, поэтому он и вылетает, при выходе, какие именно должны быть хз.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 123652

Старое сообщение 02-08-2013 10:24
- За что?
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: по месту прописки
Сообщений: 4180

Рейтинг



Хорошо а с помощью программ типа Resource Hacker и Restorator 2009 можно взять стандартный hl.exe и впихнуть в него параметр -game %modename% Что то похожее было в HLWE но не могу найти. Если что знает скажите пожалуйста как именно это сделать. потому что я сан не могу разобраться.

Сообщить модератору | | IP: Записан
Сообщение: 123691

Старое сообщение 02-08-2013 15:48
- За что?
pRoxxx
Житель форума

Дата регистрации: Jan 2011
Проживает: UA DP
Сообщений: 360
Возраст: 27

Рейтинг



Ну вот набросок мой небольшой, он далеко не идеален например Change Game не будет работать, параметры типа -game тожи.

C++ Source Code:
#include <windows.h>
#include <stdio.h>


typedef char* (*CreateInterfaceFn)(const char *pName, int *pReturnCode);

#pragma comment(lib, "ws2_32.lib")


class IEngineAPI
{
public:
    virtual void *UnknowFunc(void *unknow) = 0;
    virtual int Run(HINSTANCE instance, char *basedir, const char *cmdline, char *szCommand, CreateInterfaceFn launcherFactory, CreateInterfaceFn filesystemFactory) = 0;
};

class CFileSystem
{
public:
    virtual void UnknowFunc(void) = 0;
    virtual void Mount(void) = 0;
    virtual void Unmount(void) = 0;
    virtual void RemoveAllSearchPaths(void) = 0;
    virtual void AddSearchPath(const char *pPath, const char *pathID = NULL) = 0;
};





int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    
    HANDLE hObject = CreateMutex(NULL, FALSE, "ValveHalfLifeLauncherMutex");
    DWORD dwStatus = WaitForSingleObject(hObject, 0);
    if(dwStatus && dwStatus != WAIT_ABANDONED)
    {
        MessageBox(NULL, "Could not launch game.\nOnly one instance of this game can be run at a time.", "Error",  MB_OK | MB_ICONERROR);
        return 0;
    }
    
    WSAData lpWSAData;
    WSAStartup(2, &lpWSAData);
    
    
    char szPatch[256];
    GetCurrentDirectory(256, szPatch);
    
    HMODULE hFileEngine = LoadLibrary("filesystem_stdio.dll");
    if(!hFileEngine)
    {
        MessageBox(NULL, "Failed to load File engine!", "ERROR", MB_OK | MB_ICONERROR);
        return 1;
    }
    
    CreateInterfaceFn Func = (CreateInterfaceFn)GetProcAddress(hFileEngine,"CreateInterface");
    CFileSystem* pFileSystem = (CFileSystem*)Func("VFileSystem009", NULL);
    
    pFileSystem->Mount();
    pFileSystem->AddSearchPath(szPatch, "ROOT");
    
    HMODULE hEngine = LoadLibrary("hw.dll");
    
    if(!hEngine)
    {
        MessageBox(NULL, "Failed to load game engine!", "ERROR", MB_OK | MB_ICONERROR);
        return 1;
    }
    
    
    CreateInterfaceFn Func2 = (CreateInterfaceFn)GetProcAddress(hEngine,"CreateInterface");
    IEngineAPI *pEngineAPI = (IEngineAPI *)Func2("VENGINE_LAUNCHER_API_VERSION002", NULL);
    
    //Либа для перехвата движковых функций.
    HMODULE HookLib = LoadLibrary("mylib.dll");
    
    int iResult = pEngineAPI->Run(hInstance, szPatch, "-game cstrike", "", NULL, Func);
    char str[256];
    sprintf(str, "Result %d", iResult);
    MessageBox(NULL, str, "Result", MB_OK);
    
    pFileSystem->Unmount();
    FreeLibrary(hEngine);
    FreeLibrary(hFileEngine);
    FreeLibrary(HookLib);
    
    
    
    ReleaseMutex(hObject);
    
    WSACleanup();
    
    return 0;
    
    
    
}

Сообщить модератору | | IP: Записан
Сообщение: 123699

Старое сообщение 02-08-2013 19:32
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 28

Рейтинг



pRoxxx, вот спасибо.

Так на всякий случай:

C++ Source Code:
class IFileSystem : public IBaseInterface
{
public:
    virtual void    Mount( ) = 0; //+4
    virtual void    Unmount( ) = 0; //+8
    virtual int    RemoveAllSearchPaths( ) = 0; //+12
    virtual int    AddSearchPath( char *pSearchPatch, char *pTypePatch ) = 0; //+16
    
    virtual int    Dummy2( ) = 0; //+20
    virtual int    Dummy3( ) = 0; //+24
    
    // this isn't implementable on STEAM as is.
    virtual void    CreateDirHierarchy( const char *path, const char *pathID ) = 0; //28
    
    // File I/O and info
    virtual bool    IsDirectory( const char *pFileName, const char *pathID ) = 0; //32
    
    virtual int    Dummy6( ) = 0; //+36
    
    // if pathID is NULL, all paths will be searched for the file
    virtual FileHandle_t    Open( const char *pFileName, const char *pOptions, const char *pathID = 0 ) = 0; //+40
    virtual void    Close( FileHandle_t file ) = 0; //+44
    
    
    virtual int    Dummy9( ) = 0; //+48
    virtual int    Dummy10( ) = 0; //+52
    virtual int    Dummy11( ) = 0; //+56
    virtual unsigned int    Size( FileHandle_t file ) = 0;
    virtual int    Dummy13( char *pFileName ) = 0; //+64
    virtual int    Dummy14( ) = 0; //+68
    virtual int    Dummy15( ) = 0; //+72
    virtual int    Dummy16( ) = 0; //+76
    virtual int    Dummy17( ) = 0; //+80
    virtual int    Dummy18( ) = 0; //+84
    virtual int    Dummy19( ) = 0; //+88
    virtual int    Dummy20( ) = 0; //+92
    
    virtual int    FPrintf( FileHandle_t file, char *pFormat, ... ) = 0; //96
    
    
    
    virtual int    Dummy22( ) = 0; //+100
    virtual int    Dummy23( ) = 0; //+104
    
    // FindFirst/FindNext
    virtual const char    *FindFirst( const char *pWildCard, FileFindHandle_t *pHandle, int unker ) = 0; //+108
    virtual const char    *FindNext( FileFindHandle_t handle ) = 0; //+112
    virtual bool    FindIsDirectory( FileFindHandle_t handle ) = 0; //+116
    virtual void    FindClose( FileFindHandle_t handle ) = 0; //+120
    
    virtual int    Dummy28( ) = 0; //+124
    virtual int    Dummy29( ) = 0; //+128
    virtual int    Dummy30( ) = 0; //+132
};


__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 123700

Старое сообщение 02-08-2013 19:37
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21862
Нанёс повреждений: 360 ед.

Рейтинг



вот самый правильный вариант!

C++ Source Code:
#include <windows.h>

#define GAME_PATH    "valve"// default dir to start from

typedef void (*pfnChangeGame)( const char *progname );
typedef int (*pfnInit)( const char *progname, int bChangeGame, pfnChangeGame func );
typedef void (*pfnShutdown)( void );

pfnInit Host_Main;
pfnShutdown Host_Shutdown = NULL;
char szGameDir[128]; // safe place to keep gamedir
HINSTANCE    hEngine;

void Sys_Error( const char *errorstring )
{
    MessageBox( NULL, errorstring, "Xash Error", MB_OK|MB_SETFOREGROUND|MB_ICONSTOP );
    exit( 1 );
}

void Sys_LoadEngine( void )
{
    if(( hEngine = LoadLibrary( "xash.dll" )) == NULL )
    {
        Sys_Error( "Unable to load the xash.dll" );
    }
    
    if(( Host_Main = (pfnInit)GetProcAddress( hEngine, "Host_Main" )) == NULL )
    {
        Sys_Error( "xash.dll missed 'Host_Main' export" );
    }
    
    // this is non-fatal for us but change game will not working
    Host_Shutdown = (pfnShutdown)GetProcAddress( hEngine, "Host_Shutdown" );
}

void Sys_UnloadEngine( void )
{
    if( Host_Shutdown ) Host_Shutdown( );
        if( hEngine ) FreeLibrary( hEngine );
}

void Sys_ChangeGame( const char *progname )
{
    if( !progname || !progname[0] ) Sys_Error( "Sys_ChangeGame: NULL gamedir" );
        if( Host_Shutdown == NULL ) Sys_Error( "Sys_ChangeGame: missed 'Host_Shutdown' export\n" );
            strncpy( szGameDir, progname, sizeof( szGameDir ) - 1 );
        
    Sys_UnloadEngine ();
    Sys_LoadEngine ();
    
    Host_Main( szGameDir, TRUE, ( Host_Shutdown != NULL ) ? Sys_ChangeGame : NULL );
}

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    Sys_LoadEngine();
    
    return Host_Main( GAME_PATH, FALSE, ( Host_Shutdown != NULL ) ? Sys_ChangeGame : NULL );
}

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 123701

Старое сообщение 02-08-2013 19:41
-
pRoxxx
Житель форума

Дата регистрации: Jan 2011
Проживает: UA DP
Сообщений: 360
Возраст: 27

Рейтинг



Цитата:
fire64 писал:
Так на всякий случай:

Я в курсе что этот класс больше чем у меня, я даже находил полностью список его функций с параметрами, но мне всё надо, так что те что идут после нужных функций я не вносил в класс, а те что перед просто пометил как UnknowFunc. И да тожи на всякий случай:
C++ Source Code:
class IBaseInterface
{
public:
    
    virtual    ~IBaseInterface() {} //первые четыре байта они жеж  virtual void UnknowFunc(void) = 0;
};

Сообщить модератору | | IP: Записан
Сообщение: 123702

Старое сообщение 02-08-2013 19:51
- За что?
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 28

Рейтинг



pRoxxx, кстати, мьютекс в общем-то и не нужен, он там лишь для защиты от многократного запуска.

У тебя случаем нет классов интерфейсов VGUI2 от GoldSRC?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | | IP: Записан
Сообщение: 123703

Старое сообщение 02-08-2013 19:57
- За что?
pRoxxx
Житель форума

Дата регистрации: Jan 2011
Проживает: UA DP
Сообщений: 360
Возраст: 27

Рейтинг



Цитата:
fire64 писал:
мьютекс в общем-то и не нужен, он там лишь для защиты от многократного запуска.

Спасибо я в курсе, там жеж даже в Эрроре это написано, я пробывал запускать два клиента и на один сервер, выглядит жутко, тот что запущен был вторым не видит никого, а первый нормально работает. Думал потроллить школьников админов, начать гнуть маты дабы забанили одно окно а второе не вылетает жиж от бана первого, но вот забанить его уже до смены карты нельзя будет.
Цитата:
fire64 писал:
У тебя случаем нет классов интерфейсов VGUI2 от GoldSRC?

Вряд ли, я в основном луркаю в исходники ворованного Source и Ксаша, еже ли там нету то... (=

Сообщить модератору | | IP: Записан
Сообщение: 123704

Старое сообщение 02-08-2013 20:08
- За что?
Ozzy
Житель форума

Дата регистрации: Feb 2010
Проживает: (void)
Сообщений: 1632

Рейтинг



Cybermax даже свою карту сделать не смог для "своего" мода,а вы ему тут такое кидаете

__________________
удалено по соображениям цензуры

Сообщить модератору | | IP: Записан
Сообщение: 123705

Старое сообщение 02-08-2013 20:24
- За что?
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: по месту прописки
Сообщений: 4180

Рейтинг



В общем я нашел простой способ. Есть утилита с помощью которой можно создавать лаунчер для ХЛ1 и её модов. Себе сделал.



Цитата:
Ozzy писал:
Cybermax даже свою карту сделать не смог для "своего" мода,а вы ему тут такое кидаете


Ты такой вредный ужас. А мы с тобою ещё в свен кооп играл раньше. Эх ты..

Сообщить модератору | | IP: Записан
Сообщение: 123713

Старое сообщение 03-08-2013 10:31
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21862
Нанёс повреждений: 360 ед.

Рейтинг



Цитата:
Ozzy писал:
даже свою карту сделать не смог для "своего" мода,а вы ему тут такое кидаете

Ты нам тоже годами показывал одно и то же место с разных ракурсов.
С чего ты взял, что можешь кретикавать других?

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 123716

Старое сообщение 03-08-2013 13:28
-
Cybermax
Житель форума

Дата регистрации: May 2006
Проживает: по месту прописки
Сообщений: 4180

Рейтинг



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

За это сообщение Cybermax получил предупреждение за флейм

Сообщить модератору | | IP: Записан
Сообщение: 123733

Старое сообщение 04-08-2013 00:17
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 2008

Рейтинг



Цитата:
Cybermax писал:
по айпи вычислять и покарать

Дикий штоле?

Сообщить модератору | | IP: Записан
Сообщение: 123734

Старое сообщение 04-08-2013 05:50
- За что?
tolerance
Житель форума
Девойс

Дата регистрации: Feb 2013
Проживает: (void)
Сообщений: 739
Возраст: 27

Рейтинг



Цитата:
Cybermax писал:
по айпи вычислять и покарать

За это сообщение tolerance получил предупреждение за флуд

Сообщить модератору | | IP: Записан
Сообщение: 123735

Старое сообщение 04-08-2013 06:22
- За что?
Тема закрыта XaeroX 04-08-2013 в 11:48
Временная зона GMT. Текущее время 02:53. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Как из hl.exe сделать лаунчер для своего мода.
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Chain Studios © 2005-2018

Рейтинг@Mail.ru