Nekro
Терра инкогнита
- Сообщения
- 4,025
- Реакции
- 2,260
Трассировка не видит регдол игрока
1. Пробовал варианты фильтров TR_TraceRayFilter source-sdk-2013/bspflags.h at master · ValveSoftware/source-sdk-2013
2. Гугл молвит, что нельзя поймать регдол https://forums.alliedmods.net/showthread.php?t=247568
3. Велв https://developer.valvesoftware.com/wiki/Prop_ragdoll
4. Пробовал и GetClientAimTarget, но нет. Так же индекс 0
Подскажите пожалуйста, можно ли поймать регдол игрока и воздействовать на него? В данном случаи удалить
1. Пробовал варианты фильтров TR_TraceRayFilter source-sdk-2013/bspflags.h at master · ValveSoftware/source-sdk-2013
2. Гугл молвит, что нельзя поймать регдол https://forums.alliedmods.net/showthread.php?t=247568
3. Велв https://developer.valvesoftware.com/wiki/Prop_ragdoll
4. Пробовал и GetClientAimTarget, но нет. Так же индекс 0
Подскажите пожалуйста, можно ли поймать регдол игрока и воздействовать на него? В данном случаи удалить
C#:
#include <sdktools_functions>
#include <sdktools_engine>
#include <sdktools_trace>
bool g_InUse[MAXPLAYERS+1];
public Action OnPlayerRunCmd(int iClient, int &buttons)
{
if(!(0 < iClient <= MaxClients && IsClientInGame(iClient)))
return Plugin_Continue;
if (!g_InUse[iClient] && buttons & IN_USE)
{
g_InUse[iClient] = true;
int aim = TraceToPlayer(iClient);
PrintToChatAll("Игрок [%N] навёл прицел на сущьность с индексом [%d]", iClient, aim);
if (aim > MaxClients)
{
char class[128];
GetEntityClassname(aim, class, sizeof(class));
if (StrEqual(class, "prop_ragdoll", false) && CheckDistance(iClient, aim, 1000.0))
{
int owner = GetEntPropEnt(aim, Prop_Send, "m_hOwnerEntity");
PrintToChatAll("Вы спрятали труп! С индексом [%d] игрока [%d]/[%N]", aim, owner, owner);
RemoveEntity(aim);
}
}
}
else if(g_InUse[iClient] && !(buttons & IN_USE))
{
g_InUse[iClient] = false;
}
return Plugin_Continue;
}
int TraceToPlayer(int client)
{
float vecClientEyePos[3], vecClientEyeAng[3];
GetClientEyePosition(client, vecClientEyePos);
GetClientEyeAngles(client, vecClientEyeAng);
TR_TraceRayFilter(vecClientEyePos, vecClientEyeAng, MASK_ALL, RayType_Infinite, TraceRayPlayer, client);
if (TR_DidHit(INVALID_HANDLE))
{
int ent = TR_GetEntityIndex(INVALID_HANDLE);
if(ent != 0)
{
return ent;
}
}
return 0;
}
public bool TraceRayPlayer(int entityhit, int mask, any self)
{
if(entityhit > 0 && entityhit != self)
{
return true;
}
return false;
}
stock bool CheckDistance(int Ent1, int Ent2, float Distance)
{
float Pos1[3], Pos2[3]; GetClientAbsOrigin(Ent1, Pos1);
GetEntPropVector(Ent2, Prop_Send, "m_vecOrigin", Pos2);
if (GetVectorDistance(Pos1, Pos2) <= Distance)
return true;
else
return false;
}