prop_ragdoll + SetEntityModel

Banana

Участник
Сообщения
892
Реакции
113
Создаю труп с скином игрока.
C-подобный:
int tempRag = CreateEntityByName("prop_ragdoll");
            char sModelName[PLATFORM_MAX_PATH];
            GetClientModel(client, sModelName, sizeof(sModelName));
            DispatchKeyValue(tempRag, "model", sModelName);
            DispatchSpawn(tempRag);

После создания "куклы" я хочу изменить ее облик (модель)... на другую модель в игре (скин игрока)...
Пробовал через SetEntityModel - получилось, но модель отображается крайне странно - как-будто скелет остался от старой модели и она выглядит как ракушка.. непропорциональное тело куклы.
Кто знает как это исправить? или как правильно поменять модель prop_ragdoll не пересоздавая ее.
 

GeTtOo

Участник
Сообщения
10
Реакции
35
После создание "куклы", с ней уже мало, что можно сделать (насколько я знаю)

Поэтому как то так:
C-подобный:
int csr = GetEntPropEnt(clientid, Prop_Send, "m_hRagdoll", 0);
if (csr != -1) AcceptEntityInput(csr, "Kill", -1, -1);

char model[128], bodygroup[12], skin[12];
GetEntPropString(clientid, Prop_Data, "m_ModelName", model, sizeof(model));
IntToString(GetEntProp(clientid, Prop_Send, "m_nBody"), bodygroup, sizeof(bodygroup));
IntToString(GetEntProp(clientid, Prop_Send, "m_nSkin"), skin, sizeof(skin));

int ssr = CreateEntityByName("prop_ragdoll");
if (ssr != -1)
{
    DispatchKeyValue(ssr, "model", model);
    DispatchKeyValue(ssr, "body", bodygroup);
    DispatchKeyValue(ssr, "skin", skin);
    DispatchKeyValue(ssr, "spawnflags", "4");
    DispatchSpawn(ssr);

    float vectorArr[3], angleArr[3];

    GetEntPropVector(clientid, Prop_Send, "m_vecOrigin", vectorArr);
    GetClientEyeAngles(clientid, angleArr);

    TeleportEntity(ssr, vectorArr, angleArr, NULL_VECTOR);
}
 

Banana

Участник
Сообщения
892
Реакции
113
После создание "куклы", с ней уже мало, что можно сделать (насколько я знаю)

Поэтому как то так:
C-подобный:
int csr = GetEntPropEnt(clientid, Prop_Send, "m_hRagdoll", 0);
if (csr != -1) AcceptEntityInput(csr, "Kill", -1, -1);

char model[128], bodygroup[12], skin[12];
GetEntPropString(clientid, Prop_Data, "m_ModelName", model, sizeof(model));
IntToString(GetEntProp(clientid, Prop_Send, "m_nBody"), bodygroup, sizeof(bodygroup));
IntToString(GetEntProp(clientid, Prop_Send, "m_nSkin"), skin, sizeof(skin));

int ssr = CreateEntityByName("prop_ragdoll");
if (ssr != -1)
{
    DispatchKeyValue(ssr, "model", model);
    DispatchKeyValue(ssr, "body", bodygroup);
    DispatchKeyValue(ssr, "skin", skin);
    DispatchKeyValue(ssr, "spawnflags", "4");
    DispatchSpawn(ssr);

    float vectorArr[3], angleArr[3];

    GetEntPropVector(clientid, Prop_Send, "m_vecOrigin", vectorArr);
    GetClientEyeAngles(clientid, angleArr);

    TeleportEntity(ssr, vectorArr, angleArr, NULL_VECTOR);
}
AcceptEntityInput(csr, "Kill", -1, -1); - чем отличается от AcceptEntityInput(csr, "Kill"); ? разве по умолчанию там не -1 ?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Banana, всё так.
C-подобный:
/**
 * Invokes a named input method on an entity.
 *
 * After completion (successful or not), the current global variant is re-initialized.
 *
 * @param dest          Destination entity index.
 * @param input         Input action.
 * @param activator     Entity index which initiated the sequence of actions (-1 for a NULL entity).
 * @param caller        Entity index from which this event is sent (-1 for a NULL entity).
 * @param outputid      Unknown.
 * @return              True if successful otherwise false.
 * @error               Invalid entity index or no mod support.
 */
native bool AcceptEntityInput(int dest, const char[] input, int activator=-1, int caller=-1, int outputid=0);
 
Сверху Снизу