oleg_nelasy
Участник
- Сообщения
- 664
- Реакции
- 46
На некоторый моделях если сменить скин с нулевого на 1 или 2. То при движении начинает преподать модель но как только остановишься она снова отрисовывается. Модели стандартные как пример "models/props/de_dust/hr_dust/dust_crates/dust_crate_style_01_37x37x74.mdl"
Функции с помощью которых устанавливает модель
Это можно исправить или сами модели такие?
Функции с помощью которых устанавливает модель
C-подобный:
void SetModel(int iClient, int index = -1)
{
// give him a random one.
char ModelPath[PLATFORM_MAX_PATH];
if(index == -1)
index = GetRandomInt(0, g_iTotalModelsAvailable - 1);
KV_JumpTo(g_kvModels, index);
KvGetSectionName(g_kvModels, ModelPath, sizeof(ModelPath));
FormatEx(m_sModel[iClient], sizeof(m_sModel[]), "models/%s.mdl", ModelPath);
KvGetString(g_kvModels, "name", m_sName[iClient], sizeof(m_sName[]), "*ERROR*");
if(StrEqual(m_sName[iClient], "*ERROR*"))
{
LogError("No name found for \"%s\"", ModelPath);
// Reset KV position
KvRewind(g_kvModels);
return;
}
m_iIndex[iClient] = index;
m_fOffset[iClient][0] = KvGetFloat(g_kvModels, "offset_x", 0.0);
m_fOffset[iClient][1] = KvGetFloat(g_kvModels, "offset_y", 0.0);
m_fOffset[iClient][2] = KvGetFloat(g_kvModels, "offset_z", 0.0);
m_fAngle[iClient][0] = KvGetFloat(g_kvModels, "rotation_x", 0.0);
m_fAngle[iClient][1] = KvGetFloat(g_kvModels, "rotation_y", 0.0);
m_fAngle[iClient][2] = KvGetFloat(g_kvModels, "rotation_z", 0.0);
KvGetColor(g_kvModels, "color", m_iColor[iClient][0], m_iColor[iClient][1], m_iColor[iClient][2], m_iColor[iClient][3]);
if(m_iColor[iClient][0] == 0 && m_iColor[iClient][1] == 0 && m_iColor[iClient][2] == 0 && m_iColor[iClient][3] == 0)
{
m_iColor[iClient][0] = 255;
m_iColor[iClient][1] = 255;
m_iColor[iClient][2] = 255;
m_iColor[iClient][3] = 255;
}
m_iSkin[iClient] = KvGetNum(g_kvModels, "skin", 0);
m_iWeight[iClient] = KvGetNum(g_kvModels, "weight", 10);
m_iHP[iClient] = KvGetNum(g_kvModels, "hp", 100);
SetEntityHealth(iClient, m_iHP[iClient]);
m_fSpeed[iClient] = KvGetFloat(g_kvModels, "speed", 1.0);
SpeedRules_ClientResetName(iClient, "hider_model"); // Remove speed rules of other models first
SpeedRules_ClientAdd(iClient, "hider_model", SR_Base, m_fSpeed[iClient], -1.0, 0); // Set rule for base speed
m_fGravity[iClient] = KvGetFloat(g_kvModels, "gravity", 1.0);
SetEntityGravity(iClient, m_fGravity[iClient]);
delete g_hAutoFreezeTimers[iClient];
Client_ReCreateFakeProp(iClient);
// Reset KV position
KvRewind(g_kvModels);
g_iModelChangeCount[iClient]++;
// Show model name in chat
CPrintToChat(iClient, "%s %t", PREFIX, "whoami", m_sName[iClient]);
Call_StartForward(g_OnHiderSetModel);
Call_PushCell(iClient);
Call_Finish();
}
void Client_ReCreateFakeProp(int iClient)
{
static int iFreeze = -1;
if(iFreeze == -1)
iFreeze = FindSendPropInfo("CBasePlayer", "m_fFlags");
Client_RemoveFakeProp(iClient);
if(g_bBlockFakeProp[iClient])
return;
/*int GetCollis = GetEntProp(iClient, Prop_Data, "m_CollisionGroup");
PrintToChatAll("Колизия Игрока до = [%d]", GetCollis);\
SetEntProp(iClient, Prop_Data, "m_CollisionGroup", 1);
GetCollis = GetEntProp(iClient, Prop_Data, "m_CollisionGroup");
PrintToChatAll("Колизия Игрока после = [%d]", GetCollis);*/
//Create Fake Model
g_iEntity[iClient] = CreateEntityByName("prop_physics_override");
//int GetCollis = GetEntProp(g_iEntity[iClient], Prop_Data, "m_CollisionGroup");
//PrintToChatAll("Колизия модели игрока %N до = [%d]", iClient, GetCollis);
if (IsValidEntity(g_iEntity[iClient]))
{
DispatchKeyValue(g_iEntity[iClient], "physdamagescale", "0.0");
DispatchKeyValue(g_iEntity[iClient], "model", m_sModel[iClient]);
SetEntPropEnt(g_iEntity[iClient], Prop_Send, "m_hOwnerEntity", iClient);
SetEntProp(g_iEntity[iClient], Prop_Data, "m_CollisionGroup", 1);
SetEntProp(g_iEntity[iClient], Prop_Send, "m_usSolidFlags", 12);
SetEntProp(g_iEntity[iClient], Prop_Send, "m_nSolidType", 6);
DispatchSpawn(g_iEntity[iClient]);
SetEntData(g_iEntity[iClient], iFreeze, FL_CLIENT | FL_ATCONTROLS, 4, true);
SetEntityMoveType(g_iEntity[iClient], MOVETYPE_NONE);
SetEntPropEnt(g_iEntity[iClient], Prop_Data, "m_hLastAttacker", iClient);
SetEntProp(g_iEntity[iClient], Prop_Send, "m_nSkin", m_iSkin[iClient]);
SetEntProp(iClient, Prop_Data, "m_CollisionGroup", 1);
FX_Render(g_iEntity[iClient], view_as<FX>(FxDistort), m_iColor[iClient][0], m_iColor[iClient][1], m_iColor[iClient][2], view_as<Render>(RENDER_TRANSADD), m_iColor[iClient][3]);
Client_SetFakeProp(iClient, g_iEntity[iClient]);
SetEntProp(g_iEntity[iClient], Prop_Data, "m_takedamage", DAMAGE_EVENTS_ONLY, 1);
SDKHook(g_iEntity[iClient], SDKHook_OnTakeDamage, Hook_OnDamageFakeProp);
//GetCollis = GetEntProp(iClient, Prop_Data, "m_CollisionGroup");
// PrintToChatAll("Колизия Игрока финал = [%d]", GetCollis);
//GetCollis = GetEntProp(g_iEntity[iClient], Prop_Data, "m_CollisionGroup");
//PrintToChatAll("Колизия модели игрока %N финал = [%d]", iClient, GetCollis);
}
else Client_RemoveFakeProp(iClient);
}
Это можно исправить или сами модели такие?