HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Смена модели (https://hlfx.ru/forum/showthread.php?threadid=1138)
Отправлено Ku2zoff 27-01-2008 в 17:10:
Смена модели
Итак, у меня вопрос: модель для энтити задаётся в спауне с помощью SET_MODEL или функцией движка (*g_engfuncs.pfnSetModel). Я задаю нулевую модель в спауне игрока:
SET_MODEL(ENT(pev), iStringNull );
Потом меняю её на другую аналогичным способом, вызывая SET_MODEL из CGameRules::PlayerThink, но модель не меняется. Есть ли способ сменить модель в ходе игры, не прибегая к консольной команде "model" - у меня она робит только в мультиплеере.(так надо)
З.Ы. может есть способ указать модель прямо в CStudioModelRenderer::DrawPlayer на клиенте?
Отправлено XaeroX 27-01-2008 в 17:19:
Цитата:
Ku2zoff писал:
может есть способ указать модель прямо в CStudioModelRenderer::DrawPlayer на клиенте?
Ну есть, конечно. m_pRenderModel самому назначать. Чего тут сложного-то?__________________
Отправлено Дядя Миша 31-01-2008 в 13:20:
Ku2zoff игроку модельку так просто не сменишь.
Если ты обратил внимание - движок её даже не кэширует при смене.
Отправлено XaeroX 31-01-2008 в 14:31:
Дядя Миша можно,можно, в студиорендере. А ее можно получить через Mod_ForName или что-то вроде того 
__________________
Отправлено Дядя Миша 31-01-2008 в 14:50:
XaeroX дык я и не спорю что можно.
Я имел в виду, что это не так-то просто.
А что разве Mod_ForName есть в клиентском API 
Отправлено Ku2zoff 01-02-2008 в 16:35:
Со сменой модели я разобрался, если кому-то интересно, вот отрывок кода из CStudioModelRenderer::StudioDrawPlayer
C++ Source Code:
1 | IEngineStudio.GetTimes( &m_nFrameCount, &m_clTime, &m_clOldTime ); |
2 | IEngineStudio.GetViewInfo( m_vRenderOrigin, m_vUp, m_vRight, m_vNormal ); |
3 | IEngineStudio.GetAliasScale( &m_fSoftwareXScale, &m_fSoftwareYScale ); |
5 | m_nPlayerIndex = pplayer->number - 1; |
7 | if (m_nPlayerIndex < 0 || m_nPlayerIndex >= gEngfuncs.GetMaxClients()) |
10 | //==================================================================== |
11 | //Use different player models when player has or hasn't suit |
12 | //==================================================================== |
14 | struct model_s *new_mdl; |
16 | if (!(gHUD.m_iHideHUDDisplay & ITEM_SUIT )) |
17 | new_mdl = gEngfuncs.CL_LoadModel( "models/player/player_sci.mdl", NULL ); |
19 | new_mdl = gEngfuncs.CL_LoadModel( "models/player/player_hev.mdl", NULL ); |
21 | if (m_pCvarDeveloper->value || gEngfuncs.GetMaxClients() != 1) |
22 | m_pRenderModel = IEngineStudio.SetupPlayerModel( m_nPlayerIndex ); |
24 | m_pCurrentEntity->model = new_mdl; |
25 | m_pRenderModel = m_pCurrentEntity->model; |
27 | //==================================================================== |
28 | //==================================================================== |
29 | m_pStudioHeader = (studiohdr_t *)IEngineStudio.Mod_Extradata (m_pRenderModel); |
30 | IEngineStudio.StudioSetHeader( m_pStudioHeader ); |
31 | IEngineStudio.SetRenderModel( m_pRenderModel ); |
33 | if (pplayer->gaitsequence) |
36 | m_pPlayerInfo = IEngineStudio.PlayerInfo( m_nPlayerIndex ); |
38 | VectorCopy( m_pCurrentEntity->angles, orig_angles ); |
40 | StudioProcessGait( pplayer ); |
42 | m_pPlayerInfo->gaitsequence = pplayer->gaitsequence; |
45 | StudioSetUpTransform( 0 ); |
46 | VectorCopy( orig_angles, m_pCurrentEntity->angles ); |
Отправлено XaeroX 01-02-2008 в 16:54:
Дядя Миша что-то такое было, да. Оно не в енгфунксах, а в студио апи.
__________________
Отправлено Дядя Миша 02-02-2008 в 16:27:
XaeroX там только из кэша доставать, не?
Отправлено XaeroX 02-02-2008 в 17:47:
Дядя Миша если нет в кэше - он загрузит, ну как обычно в общем.
__________________
Отправлено Дядя Миша 02-02-2008 в 18:14:
Сейчас проверил. Да, действительно есть. Даже в кэш можно грузить принудительно.
Отправлено XaeroX 02-02-2008 в 19:31:
Дядя Миша ты думал, я хочу тебя обмануть? 
__________________
Отправлено Дядя Миша 02-02-2008 в 20:11:
Каждый Дядя Миша имеет право сомневаться и проверять все лично 