HLFX.Ru Forum
Показать все 34 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- weapon Attachment (https://hlfx.ru/forum/showthread.php?threadid=275)


Отправлено Fox 30-05-2006 в 15:20:

weapon Attachment

Народ подскажите, как мне получить координаты атачмента у оружия (например, Glock) в данный момент времени. Я не понимаю, как получить доступ к нужной мне модели - v_9mmhandgun.md. Пробовал функциеей GetAttachment(int, Vector, Vector) из CGlock, но я так понял что моделью CGlock является w_9mmhandgun.mdl, которая не имеет атачмента, что приводит к вылетанию из игры. Через m_pPlayer тоже ничего не выходит. Как быть?


Отправлено XaeroX 30-05-2006 в 15:37:

Fox
на сервере этого сделать, по-видимому, нельзя. Но зато можно на клиенте:

C++ Source Code:
cl_entity_t *viewmodel = gEngfuncs.GetViewModel();
return viewmodel->model->attachment[i];

Если ты хочешь прицепить к модели лучи, это нужно делать именно на клиенте. Или скажем, mullzeflash - смотри ф-ю HUD_StudioEvent в entity.cpp на клиенте.

__________________

xaerox on Vivino


Отправлено Fox 30-05-2006 в 15:44:

Спасибо! Теперь понял. А не знаешь где можно найти хоть какое-нибудь описание SDK (Иерархия классов, назначение функций, переменных), а то прилагаемые комментарии бывают достаточно скудными? И еще мне интересно, по каким правилам они именуют переменные.


Отправлено XaeroX 30-05-2006 в 16:00:

Цитата:
Fox писал:
А не знаешь где можно найти хоть какое-нибудь описание SDK (Иерархия классов, назначение функций, переменных), а то прилагаемые комментарии бывают достаточно скудными?

Вообще такого вроде нет, по крайней мере я не встречал. Так из названия и описания классов вроде понятна их иерархия. И в cbase.h есть неплохой комментарий.
Цитата:
Fox писал:
И еще мне интересно, по каким правилам они именуют переменные

В каком смысле? Как таковых правил нет, как хочешь, так и именуй.

__________________

xaerox on Vivino


Отправлено Government-Man 30-05-2006 в 16:04:

Цитата:
Как таковых правил нет, как хочешь, так и именуй.


Правил конечно нет, но есть же соглашение об именах, определенные стили кодирования.
Ну типа: имена переменных типа int начинаются с "i", Переменных-членов класса с префикса "m_", глобальных переменных - с префикса "g_", ... ну и так далее.

Называть переменные, конечно, можно как угодно, но лучше все-таки придерживаться этих простых правил (имхо).


Отправлено XaeroX 30-05-2006 в 16:32:

Government-Man вот именно - стили. У каждого программиста свой стиль (хотя он меняется со временем)
Мой например таков - локальные переменные как можно короче (s, x, y), приватные члены классов - начинать с "_", публичных и глобальных переменных стараться избегать.

__________________

xaerox on Vivino


Отправлено Government-Man 30-05-2006 в 16:37:

Так или иначе в HL SDK они названы так, как я писал выше...


Отправлено Дядя Миша 30-05-2006 в 16:47:

Fox на сервере можно получить аттачмент оружия (он закодирован в анимации игрока последним байтом).

code:
m_pPlayer->pev->sequence = (pev->sequence & 0x0FFF) | ((attachment&0xF)<<12);


Добавлено 30-05-2006 в 20:47:

ЗЫ. В СДК переменные именуются согласно "венгерской нотации". Перед указателем ставится префикс m_p или p.
Перед интегром - m_i или i. Перед флоатом m_f или f.
Глобальные переменные обзначаются как gp.
Вообщем-то все просто и логично, однако у этого метода есть свои противники.


Отправлено XaeroX 30-05-2006 в 16:51:

Дядя Миша там номер, наверное... А нужен же вектор.

Добавлено 30-05-2006 в 23:51:

Цитата:
Дядя Миша писал:
Глобальные переменные обзначаются как gp.

Это указатели.
Цитата:
Дядя Миша писал:
Перед флоатом m_f или f.

Или m_fl, fl

Так, оффтоп прекращаем.

__________________

xaerox on Vivino


Отправлено Fox 30-05-2006 в 17:54:

Так, насколько я понял мне нужно делать так:
В client.dll создаем функцию

C++ Source Code:
1
vec3_t GetWeaponAttachment()
2
{
3
  cl_entity_t *viewmodel = gEngfuncs.GetViewModel();
4
  return viewmodel->model->attachment[0]->org;
5
}

(Здесь я полагаю что attachment имеет вид:
C++ Source Code:
1
{
2
  char name[32];
3
  int type;
4
  int bone;
5
  vec3_t org; // attachment point
6
  vec3_t vectors[3];
7
}

но возможно я ошибаюсь?
)

В hl.dll
C++ Source Code:
1
Vector A;
2
#ifdef CLIENT_DLL
3
A=GetWeaponAttachment()
4
#endif



Все таки я не слишком понимаю систему клиент<->сервер. Пожалуй даже столкнулся с ней впервые.


Отправлено XaeroX 30-05-2006 в 18:10:

Цитата:
Fox писал:
но возможно я ошибаюсь?

Ошибаешься, на клиенте аттач - это обычный вектор. То есть:
C++ Source Code:
1
vec3_t GetWeaponAttachment()
2
{
3
  cl_entity_t *viewmodel = gEngfuncs.GetViewModel();
4
  return viewmodel->model->attachment[0];
5
}

А эффекты надо создавать через евенты, посмотри как лучи егона делаются на клиенте. Хотя зависит от того, что за эффект ты делаешь. Скажи - подумаем как лучше.

__________________

xaerox on Vivino


Отправлено Fox 30-05-2006 в 18:20:

На самом деле я не то что бы делаю эффекты, я просто изучаю SDK, но в данный момент я делаю луч лазерного прицела. С сервером было попроще я сделал пятно прицела и вернул глоку возможность загнать в ствол 18 патрон. Так как особых идей пока нет, буду добивать луч.


Отправлено Trixon 07-05-2012 в 16:33:

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

Взял здесь код, немного поправил (game_fx.cpp):

C++ Source Code:
1
vec3_t GetWeaponAttachment()
2
{
3
  cl_entity_t *viewmodel = gEngfuncs.GetViewModel();
4
  return [COLOR=deeppink]viewmodel->attachment[0];[/COLOR] //Иначе не компилируется.
5
}


Пробовал:
C++ Source Code:
1
vec3_t GetWeaponAttachment()
2
{
3
  //...
4
  return viewmodel->model->submodels->origin; //Также пробовал делать, но здесь, видимо, я совсем что-то не то намудрил. <img src="images/smilies/biggrin.gif" border="0" alt="">
5
}


Также, параллельно, поправил код (game_fx.cpp):
C++ Source Code:
1
if (Type == FIREGUN_GLOCK)
2
{
3
  //...
4
  EV_GunSmoke(GetWeaponAttachment(), GUNSMOKE_WHITE_SMALL);
5
  //...
6
}


Помогите, пожалуйста. Мучаюсь уже третий день. Может мысли какие-нибудь есть?

__________________
HL:WE


Отправлено Дядя Миша 07-05-2012 в 16:39:

В чём конкретно проблема?

__________________
My Projects: download page

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

Цитата:

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


Отправлено Trixon 07-05-2012 в 16:42:

Проблема в том, что гильзы выпадают с того МЕСТА, с которого я включаю thirdperson (вид от третьего лица) в моде HLWE (думаю, это не существенно).
Также, есть p_ модель с двумя аттачментами (перекомпилированная).

Т.е. вместо координат, в которые входит "ориджин, вперёд и т.д.", у меня стоит вектор аттачмента. Но, тем не менее, координата "замораживается".

з.ы.
Недавно присоединился к доработке мода HLWE.

__________________
HL:WE


Отправлено Дядя Миша 07-05-2012 в 16:46:

Цитата:
Trixon писал:
Проблема в том, что гильзы выпадают с того МЕСТА, с которого я включаю thirdperson

ну логично )))))
В тхирдперсоне виевмодель не рисуется и её аттачменты не обновляются.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Trixon 07-05-2012 в 16:54:

Как это исправить?
Рисуется p_ модель. Как к ней обратиться и считать её аттачменты?

__________________
HL:WE


Отправлено Ghoul [BB] 07-05-2012 в 18:09:

Мдя, насущная проблема- ка считать аттачменты из p_модели оружия???

в частности, модель игрока - она главная, модель оружия - второстепенная. И вот с главной модели мы аттачи видим, с второстепенной нет


Отправлено Дядя Миша 07-05-2012 в 18:38:

Цитата:
Trixon писал:
Рисуется p_ модель. Как к ней обратиться и считать её аттачменты?

у p_модели нету аттачментов. Аттачменты берутся из модельки игрока.
Там на этот случай сразу несколько штук.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ghoul [BB] 07-05-2012 в 19:11:

я знаю, что нет. Но добавить модели аттачменты и скомпилировать - пара минут. Ну, от силы 5...

Важно ЗАСТАВИТЬ игру видеть потом эти аттачменты. В Каунтер-страйк, начиная с самых ранних версий, это сделали: маззлфлеш крепился к модели оружия, что в руках thirdperson, а на модели игрока они были постольку-поскольку...


Отправлено Дядя Миша 07-05-2012 в 20:01:

Цитата:
Ghoul [BB] писал:
Важно ЗАСТАВИТЬ игру видеть потом эти аттачменты

да игре без разницы вообщем-то. Ну надо с p-модели, не вопрос, берите с p-модели.

Добавлено 07-05-2012 в 23:57:

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

Добавлено 08-05-2012 в 00:01:

Собственно, я хызы почему вы такую простую вещь так долго одолеть не можете?
Вот в этом коде, в StudioModelRenderer найдите функцию StudioDrawPlayer и там участок
C++ Source Code:
1
if (pplayer->weaponmodel)
2
{
3
  cl_entity_t saveent = *m_pCurrentEntity;
4
 
5
  model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel );
6
 
7
  m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (pweaponmodel);
8
  IEngineStudio.StudioSetHeader( m_pStudioHeader );
9
 
10
  StudioMergeBones( pweaponmodel);
11
 
12
  IEngineStudio.StudioSetupLighting (&lighting);
13
 
14
  StudioRenderModel( );
15
 
16
  StudioCalcAttachments( );
17
 
18
  *m_pCurrentEntity = saveent;
19
}

И поменяйте
StudioCalcAttachments()
и
*m_pCurrentEntity = saveent;
местами. Должно помочь. Я правда сам не пробывал.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ghoul [BB] 08-05-2012 в 18:56:

Ну что же, попробуем.
В принципе, задумка такова, чтобы не только "видеть" аттачмены (это первый шаг), но потом и из самой P_модели вызывать эвент (ну, как от модели для первого лица), само собой, иё надо будет анимировать.. Например, щоб работали крутящиеся стволы у мини-пушки, хроноцептра. Били лучи дисплейсера или можно было подрисовать выхлоп газов сзади рокет-лончера. (аля Крайзис)


Отправлено Дядя Миша 08-05-2012 в 20:15:

ай, вы делайте, я вам потом интересную плюшку покажу - как анимации на p-моделях проигрывать
В TFC такое есть, да и в моём римейке кваки, если присмотреться.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ghoul [BB] 08-05-2012 в 23:33:

Нет, Дядя Миша, этот метод НЕ работает...


Отправлено XaeroX 08-05-2012 в 23:39:

Ghoul [BB]
Кстати, давно спросить хотел: а где Царь? Он же вроде тебе с кодом помогал?

__________________

xaerox on Vivino


Отправлено Ghoul [BB] 09-05-2012 в 01:17:

Хотя... мой косяк. Не поправил саму модельку игрока. Всё пашет.. акбэ.. по предварительным оценкам...

А как теперь анимировать модели-то?


Отправлено Дядя Миша 09-05-2012 в 07:02:

XaeroX Царь умер...

Добавлено 09-05-2012 в 11:00:

Цитата:
Ghoul [BB] писал:
А как теперь анимировать модели-то?

Очень просто.
C++ Source Code:
1
if (pplayer->weaponmodel)
2
{
3
  mstudioseqdesc_t *pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pCurrentEntity->curstate.sequence;
4
 
5
  cl_entity_t saveent = *m_pCurrentEntity;
6
 
7
  model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel );
8
 
9
  m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (pweaponmodel);
10
  IEngineStudio.StudioSetHeader( m_pStudioHeader );
11
  // FIXME: use stristr instead
12
  if( strstr( pseqdesc->label, "shoot" ))
13
  {
14
    int iShootSequence = LookupSequence( "shoot" );
15
 
16
    if( iShootSequence != -1 )	// g-cont. plays shoot sequence on a pmodel
17
      m_pCurrentEntity->curstate.sequence = iShootSequence;
18
  }

Это измененная часть того условия. Адаптированная функция LookupSequence добавляется в класс CStudioModelRenderer
C++ Source Code:
1
int CStudioModelRenderer::LookupSequence( const char *label )
2
{
3
  if (!m_pStudioHeader)
4
    return 0;
5
 
6
  mstudioseqdesc_t	*pseqdesc;
7
 
8
  pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex);
9
 
10
  for (int i = 0; i < m_pStudioHeader->numseq; i++)
11
  {
12
    if (!stricmp( pseqdesc[ i ].label, label ))
13
      return i;
14
  }
15
  return -1;
16
}


Добавлено 09-05-2012 в 11:02:

ЗЫ, Разумеется анимация стрельбы у p_модели должна называться "shoot".
По аналогии можно сделать анимации на что угодно.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 09-05-2012 в 08:05:

Цитата:
Дядя Миша писал:
Царь умер...

Я, между прочим, серъёзно спрашиваю.

__________________

xaerox on Vivino


Отправлено Ghoul [BB] 09-05-2012 в 19:17:

Цитата:
XaeroX писал:
Ghoul [BB]
Кстати, давно спросить хотел: а где Царь? Он же вроде тебе с кодом помогал?


Царь. так уже не раз обсуждали. Свихнулся Царь. Поехал. как у нас говорят. На почве алкоголизма, изнуряющей работы и внутренних противоречий.


Отправлено XaeroX 09-05-2012 в 20:13:

Жуть какая. То есть он больше код не пишет?

__________________

xaerox on Vivino


Отправлено ~ X ~ 10-05-2012 в 09:17:

Отсюда вопрос: а где хранить индекс анимации для p_ модели? Хотя бы на клиенте (предположим, что на сервере суну в CBaseEntity и буду слать как MESSAGE).
И вообще, я могу изменять entity_state_t? Очень хочется.
Или создать в ней ссылку на свою юзердату... (o_O)

XaeroX
не пишет - К.О.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Дядя Миша 10-05-2012 в 11:25:

Цитата:
~ X ~ писал:
Отсюда вопрос: а где хранить индекс анимации для p_ модели?

Ну. В iuser1 например

__________________
My Projects: download page

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

Цитата:

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


Отправлено ~ X ~ 10-05-2012 в 20:02:

Все *юзеры заняты, ещё предложения? 8(

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ghoul [BB] 12-05-2012 в 16:56:

Цитата:
~ X ~ писал:
Все *юзеры заняты, ещё предложения? 8(


Слушай, а зачем тебе хранить-то?

Всё прекрасно работает и без хранения: с сервера шлём при выстреле из пуши мессагу, на клиенте получаем и прорисовываем эффект по аттачментам, которые на моделях...

Добавлено 12-05-2012 в 20:56:

Цитата:
XaeroX писал:
Жуть какая. То есть он больше код не пишет?


Он уже ничего не пишет. Вообще никто даже толком не знает, где он обитает - полностью обрубил все контакты с миром, дома не живёт. Мож вообще решил хадж в далёкие земли совершить...
В любом случае, ему сейчас только до кода...


Временная зона GMT. Текущее время 23:17.
Показать все 34 сообщений этой темы на одной странице

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