HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 25 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- 3d небо из Spirit of HL в SDK2.3 (https://hlfx.ru/forum/showthread.php?threadid=4267)


Отправлено vitoss 28-01-2014 в 09:39:

3d небо из Spirit of HL в SDK2.3

Пишу в новую тему, чтобы имелась возможность грамотно редактировать текст.
Ребят, излагаю подробно, как я вставлял 3д небо из спирита в свой мод на базе SDK 2.3. Я конечно полный ноль в программировании, но делаю все предельно аккуратно, и сосредоточенно, параллельно изучая язык C++. Не судите строго.
Наверняка для таких опытных дядек как вы будет не сложно увидеть где я промахнулся, и как довести дело до ума. И когда все заработает, с вашей помощью, из этой темы получится как раз так и хороший, работающий тутор для новичков.
Поехали!

В серверной части:
Идем в effects.cpp и в самом низу добавляем класс:

C++ Source Code:
1
[COLOR=blue]
2
class CEnvSky : public CBaseEntity
3
{
4
public:
5
  void Activate( void );
6
  void Think( void );
7
};
8
 
9
void CEnvSky :: Activate ( void )
10
{
11
  pev->effects |= EF_NODRAW;
12
  pev->nextthink = gpGlobals->time + 1.0;
13
}
14
 
15
extern int gmsgSetSky;
16
 
17
void CEnvSky :: Think ()
18
{
19
  MESSAGE_BEGIN(MSG_BROADCAST, gmsgSetSky, NULL);
20
  WRITE_BYTE(1); // mode
21
  WRITE_COORD(pev->origin.x); // view position
22
  WRITE_COORD(pev->origin.y);
23
  WRITE_COORD(pev->origin.z);
24
  MESSAGE_END();
25
}
26
 
27
LINK_ENTITY_TO_CLASS( env_sky, CEnvSky );

[/COLOR]

затем идем в player.cpp и после строки

C++ Source Code:
int gmsgTeamNames = 0;

Вставляем:

C++ Source Code:
[COLOR=blue]int gmsgSetSky = 0;	[/COLOR]


Далее в том же файле, после строки
C++ Source Code:
gmsgSelAmmo = REG_USER_MSG("SelAmmo", sizeof(SelAmmo));

вставляем:
C++ Source Code:
[color=blue]
gmsgSetSky = REG_USER_MSG( "SetSky", 7 );[/color]


На этом с серверной частью закончено (НАДЕЮСЬ) , компилируем

Идем в Клиентский длл
тут немного побольше копи-пасты

Открываем hud.cpp
находим
C++ Source Code:
//DECLARE_MESSAGE(m_Logo, Logo)
int __MsgFunc_ResetHUD(const char *pszName, int iSize, void *pbuf)
{
  return gHUD.MsgFunc_ResetHUD(pszName, iSize, pbuf );
}

и после этого кода вставляем код для нашего 3д-неба:

C++ Source Code:
[color=blue]int __MsgFunc_SetSky(const char *pszName, int iSize, void *pbuf)
{
  gHUD.MsgFunc_SetSky( pszName, iSize, pbuf );
  return 1;
}[/color]


В этом же файле находим срочку:
C++ Source Code:
HOOK_MESSAGE( Concuss );

и после нее вставляем нашу:
C++ Source Code:
[color=blue]
HOOK_MESSAGE( SetSky );[/color]


Теперь идем в файл hud.h
и перед строчкой:
C++ Source Code:
class CHud


вставляем:
C++ Source Code:
[color=blue]
#define SKY_OFF 0
#define SKY_ON  1 [/color]


в этом же файле, теперь после строки:
C++ Source Code:
int GetNumWidth(int iNumber, int iFlags);

вставляем:
C++ Source Code:
[color=blue]
Vector	m_vecSkyPos;
int		m_iSkyMode; [/color]


дальше, в этом же файле, находим:
C++ Source Code:
int  _cdecl MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf );

и ниже вставляем:
C++ Source Code:
[color=blue]
void _cdecl MsgFunc_SetSky( const char *pszName, int iSize, void *pbuf );
[/color]


теперь идем в файл hud_msg.cpp
находим:
C++ Source Code:
void CHud :: MsgFunc_InitHUD( const char *pszName, int iSize, void *pbuf )
{

и после открывающей скобки ниже добавляем:

C++ Source Code:
[color=blue]
m_iSkyMode = SKY_OFF;[/color]


ДОЛЖНО ПОЛУЧИТЬСЯ:
C++ Source Code:
1
void CHud :: MsgFunc_InitHUD( const char *pszName, int iSize, void *pbuf )
2
{
3
 
4
  m_iSkyMode = SKY_OFF;
5
 
6
  // prepare all hud data
7
  HUDLIST *pList = m_pHudList;
8
 
9
  while (pList)
10
  {
11
    if ( pList->p )
12
      pList->p->InitHUDData();
13
    pList = pList->pNext;
14
  }
15
 
16
  //Probably not a good place to put this.
17
  pBeam = pBeam2 = NULL;
18
}


и после данного кода ниже вставляем:

C++ Source Code:
1
[color=blue]
2
void CHud :: MsgFunc_SetSky( const char *pszName, int iSize, void *pbuf )
3
{
4
  //	CONPRINT("MSG:SetSky");
5
  BEGIN_READ( pbuf, iSize );
6
 
7
  m_iSkyMode = READ_BYTE();
8
  m_vecSkyPos.x = READ_COORD();
9
  m_vecSkyPos.y = READ_COORD();
10
  m_vecSkyPos.z = READ_COORD();
11
}[/color]


На этом пока всё,
уважаемые кодеры, помогите плиз доделать тутор


Отправлено XaeroX 28-01-2014 в 09:52:

Поиск m_vecSkyPos и m_iSkyMode по клиентскому проекту нашёл только вышеперечисленные строки?
Почему тебя совершенно не смущает, что в переменную m_vecSkyPos что-то записывается, но нигде не читается?

__________________

xaerox on Vivino


Отправлено vitoss 28-01-2014 в 10:04:

Цитата:
XaeroX писал:
Поиск m_vecSkyPos и m_iSkyMode по клиентскому проекту нашёл только вышеперечисленные строки?
Почему тебя совершенно не смущает, что в переменную m_vecSkyPos что-то записывается, но нигде не читается?

Цитата:
vitoss писал:
Не судите строго.



щас проверю

Добавлено 28-01-2014 в 18:04:

ПРОДОЛЖЕНИЕ

открываем view.cpp
находим
C++ Source Code:
void V_CalcNormalRefdef ( struct ref_params_s *pparams )

и в самый конец
вставляем:
C++ Source Code:
1
[color=blue]
2
if (gHUD.m_iSkyMode == SKY_ON && pparams->nextView == 0)
3
{
4
  pparams->vieworg[0] = gHUD.m_vecSkyPos.x;
5
  pparams->vieworg[1] = gHUD.m_vecSkyPos.y;
6
  pparams->vieworg[2] = gHUD.m_vecSkyPos.z;
7
  pparams->nextView = 1;
8
}
9
[/color]


потом в этом же файле находим
C++ Source Code:
view = gEngfuncs.GetViewModel();

и после нее вставляем:
C++ Source Code:
1
[color=blue]
2
if (gHUD.m_iSkyMode == SKY_ON)
3
{
4
  savedviewmodel = view->model;
5
  view->model = NULL;
6
}
7
[/color]


Компилируем, однако, небо все еще не отображается


Отправлено XaeroX 28-01-2014 в 10:35:

В общем, ход рассуждений я тебе показал.
Тыкать носом в каждую переменную, которую надо дополнительно "пробить", у меня желания нет. Если у кого есть - you are welcome.

__________________

xaerox on Vivino


Отправлено vitoss 28-01-2014 в 11:01:

Цитата:
XaeroX писал:
В общем, ход рассуждений я тебе показал.
Тыкать носом в каждую переменную, которую надо дополнительно "пробить", у меня желания нет. Если у кого есть - you are welcome.

Понятное дело
Все равно большое спасибо, Xaerox, за подсказки!


Отправлено vitoss 28-01-2014 в 17:47:

ВСЕ!! МОЖНО СЧИТАТЬ ТУТОР ЗАКОНЧЕНЫМ И РАБОЧИМ!!!
я просто все это время компилировал cl_dll не в ту папку....



Отправлено Government-Man 28-01-2014 в 19:29:

В спирите плохое небо - там прострая проекция. Какое небо в новом ксаше не знаю, а вот в "Мести тещи" небо как в HL2 - оно трехмерное и выглядит как часть основной геометрии.


Отправлено Дядя Миша 28-01-2014 в 19:34:

Цитата:
Government-Man писал:
Какое небо в новом ксаше не знаю

Ты и ксаш-мод то не качал, иначе бы не говорил такого.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Government-Man 28-01-2014 в 19:37:

Цитата:
Дядя Миша писал:
Ты и ксаш-мод то не качал, иначе бы не говорил такого.


Мод не качал, потому и говорю, что не знаю. Может там тоже хорошее небо. Но тут чувак из спирита небо переносит - оно ж там фейковое.


Отправлено Дядя Миша 28-01-2014 в 19:44:

Найди границу между небом и реальным уровнем

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено vitoss 28-01-2014 в 20:06:

а что за месть тещи?


Отправлено Дядя Миша 28-01-2014 в 20:23:

Мод Government-Man, который он пытался выдать за чужой.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Government-Man 28-01-2014 в 21:12:

Цитата:
Дядя Миша писал:
Мод Government-Man, который он пытался выдать за чужой.


Ну да, ну да. Знаешь, если следовать твоей логике, то мотороллер - тоже того чувака, который объяву разместил.

Цитата:
Дядя Миша писал:
Найди границу между небом и реальным уровнем


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


Отправлено pRoxxx 28-01-2014 в 22:16:

Цитата:
Government-Man писал:
А слабо сделать так, чтобы цытадель посреди уровня прямо из земли росла, причем земля была бы уровнем, а цытадель - небом?

Мне нет.


Отправлено Дядя Миша 29-01-2014 в 15:46:

Цитата:
Government-Man писал:
Знаешь, если следовать твоей логике, то мотороллер - тоже того чувака, который объяву разместил.

Следственные мероприятия с чуваком проводили? С тобой тоже нет.
Цитата:
Government-Man писал:
А слабо сделать так, чтобы цытадель посреди уровня прямо из земли росла, причем земля была бы уровнем, а цытадель - небом?

Не вижу в этом реальной необходимости, ведь коллидить с такой цитаделью не получится. Идея неба в том, чтобы реалистично рисовать удалённые объекты, до которых нельзя добраться. А если она растёт посреди уровня, то до нее можно добраться и убедиться, что она ненастоящяя. К тому же я не вполне понимаю задумку, небо ведь не пишется в Z-Buffer.

Добавлено 29-01-2014 в 19:46:

Цитата:
pRoxxx писал:
Мне нет.

Ну тебя никто за язык не тянул - делай

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 02:02. Страницы (2): [1] 2 »
Показать все 25 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024