Проблема с v_model

padro chill~

Участник
Сообщения
0
Реакции
1
Всем привет! Столкнулся с проблемой в виде "перелома" модельки ножа в CS: Source.
Я пытался настраивать эти самые jigglebone, пытался как-то исправлять сами кости модели в Blender и MilkShape 3D - всё без толку.
Я проверял модель в CS:GO - там все нормально даже с большими значениями jigglebone.
Проверял так же в Garry's Mod - тоже все хорошо работает и ничего не ломается.

Я не мог просто пройти мимо этой модельки и не портировать её, тем более без физики.
Если эту проблему с "переломом" ну никак не исправить и это все особенность движка самой CS: Source - то придется убрать jigglebone совсем :-(

Всем спасибо за внимание.

P.S: да, мне нечем заняться

 
Последнее редактирование:

kolkazadrot

Ведь я всего-лишь апельсин Вас миллион, а я один
Сообщения
369
Реакции
522
Ну с jiggle bone нужно играться, думаю в этом и проблема
 

padro chill~

Участник
Сообщения
0
Реакции
1
Ну с jiggle bone нужно играться, думаю в этом и проблема
Ну игрался я с jigglebone - толку 0.
Даже на минимальных значениях у модели случается "перелом".
Помогает только полное удаление jigglebone из qc файла.
Мне бы знать:
1) Можно ли это как то исправить?
2) Или дело в самом движке в самой игре?
Если исправить ну никак нельзя и это особенности самого движка - ну и хер с ним.
 

kolkazadrot

Ведь я всего-лишь апельсин Вас миллион, а я один
Сообщения
369
Реакции
522
Ну игрался я с jigglebone - толку 0.
Даже на минимальных значениях у модели случается "перелом".
Помогает только полное удаление jigglebone из qc файла.
Мне бы знать:
1) Можно ли это как то исправить?
2) Или дело в самом движке в самой игре?
Если исправить ну никак нельзя и это особенности самого движка - ну и хер с ним.
css 34 или steam?
 

padro chill~

Участник
Сообщения
0
Реакции
1
Есть некоторые успехи.
Удалось снизить вероятность "перелома" путем ограничения fps на анимациях удара с 30 до 25 fps, увеличение fadein и fadeout с 0.2 до 0.4 и удалением строчки snap.
При таком раскладе вероятность "перелома" модели меньше, но полностью пофиксить "перелом" у меня так и не получилось, что бы я не делал и не пробовал.
ИТОГ:
Я больше всего грешу на движок игры и на свою неопытность.
Сообщения автоматически склеены:

Я только сейчас задумался, что я всё это время пытался исправить перелом конской елды уже почти неделю...
Зато у игроков теперь появится такой прекрасный и интересный нож не только в CS:GO, но и в CS:Source.



пиздец...
 
Последнее редактирование:

Natasha Heide

Добрая душа
Сообщения
88
Реакции
102
Так и должно быть, потому что на CS:Source нет фикса, который исправляет переломы костей, и соответствующего cvar-а - cl_jiggle_bone_sanity
 

DENZEL519

Работаю с AI !
Сообщения
417
Реакции
198
@padro chill~, хз может поможет

2. Исправление модели ножа (Blender/MilkShape)


A. Веса костей (vertex weights)

  • В Blender выделите модель ножа, перейдите в Weight Paint.
  • Убедитесь, что вершины ножа не привязаны к лишним костям (например, к костям руки).
  • Если нож "ломается" при анимации, возможно, некоторые вершины имеют неправильные веса (например, 0.5 на две кости → вызывает разрыв).

B. Параметры jiggle bones в QC-файле

Если нож использует jiggle bones (например, для цепи или подвески), попробуйте:

  1. Открыть QC-файл ножа в текстовом редакторе.
  2. Найти блок $jigglebone и закомментировать его:


    C-подобный:
    // $jigglebone "bone_name" { ... }
  3. Перекомпилировать модель через Crowbar или ** studiomdl**.

3. Проверка анимаций (через .smd)

  • Откройте анимации (idle, draw, attack) в MilkShape/Blender.
  • Убедитесь, что кости ножа не имеют резких поворотов (например, на 90°+ за 1 кадр → вызывает артефакты).
  • Если нож "ломается" при переключении, возможно, последний кадр анимации не совпадает с первым.

$jigglebone "blade_jiggle" {
stretchforce 0.05 // сила растяжения
compressionforce 0.05 // сила сжатия
dampenfactor 0.7 // фактор демпфирования (гашение колебаний)
externalinfluence 0.01 // внешняя сила воздействия
}

$jigglebone "handle_jiggle" {
stretchforce 0.05
compressionforce 0.05
dampenfactor 0.7
externalinfluence 0.01
}


ХЗ поможет:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

stock bool IsValidClient(int client)
{
    return (client > 0 && client <= MaxClients && IsClientInGame(client));
}

public Plugin myinfo =
{
    name = "Knife Model Fix",
    author = "Tester",
    description = "Fixes broken knife model",
    version = "1.0",
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if (IsValidClient(client))
    {
 
        int weapon = GetPlayerWeaponSlot(client, 2);
        if (weapon != -1)
        {
            SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", -1);
            CreateTimer(0.1, Timer_ResetKnife, client);
        }
    }
}

public Action Timer_ResetKnife(Handle timer, int client)
{
    if (IsValidClient(client))
    {
        int weapon = GetPlayerWeaponSlot(client, 2);
        if (weapon != -1)
        {
            SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", weapon);
        }
    }
    return Plugin_Continue;
}

ИЛИ

C-подобный:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

ConVar g_cvJiggleSanity;

public Plugin myinfo =
{
    name = "Jiggle Bone Sanity Fix for CSS",
    author = "Tester",
    description = "Adds CS:GO-like jiggle bone sanity to CSS",
    version = "1.0",
};

public void OnPluginStart()
{
 
    g_cvJiggleSanity = CreateConVar(
        "sm_jiggle_bone_sanity",
        "1",
        "Enable jiggle bone sanity (0 - off, 1 - normal, 2 - strict)",
        FCVAR_CHEAT,
        true, 0.0, true, 2.0
    );

    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if (!IsValidClient(client)) return;

 
    CreateTimer(0.1, Timer_ResetJiggleBones, client);
}

public Action Timer_ResetJiggleBones(Handle timer, int client)
{
    if (!IsValidClient(client)) return Plugin_Stop;

    int sanityMode = g_cvJiggleSanity.IntValue;
    if (sanityMode == 0) return Plugin_Stop;

 
    int entity = -1;
    while ((entity = FindEntityByClassname(entity, "*")) != -1)
    {
    
        if (sanityMode == 1)
        {
        
            SetEntPropFloat(entity, Prop_Data, "m_flJiggleBoneStrength", 0.5);
        }
        else if (sanityMode == 2)
        {
        
            SetEntPropFloat(entity, Prop_Data, "m_flJiggleBoneStrength", 0.2);
        }
    }

    return Plugin_Continue;
}

stock bool IsValidClient(int client)
{
    return (client > 0 && client <= MaxClients && IsClientInGame(client));
}

Добавляет консоль команду sm_jiggle_bone_sanity
  • 0 – Jiggle-кости работают без ограничений (как cl_jiggle_bone_enable 1).
  • 1 – "Нормальный" режим (аналог CS:GO, умеренное ограничение).
  • 2 – "Строгий" режим (сильное ограничение, почти нет дрожания).
 
Последнее редактирование:
Сверху Снизу