Reidenshi
Участник
- Сообщения
- 42
- Реакции
- 14
Можно ли показать объект(entity) определенному клиенту или нескольким?
Вот код (не мой), он вроде должен работать, но почему-то объекты видят все.
Вот код (не мой), он вроде должен работать, но почему-то объекты видят все.
C-подобный:
public int CreateIcon(int iClient)
{
float fPos[3], fAng[3]; int iRisk;
GetClientEyePosition(iClient, fPos); //Позиция
GetClientEyeAngles(iClient, fAng); //Угол положения
TR_TraceRayFilter(fPos, fAng, MASK_SOLID, RayType_Infinite, TRDontHitSelf, iClient); //Запускает новый луч трассировки, используя результат глобальной трассировки и настроенный фильтр лучей трассировки.
if(TR_DidHit(INVALID_HANDLE))
{
TR_GetEndPosition(fPos, INVALID_HANDLE); //Возвращает положение столкновения результата трассировки.
if(Engine_Version == GAME_CSS_34)
{
iRisk = CreateEntityByName("env_sprite"); //создания
DispatchKeyValue(iRisk, "classname", "env_sprite"); //класс сущности
}
else
{
iRisk = CreateEntityByName("env_sprite_oriented"); //создания
DispatchKeyValue(iRisk, "classname", "env_sprite_oriented"); //класс сущности
}
fPos[2] += fPos2;
DispatchKeyValue(iRisk, "spawnflags", "1"); //флаги
DispatchKeyValue(iRisk, "scale", "0.3"); //масштаб
DispatchKeyValue(iRisk, "rendermode", "1"); //
DispatchKeyValue(iRisk, "rendercolor", "255 255 255"); //цвет
DispatchKeyValue(iRisk, "model", sModel); //Отправляет KeyValue в заданную сущность, используя строковое значение.
DispatchKeyValueVector(iRisk, "origin", fPos); //Отправляет KeyValue в заданную сущность, используя значение вектора.
DispatchSpawn(iRisk); //Создает сущность в игре.
TeleportEntity(iRisk, fPos, NULL_VECTOR, NULL_VECTOR);
if(DispatchSpawn(iRisk))
{
SetEntPropEnt(iRisk, Prop_Send, "m_hOwnerEntity", iClient);
SDKHookEx(iRisk, SDKHook_SetTransmit, OnTransmit);
}
if (bESoundType == 0) {
EmitSoundToClient(iClient, sSound, iRisk, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.8);
} else if (bESoundType == 1) {
EmitSoundToAll(sSound, iRisk, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.8);
} else if (bESoundType == 2) {
int cTeam = GetClientTeam(iClient);
if (cTeam == CS_TEAM_SPECTATOR || cTeam == CS_TEAM_NONE) {
CPrint(iClient, _, "{geen}[Метка] {red}Вы не находитесь в команде!");
} else {
int iClients[MAXPLAYERS+1];
int iClientCount = GetClientsByTeam(cTeam, iClients, sizeof(iClients));
for(int i = 0; i < iClientCount; i++) {
EmitSoundToClient(iClients[i], sSound, iRisk, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 0.8);
}
}
}
CreateTimer(fKillRisk, TimerKillRisk, iRisk);
}
}
stock int GetClientsByTeam(int iTeam, int[] iClients, int iSize)
{
int iCount;
for(int i = 1; i <= MaxClients; i++)
{
if (iCount == iSize)
{
break;
}
if (IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) == iTeam)
{
iClients[iCount++] = i;
}
}
return iCount;
}
public Action OnTransmit(int iEntity, int iClient)
{
if(iClient == iEntity) return Plugin_Continue;
static int iOwner, iTeam;
iTeam = GetClientTeam(iClient);
PrintToChat(iClient, "team: %d", iTeam);
if(iTeam < 2) return Plugin_Continue;
if((iOwner = GetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity")) > 0 && GetClientTeam(iOwner) != iTeam) return Plugin_Handled;
return Plugin_Continue;
}