Визуально пропадает модель при движении

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);
}

Это можно исправить или сами модели такие?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
получать векторы с помощью трёх KvGetFloat() вместо одного KvGetVector()

тамада хороший и конкурсы интересные 🤔
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
получать векторы с помощью трёх KvGetFloat() вместо одного KvGetVector()

тамада хороший и конкурсы интересные 🤔
Так у меня вреде как именно KvGetFloat() используется, KvGetVector() в коде вообще не используется.
C-подобный:
     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);
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@oleg_nelasy, я к тому что можно использовать в конфиге один ключ для всех трёх коодинат:
C-подобный:
"offset" "0.0 0.0 0.0"
"rotation" "0.0 0.0 0.0"
И читать в массив за раз все три координаты:
C-подобный:
KvGetVector(g_kvModels, "offset", m_fOffset[iClient]);
KvGetVector(g_kvModels, "rotation", m_fAngle[iClient]);
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Может кто подсказать несколько моделей для теста модель, у которой есть несколько скинов. Охото проверить проблема в плагине или в самой модели прежде переписывать плагин.
 
Сверху Снизу