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

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

Рейтинг



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

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

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

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

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

Рейтинг



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

C++ Source Code:
1
class IEngineAPI
2
{
3
  // Functions
4
public:
5
  virtual int UnkFunc( int t ) = 0;
6
  virtual bool Run( void *instance, char *basedir, const char *pCommandLine, CreateInterfaceFn launcherFactory ) = 0;
7
};
8
 
9
 
10
#define VENGINE_LAUNCHER_API_VERSION "VENGINE_LAUNCHER_API_VERSION002"


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

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

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

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

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

Рейтинг



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

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

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

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

Рейтинг



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

C++ Source Code:
1
#include <windows.h>
2
#include <stdio.h>
3
 
4
 
5
typedef char* (*CreateInterfaceFn)(const char *pName, int *pReturnCode);
6
 
7
#pragma comment(lib, "ws2_32.lib")
8
 
9
 
10
class IEngineAPI
11
{
12
public:
13
  virtual void *UnknowFunc(void *unknow) = 0;
14
  virtual int Run(HINSTANCE instance, char *basedir, const char *cmdline, char *szCommand, CreateInterfaceFn launcherFactory, CreateInterfaceFn filesystemFactory) = 0;
15
};
16
 
17
class CFileSystem
18
{
19
public:
20
  virtual void UnknowFunc(void) = 0;
21
  virtual void Mount(void) = 0;
22
  virtual void Unmount(void) = 0;
23
  virtual void RemoveAllSearchPaths(void) = 0;
24
  virtual void AddSearchPath(const char *pPath, const char *pathID = NULL) = 0;
25
};
26
 
27
 
28
 
29
 
30
 
31
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
32
{
33
 
34
  HANDLE hObject = CreateMutex(NULL, FALSE, "ValveHalfLifeLauncherMutex");
35
  DWORD dwStatus = WaitForSingleObject(hObject, 0);
36
  if(dwStatus && dwStatus != WAIT_ABANDONED)
37
  {
38
    MessageBox(NULL, "Could not launch game.\nOnly one instance of this game can be run at a time.", "Error",  MB_OK | MB_ICONERROR);
39
    return 0;
40
  }
41
 
42
  WSAData lpWSAData;
43
  WSAStartup(2, &lpWSAData);
44
 
45
 
46
  char szPatch[256];
47
  GetCurrentDirectory(256, szPatch);
48
 
49
  HMODULE hFileEngine = LoadLibrary("filesystem_stdio.dll");
50
  if(!hFileEngine)
51
  {
52
    MessageBox(NULL, "Failed to load File engine!", "ERROR", MB_OK | MB_ICONERROR);
53
    return 1;
54
  }
55
 
56
  CreateInterfaceFn Func = (CreateInterfaceFn)GetProcAddress(hFileEngine,"CreateInterface");
57
  CFileSystem* pFileSystem = (CFileSystem*)Func("VFileSystem009", NULL);
58
 
59
  pFileSystem->Mount();
60
  pFileSystem->AddSearchPath(szPatch, "ROOT");
61
 
62
  HMODULE hEngine = LoadLibrary("hw.dll");
63
 
64
  if(!hEngine)
65
  {
66
    MessageBox(NULL, "Failed to load game engine!", "ERROR", MB_OK | MB_ICONERROR);
67
    return 1;
68
  }
69
 
70
 
71
  CreateInterfaceFn Func2 = (CreateInterfaceFn)GetProcAddress(hEngine,"CreateInterface");
72
  IEngineAPI *pEngineAPI = (IEngineAPI *)Func2("VENGINE_LAUNCHER_API_VERSION002", NULL);
73
 
74
  //Либа для перехвата движковых функций.
75
  HMODULE HookLib = LoadLibrary("mylib.dll");
76
 
77
  int iResult = pEngineAPI->Run(hInstance, szPatch, "-game cstrike", "", NULL, Func);
78
  char str[256];
79
  sprintf(str, "Result %d", iResult);
80
  MessageBox(NULL, str, "Result", MB_OK);
81
 
82
  pFileSystem->Unmount();
83
  FreeLibrary(hEngine);
84
  FreeLibrary(hFileEngine);
85
  FreeLibrary(HookLib);
86
 
87
 
88
 
89
  ReleaseMutex(hObject);
90
 
91
  WSACleanup();
92
 
93
  return 0;
94
 
95
 
96
 
97
}

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

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

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

Рейтинг



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

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

C++ Source Code:
1
class IFileSystem : public IBaseInterface
2
{
3
public:
4
  virtual void			Mount( ) = 0; //+4
5
  virtual void			Unmount( ) = 0; //+8
6
  virtual int				RemoveAllSearchPaths( ) = 0; //+12
7
  virtual int				AddSearchPath( char *pSearchPatch, char *pTypePatch ) = 0; //+16
8
 
9
  virtual int				Dummy2( ) = 0; //+20
10
  virtual int				Dummy3( ) = 0; //+24
11
 
12
  // this isn't implementable on STEAM as is.
13
  virtual void			CreateDirHierarchy( const char *path, const char *pathID ) = 0; //28
14
 
15
  // File I/O and info
16
  virtual bool			IsDirectory( const char *pFileName, const char *pathID ) = 0; //32
17
 
18
  virtual int				Dummy6( ) = 0; //+36
19
 
20
  // if pathID is NULL, all paths will be searched for the file
21
    virtual FileHandle_t	Open( const char *pFileName, const char *pOptions, const char *pathID = 0 ) = 0; //+40
22
  virtual void			Close( FileHandle_t file ) = 0; //+44
23
 
24
 
25
  virtual int				Dummy9( ) = 0; //+48
26
  virtual int				Dummy10( ) = 0; //+52
27
  virtual int				Dummy11( ) = 0; //+56
28
  virtual unsigned int	Size( FileHandle_t file ) = 0;
29
  virtual int				Dummy13( char *pFileName ) = 0; //+64
30
  virtual int				Dummy14( ) = 0; //+68
31
  virtual int				Dummy15( ) = 0; //+72
32
  virtual int				Dummy16( ) = 0; //+76
33
  virtual int				Dummy17( ) = 0; //+80
34
  virtual int				Dummy18( ) = 0; //+84
35
  virtual int				Dummy19( ) = 0; //+88
36
  virtual int				Dummy20( ) = 0; //+92
37
 
38
  virtual int				FPrintf( FileHandle_t file, char *pFormat, ... ) = 0; //96
39
 
40
 
41
 
42
  virtual int				Dummy22( ) = 0; //+100
43
  virtual int				Dummy23( ) = 0; //+104
44
 
45
  // FindFirst/FindNext
46
  virtual const char		*FindFirst( const char *pWildCard, FileFindHandle_t *pHandle, int unker ) = 0; //+108
47
  virtual const char		*FindNext( FileFindHandle_t handle ) = 0; //+112
48
  virtual bool			FindIsDirectory( FileFindHandle_t handle ) = 0; //+116
49
  virtual void			FindClose( FileFindHandle_t handle ) = 0; //+120
50
 
51
  virtual int				Dummy28( ) = 0; //+124
52
  virtual int				Dummy29( ) = 0; //+128
53
  virtual int				Dummy30( ) = 0; //+132
54
};
55
 

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

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

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

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

Рейтинг



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

C++ Source Code:
1
#include <windows.h>
2
 
3
#define GAME_PATH	"valve"	// default dir to start from
4
 
5
typedef void (*pfnChangeGame)( const char *progname );
6
typedef int (*pfnInit)( const char *progname, int bChangeGame, pfnChangeGame func );
7
typedef void (*pfnShutdown)( void );
8
 
9
pfnInit Host_Main;
10
pfnShutdown Host_Shutdown = NULL;
11
char szGameDir[128]; // safe place to keep gamedir
12
HINSTANCE	hEngine;
13
 
14
void Sys_Error( const char *errorstring )
15
{
16
  MessageBox( NULL, errorstring, "Xash Error", MB_OK|MB_SETFOREGROUND|MB_ICONSTOP );
17
  exit( 1 );
18
}
19
 
20
void Sys_LoadEngine( void )
21
{
22
  if(( hEngine = LoadLibrary( "xash.dll" )) == NULL )
23
  {
24
    Sys_Error( "Unable to load the xash.dll" );
25
  }
26
 
27
  if(( Host_Main = (pfnInit)GetProcAddress( hEngine, "Host_Main" )) == NULL )
28
  {
29
    Sys_Error( "xash.dll missed 'Host_Main' export" );
30
  }
31
 
32
  // this is non-fatal for us but change game will not working
33
  Host_Shutdown = (pfnShutdown)GetProcAddress( hEngine, "Host_Shutdown" );
34
}
35
 
36
void Sys_UnloadEngine( void )
37
{
38
  if( Host_Shutdown ) Host_Shutdown( );
39
  if( hEngine ) FreeLibrary( hEngine );
40
}
41
 
42
void Sys_ChangeGame( const char *progname )
43
{
44
  if( !progname || !progname[0] ) Sys_Error( "Sys_ChangeGame: NULL gamedir" );
45
  if( Host_Shutdown == NULL ) Sys_Error( "Sys_ChangeGame: missed 'Host_Shutdown' export\n" );
46
  strncpy( szGameDir, progname, sizeof( szGameDir ) - 1 );
47
 
48
  Sys_UnloadEngine ();
49
  Sys_LoadEngine ();
50
 
51
  Host_Main( szGameDir, TRUE, ( Host_Shutdown != NULL ) ? Sys_ChangeGame : NULL );
52
}
53
 
54
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
55
{
56
  Sys_LoadEngine();
57
 
58
  return Host_Main( GAME_PATH, FALSE, ( Host_Shutdown != NULL ) ? Sys_ChangeGame : NULL );
59
}

__________________
My Projects: download page

Ты сегодня мне принёс гидравлический насос и сказал, что это ландышы
Но меня не проведёшь, насос на ландыш не похож, он большой, а ландыш маленький

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

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

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

Рейтинг



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

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

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

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

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

Рейтинг



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

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

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

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

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

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

Рейтинг



Цитата:
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
Проживает: по месту прописки
Сообщений: 4427

Рейтинг



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



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


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

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

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

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

Рейтинг



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

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

__________________
My Projects: download page

Ты сегодня мне принёс гидравлический насос и сказал, что это ландышы
Но меня не проведёшь, насос на ландыш не похож, он большой, а ландыш маленький

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

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

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

Рейтинг



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

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

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

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

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

Рейтинг



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

Дикий штоле?

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

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

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

Рейтинг



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

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

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

Старое сообщение 04-08-2013 06:22
- За что?
Тема закрыта XaeroX 04-08-2013 в 11:48
Временная зона GMT. Текущее время 22:46. Новая тема    Ответить
Страницы (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.
Дизайн и программирование: Crystice Softworks © 2005 - 2020