←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

IsEntVisible

  • +
  • -
grankee - zdjęcie grankee 23.11.2015

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
Odpowiedz

  • +
  • -
BartekB - zdjęcie BartekB 23.11.2015

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? 

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 23.11.2015

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

Odpowiedz

  • +
  • -
BartekB - zdjęcie BartekB 23.11.2015

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
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 27.11.2015

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

Odpowiedz