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 на клиенте.__________________
Отправлено Fox 30-05-2006 в 15:44:
Спасибо! Теперь понял.
А не знаешь где можно найти хоть какое-нибудь описание SDK (Иерархия классов, назначение функций, переменных), а то прилагаемые комментарии бывают достаточно скудными? И еще мне интересно, по каким правилам они именуют переменные.
Отправлено XaeroX 30-05-2006 в 16:00:
Цитата:
Fox писал:
А не знаешь где можно найти хоть какое-нибудь описание SDK (Иерархия классов, назначение функций, переменных), а то прилагаемые комментарии бывают достаточно скудными?
Вообще такого вроде нет, по крайней мере я не встречал. Так из названия и описания классов вроде понятна их иерархия. И в cbase.h есть неплохой комментарий.
Цитата:
Fox писал:
И еще мне интересно, по каким правилам они именуют переменные
В каком смысле? Как таковых правил нет, как хочешь, так и именуй.__________________
Отправлено Government-Man 30-05-2006 в 16:04:
Цитата:
Как таковых правил нет, как хочешь, так и именуй.
Правил конечно нет, но есть же соглашение об именах, определенные стили кодирования.
Ну типа: имена переменных типа int начинаются с "i", Переменных-членов класса с префикса "m_", глобальных переменных - с префикса "g_", ... ну и так далее.
Называть переменные, конечно, можно как угодно, но лучше все-таки придерживаться этих простых правил (имхо).
Отправлено XaeroX 30-05-2006 в 16:32:
Government-Man вот именно - стили. У каждого программиста свой стиль (хотя он меняется со временем)
Мой например таков - локальные переменные как можно короче (s, x, y), приватные члены классов - начинать с "_", публичных и глобальных переменных стараться избегать.
__________________
Отправлено Government-Man 30-05-2006 в 16:37:
Так или иначе в HL SDK они названы так, как я писал выше...
Отправлено Дядя Миша 30-05-2006 в 16:47:
Fox на сервере можно получить аттачмент оружия (он закодирован в анимации игрока последним байтом).
Добавлено 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
Так, оффтоп прекращаем.__________________
Отправлено Fox 30-05-2006 в 17:54:
Так, насколько я понял мне нужно делать так:
В client.dll создаем функцию
C++ Source Code:
1 | vec3_t GetWeaponAttachment() |
3 | cl_entity_t *viewmodel = gEngfuncs.GetViewModel(); |
4 | return viewmodel->model->attachment[0]->org; |
(Здесь я полагаю что attachment имеет вид:
C++ Source Code:
5 | vec3_t org; // attachment point |
но возможно я ошибаюсь?
)
В hl.dll
C++ Source Code:
Все таки я не слишком понимаю систему клиент<->сервер. Пожалуй даже столкнулся с ней впервые.
Отправлено XaeroX 30-05-2006 в 18:10:
Цитата:
Fox писал:
но возможно я ошибаюсь?
Ошибаешься, на клиенте аттач - это обычный вектор. То есть:
C++ Source Code:
1 | vec3_t GetWeaponAttachment() |
3 | cl_entity_t *viewmodel = gEngfuncs.GetViewModel(); |
4 | return viewmodel->model->attachment[0]; |
А эффекты надо создавать через евенты, посмотри как лучи егона делаются на клиенте. Хотя зависит от того, что за эффект ты делаешь. Скажи - подумаем как лучше.__________________
Отправлено Fox 30-05-2006 в 18:20:
На самом деле я не то что бы делаю эффекты, я просто изучаю SDK, но в данный момент я делаю луч лазерного прицела. С сервером было попроще я сделал пятно прицела и вернул глоку возможность загнать в ствол 18 патрон. Так как особых идей пока нет, буду добивать луч.
Отправлено Trixon 07-05-2012 в 16:33:
Собственно у меня назрел вопрос: каким образом привязать сброс гильз, маззлфлеш и т.д. конкретно к аттачам модели оружия?
Взял здесь код, немного поправил (game_fx.cpp):
C++ Source Code:
1 | vec3_t GetWeaponAttachment() |
3 | cl_entity_t *viewmodel = gEngfuncs.GetViewModel(); |
4 | return [COLOR=deeppink]viewmodel->attachment[0];[/COLOR] //Иначе не компилируется. |
Пробовал:
C++ Source Code:
1 | vec3_t GetWeaponAttachment() |
4 | return viewmodel->model->submodels->origin; //Также пробовал делать, но здесь, видимо, я совсем что-то не то намудрил. <img src="images/smilies/biggrin.gif" border="0" alt=""> |
Также, параллельно, поправил код (game_fx.cpp):
C++ Source Code:
1 | if (Type == FIREGUN_GLOCK) |
4 | EV_GunSmoke(GetWeaponAttachment(), GUNSMOKE_WHITE_SMALL); |
Помогите, пожалуйста.
Мучаюсь уже третий день. Может мысли какие-нибудь есть?__________________
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) |
3 | cl_entity_t saveent = *m_pCurrentEntity; |
5 | model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel ); |
7 | m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (pweaponmodel); |
8 | IEngineStudio.StudioSetHeader( m_pStudioHeader ); |
10 | StudioMergeBones( pweaponmodel); |
12 | IEngineStudio.StudioSetupLighting (&lighting); |
16 | StudioCalcAttachments( ); |
18 | *m_pCurrentEntity = saveent; |
И поменяйте
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]
Кстати, давно спросить хотел: а где Царь? Он же вроде тебе с кодом помогал?
__________________
Отправлено 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) |
3 | mstudioseqdesc_t *pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pCurrentEntity->curstate.sequence; |
5 | cl_entity_t saveent = *m_pCurrentEntity; |
7 | model_t *pweaponmodel = IEngineStudio.GetModelByIndex( pplayer->weaponmodel ); |
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" )) |
14 | int iShootSequence = LookupSequence( "shoot" ); |
16 | if( iShootSequence != -1 ) // g-cont. plays shoot sequence on a pmodel |
17 | m_pCurrentEntity->curstate.sequence = iShootSequence; |
Это измененная часть того условия. Адаптированная функция LookupSequence добавляется в класс CStudioModelRenderer
C++ Source Code:
1 | int CStudioModelRenderer::LookupSequence( const char *label ) |
6 | mstudioseqdesc_t *pseqdesc; |
8 | pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex); |
10 | for (int i = 0; i < m_pStudioHeader->numseq; i++) |
12 | if (!stricmp( pseqdesc[ i ].label, label )) |
Добавлено 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:
Цитата:
Дядя Миша писал:
Царь умер...
Я, между прочим, серъёзно спрашиваю.__________________
Отправлено Ghoul [BB] 09-05-2012 в 19:17:
Цитата:
XaeroX писал:
Ghoul [BB]
Кстати, давно спросить хотел: а где Царь? Он же вроде тебе с кодом помогал?
Царь. так уже не раз обсуждали. Свихнулся Царь. Поехал. как у нас говорят. На почве алкоголизма, изнуряющей работы и внутренних противоречий.
Отправлено XaeroX 09-05-2012 в 20:13:
Жуть какая. То есть он больше код не пишет?
__________________
Отправлено ~ 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 писал:
Жуть какая. То есть он больше код не пишет?
Он уже ничего не пишет. Вообще никто даже толком не знает, где он обитает - полностью обрубил все контакты с миром, дома не живёт. Мож вообще решил хадж в далёкие земли совершить...
В любом случае, ему сейчас только до кода...