SideX
01-05-2012, 05:52
Situation: player wants to spawn prop_dynamic, but if any player will stuck in that prop - don't spawn it. Any ideas?
My version:
...
entity = SpawnProp();
if (CheckStuckInEntity(entity))
AcceptEntityInput(entity, "Kill");
CheckStuckInEntity stock:
bool:CheckStuckInEntity(entity)
{
for (new i=1;i<=MaxClients;i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i) && IsPlayerStuckInEntity(i, entity))
return true;
}
return false;
}
bool:IsPlayerStuckInEntity(iClient, entity)
{
decl Float:vecMin[3], Float:vecMax[3], Float:vecOrigin[3];
GetClientMins(iClient, vecMin);
GetClientMaxs(iClient, vecMax);
GetClientAbsOrigin(iClient, vecOrigin);
TR_TraceHullFilter(vecOrigin, vecOrigin, vecMin, vecMax, MASK_SOLID, TraceEntityFilterNotEntity, entity);
return TR_DidHit();
}
public bool:TraceEntityFilterNotEntity(iEntity, iContentsMask, any:entity)
{
return iEntity == entity;
}
My version:
...
entity = SpawnProp();
if (CheckStuckInEntity(entity))
AcceptEntityInput(entity, "Kill");
CheckStuckInEntity stock:
bool:CheckStuckInEntity(entity)
{
for (new i=1;i<=MaxClients;i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i) && IsPlayerStuckInEntity(i, entity))
return true;
}
return false;
}
bool:IsPlayerStuckInEntity(iClient, entity)
{
decl Float:vecMin[3], Float:vecMax[3], Float:vecOrigin[3];
GetClientMins(iClient, vecMin);
GetClientMaxs(iClient, vecMax);
GetClientAbsOrigin(iClient, vecOrigin);
TR_TraceHullFilter(vecOrigin, vecOrigin, vecMin, vecMax, MASK_SOLID, TraceEntityFilterNotEntity, entity);
return TR_DidHit();
}
public bool:TraceEntityFilterNotEntity(iEntity, iContentsMask, any:entity)
{
return iEntity == entity;
}