Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

IsEntVisible


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 23.11.2015 22:58

Sprawdza czy Ent jest widoczny dla gracza. Tak na prawdę jeśli ustawimy ostatni paramert na false to zamiast clienta mozna podac dowolne entity.

Uwaga! funkcja nie sprawdza czy byty istnieją oraz czy client to gracz. W przypadku nieprawidłowego użycia spodziewajcie sie errorów. 

/**
 * Check if there is something visible between the player and the entity.
 *	
 * @param client              client entity index
 * @param entity              entity index
 * @param Float:maxdistance       max distance to check if specified
 *                          otherwise check in infinited distance
 * @param bool:FromEyePosition    determine if start position will be from eyes or AbsOrigin
 *
 * @return                  true if visible, false if not
 */ 
stock bool:IsEntVisible(client,entity,const Float:maxdistance=0.0,const bool:FromEyePosition=true)
{
	if((Entity_GetDistance(client,entity)>maxdistance)&&(maxdistance>0.0)) return false //if maxdistance used (!0.0) and distance longer return 0
	new Float:vClientOrigin[3],Float:vEntOrigin[3]
	FromEyePosition ? GetClientEyePosition(client,vClientOrigin) : Entity_GetAbsOrigin(client,vClientOrigin)
	Entity_GetAbsOrigin(entity,vEntOrigin)
	//Check for colliding entities
	new Handle:TrHandle=TR_TraceRayFilterEx(vClientOrigin, vEntOrigin, MASK_VISIBLE_AND_NPCS,RayType_EndPoint, TraceRayDontHitSelf, client)
	new TRIndex
	if (TR_DidHit(TrHandle))
	{
		TRIndex = TR_GetEntityIndex(TrHandle)
	}
	return bool:(TRIndex==entity)
}

public bool:TraceRayDontHitSelf(entity, mask, any:data)
{
	if(entity == data) // Check if the TraceRay hit the itself.
	{
	return false // Don't let the entity be hit
	}

	return true // It didn't hit itself
}

Użytkownik grankee edytował ten post 23.11.2015 22:59

  • +
  • -
  • 3

#2 BartekB

    Życzliwy

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:29
  • Imię:Bartosz
  • Lokalizacja:Home
Offline

Napisano 23.11.2015 23:13

Czyli teoretycznie mogę zrobić funkcję coś w rodzaju if(IsEntVisible) to ustaw go jako niewidocznego, przy użyciu tej funkcji? Dobrze zrozumiałem jej działanie? 


  • +
  • -
  • 0

#3 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 23.11.2015 23:15

if(IsEntVisible(client,entity))
{
//tutaj kod jesli jest widoczny
}
else
{
//tutaj kod jesli nie jest widoczny
}

i to co mozesz zrobic to jest warunek a nie funkcja, funkcja to jest to co ja zrobilem i podalem wyzej


  • +
  • -
  • 0

#4 BartekB

    Życzliwy

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:29
  • Imię:Bartosz
  • Lokalizacja:Home
Offline

Napisano 23.11.2015 23:17

Wiem wiem, po prostu zapomniałem jak to się nazywa :) Na pewno tego użyje, wydaje się być przydatne, i oby takie było :D

//Edit a przypadkiem używając GetEntityRenderMode bądź GetEntityRenderFx nie uzyskamy tej samej/podobnej odpowiedzi?


Użytkownik BartekB edytował ten post 23.11.2015 23:22

  • +
  • -
  • 0

#5 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 27.11.2015 23:47

co ma render do widzialnosci?

Ta funkcja po prostu sprawdza czy widzisz inny ent ale w sensie czy jest miedzy Toba a entem jakas widzialna przeszkoda, ktora uniemozliwia Ci jego zobaczenie, a nie czy ent jest widzialny bo nie jest przezroczysty


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych