Добавить коллизию модели

Arthur Don

Участник
Сообщения
1,696
Реакции
256
Текст ошибки
-
Список мета-модулей
-
Список плагинов SM
-
Список расширений SM
-
Есть моделька из source filmmaker.
Хочу ее добавить в ксго, но не нашел нормальных видео на русском.
Можете кто подсказать? Или на английском но чтобы было не долго.

И после добавления коллизии больше ничего с ней не нужно делать для нормальной работы?
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Минусы ставить не обязательно было...
И после добавления коллизии больше ничего с ней не нужно делать для нормальной работы?
Если кости не такие, как в КСГО или просто не привязаны, этим заниматься. Всё не настолько просто, как 2+2.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Минусы ставить не обязательно было...

Если кости не такие, как в КСГО или просто не привязаны, этим заниматься. Всё не настолько просто, как 2+2.
Вопрос такой у самой модельки коллизия есть. Но если установить ее игроку коллизию игроку то коллизия остается прежней. Можно как-то установить игроку коллизию объекта после установки модели?
 

Shid0

🦾 Свет даëт мне сил!
Сообщения
1,130
Реакции
1,255
Вопрос такой у самой модельки коллизия есть. Но если установить ее игроку коллизию игроку то коллизия остается прежней. Можно как-то установить игроку коллизию объекта после установки модели?
Объект prop_physics или prop_dynamic?
Сообщения автоматически склеены:

У вас в плагине есть заморозка объекта? Обычно при заморозке коллизия накладывается.
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Объект prop_physics или prop_dynamic?
Сообщения автоматически склеены:

У вас в плагине есть заморозка объекта? Обычно при заморозке коллизия накладывается.
Честно я без понятия prop_physics или prop_dynamic.
Я использую Zipcore / Prophunt
Для поиска текстур GCFScape.exe и методом тыка проверял искал нужные мне текстуры от карты.
Когда начал тестить обнаружил что у всех объектов коллизия игрока но если текстуру заставить то у нее родная коллизия.
Пробивал DispatchKeyValue(iClient, "Solid", "0"); коллизия отключается но если попробовать другое значение то эффект тот же коллизия конкретно игрока.
(Самые умные игроки вместо того чтобы искать бегают и проверяют объекты на коллизию)

Насколько я понял именно эта часть кода выдает игроку текстуру.
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]);
    
    //DispatchKeyValue(iClient, "Solid", "3"); //Мои попытки
    
    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();
}
Сообщения автоматически склеены:

Методом тыка выяснил следующие.
Client_ReCreateFakeProp(iClient); выдает конкретно модель
C-подобный:
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;
    
    //Create Fake Model
    int iEntity = CreateEntityByName("prop_physics_override");
    
    if (IsValidEntity(iEntity))
    {
        DispatchKeyValue(iEntity, "physdamagescale", "0.0");
        DispatchKeyValue(iEntity, "model", m_sModel[iClient]);
        
        SetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity", iClient);
        SetEntProp(iEntity, Prop_Data, "m_CollisionGroup", 1); //если убрать сt может застрять если окажется в текстуре (Например игрок за текстуру повернется) Но все работает. Если оставит тогда сt не заостряет но коллизия сломана.
        SetEntProp(iEntity, Prop_Send, "m_usSolidFlags", 12);
        SetEntProp(iEntity, Prop_Send, "m_nSolidType", 6);
        DispatchSpawn(iEntity);
        SetEntData(iEntity, iFreeze, FL_CLIENT | FL_ATCONTROLS, 4, true);
        SetEntityMoveType(iEntity, MOVETYPE_NONE);
        SetEntPropEnt(iEntity, Prop_Data, "m_hLastAttacker", iClient);
        
        SetEntProp(iEntity, Prop_Send, "m_nSkin", m_iSkin[iClient]);
        
        FX_Render(iEntity, 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, iEntity);
        
        SetEntProp(iEntity, Prop_Data, "m_takedamage", DAMAGE_EVENTS_ONLY, 1);
        SDKHook(iEntity, SDKHook_OnTakeDamage, Hook_OnDamageFakeProp);
    }
    else Client_RemoveFakeProp(iClient);
}

SetEntProp(iEntity, Prop_Data, "m_CollisionGroup", 1); //если убрать сt может застрять если окажется в текстуре (Например игрок за текстуру повернется) Но все работает. Если оставит тогда сt не заостряет но коллизия сломана.
Что дальше делать чтобы исправить без понятия
 
Последнее редактирование:
Сверху Снизу