←  Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

Termalne google

Locked

  • +
  • -
Wizzardius's Photo Wizzardius 10.07.2009

Przerobi mi ktoś te google? Bo teraz Każdego Widzi sie na niebiesko, a ja chce żeby TT patrząc przez nie, widzi swoich (czyli TT) na czerwono a CT standardowo na niebiesko.


#include <amxmodx>
#include <engine>
#include <xs>

new Float:g_fDelay[33]
new g_ThermalOn[33]
new sprite_playerheat

new cvar_enable
new cvar_maxdistance
new cvar_updatedelay

static const PLUGIN_NAME[] 	= "Thermal Imaging Goggle"
static const PLUGIN_AUTHOR[] 	= "Cheap_Suit"
static const PLUGIN_VERSION[]	= "1.0"

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	
	cvar_enable	 = register_cvar("amx_tig_enable", 	"1")
	cvar_maxdistance = register_cvar("amx_tig_distance", 	"1000")
	cvar_updatedelay = register_cvar("amx_tig_updatedelay", "0.2")
	
	register_event("NVGToggle", "Event_NVGToggle", "be")
}

public plugin_precache()
	sprite_playerheat = precache_model("sprites/poison.spr")

public Event_NVGToggle(id)
	g_ThermalOn[id] = read_data(1)

public client_PostThink(id)
{
	if(!is_user_alive(id) || !g_ThermalOn[id] || !get_pcvar_num(cvar_enable))
		return PLUGIN_CONTINUE
		
	if((g_fDelay[id] + get_pcvar_float(cvar_updatedelay)) > get_gametime())
		return PLUGIN_CONTINUE
	
	g_fDelay[id] = get_gametime()
	
	new Float:fMyOrigin[3]
	entity_get_vector(id, EV_VEC_origin, fMyOrigin)
	
	static Players[32], iNum
	get_players(Players, iNum, "a")
	for(new i = 0; i < iNum; ++i) if(id != Players[i])
	{
		new target = Players[i]
		
		new Float:fTargetOrigin[3]
		entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
		
		if((get_distance_f(fMyOrigin, fTargetOrigin) > get_pcvar_num(cvar_maxdistance)) 
		|| !is_in_viewcone(id, fTargetOrigin))
			continue

		new Float:fMiddle[3], Float:fHitPoint[3]
		xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
		trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
								
		new Float:fWallOffset[3], Float:fDistanceToWall
		fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
		normalize(fMiddle, fWallOffset, fDistanceToWall)
		
		new Float:fSpriteOffset[3]
		xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
		new Float:fScale, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
		if(fDistanceToWall > 100.0)
			fScale = 8.0 * (fDistanceToWall / fDistanceToTarget)
		else
			fScale = 2.0
	
		te_sprite(id, fSpriteOffset, sprite_playerheat, floatround(fScale), 125)
	}
	return PLUGIN_CONTINUE
}

stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
{
	message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
	write_byte(TE_SPRITE)
	write_coord(floatround(origin[0]))
	write_coord(floatround(origin[1]))
	write_coord(floatround(origin[2]))
	write_short(sprite)
	write_byte(scale) 
	write_byte(brightness)
	message_end()
}

stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
{
	new Float:fLen = xs_vec_len(fIn)
	xs_vec_copy(fIn, fOut)
	
	fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
	fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 10.07.2009

sprite sprites/poison.spr to właśnie jest taka niebieska chmurka, więc jeżeli chciałbyś inny kolor to potrzebujesz innego sprite'a
poza tym tylko terro ma widzieć terro na czerwono czy ct też ma ich tak widzieć ?
Quote

  • +
  • -
Wizzardius's Photo Wizzardius 10.07.2009

Coś mi sie zdaje że nie znajde czerwonego sprita :( Dobra to już nie chce przeróbek, ale powiedz mi czy ta niebieska plamka jest tylko na wrogach czy na swoich też?
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 10.07.2009

Coś mi sie zdaje że nie znajde czerwonego sprita :(

a ja już znalazłem :P dokładnie to samo, tylko inny kolor - explode1.spr

Sprawdź ten kod(nie testowałem):
#include <amxmodx>
#include <engine>
#include <xs>

new Float:g_fDelay[33]
new g_ThermalOn[33]
new sprite_blue
new sprite_red

new cvar_enable
new cvar_maxdistance
new cvar_updatedelay

static const PLUGIN_NAME[]     = "Thermal Imaging Goggle"
static const PLUGIN_AUTHOR[]     = "Cheap_Suit"
static const PLUGIN_VERSION[]    = "1.0"

public plugin_init()
{
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SPONLY|FCVAR_SERVER)
	
	cvar_enable    = register_cvar("amx_tig_enable",     "1")
	cvar_maxdistance = register_cvar("amx_tig_distance",     "1000")
	cvar_updatedelay = register_cvar("amx_tig_updatedelay", "0.2")
	
	register_event("NVGToggle", "Event_NVGToggle", "be")
}

public plugin_precache()
{
	sprite_blue = precache_model("sprites/poison.spr")
	sprite_red = precache_model("sprites/explode1.spr")
}

public Event_NVGToggle(id)
	g_ThermalOn[id] = read_data(1)

public client_PostThink(id)
{
	if(!is_user_alive(id) || !g_ThermalOn[id] || !get_pcvar_num(cvar_enable))
		return PLUGIN_CONTINUE
	
	if((g_fDelay[id] + get_pcvar_float(cvar_updatedelay)) > get_gametime())
		return PLUGIN_CONTINUE
	
	g_fDelay[id] = get_gametime()
	
	new Float:fMyOrigin[3]
	entity_get_vector(id, EV_VEC_origin, fMyOrigin)
	
	new userteam = get_user_team(id)
	
	static Players[32], iNum
	get_players(Players, iNum, "a")
	for(new i = 0; i < iNum; ++i) if(id != Players[i])
	{
		new target = Players[i]
		
		new Float:fTargetOrigin[3]
		entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
		
		if((get_distance_f(fMyOrigin, fTargetOrigin) > get_pcvar_num(cvar_maxdistance))
		|| !is_in_viewcone(id, fTargetOrigin))
		continue
		
		new Float:fMiddle[3], Float:fHitPoint[3]
		xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
		trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
		
		new Float:fWallOffset[3], Float:fDistanceToWall
		fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
		normalize(fMiddle, fWallOffset, fDistanceToWall)
		
		new Float:fSpriteOffset[3]
		xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
		new Float:fScale, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
		
		if(fDistanceToWall > 100.0)
			fScale = 8.0 * (fDistanceToWall / fDistanceToTarget)
		else
			fScale = 2.0
		if (userteam == 2 && get_user_team(target) == 2)
			te_sprite(id, fSpriteOffset, sprite_red, floatround(fScale), 125)
		else
			te_sprite(id, fSpriteOffset, sprite_blue, floatround(fScale), 125)
	}
	return PLUGIN_CONTINUE
}

stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
{
	message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
	write_byte(TE_SPRITE)
	write_coord(floatround(origin[0]))
	write_coord(floatround(origin[1]))
	write_coord(floatround(origin[2]))
	write_short(sprite)
	write_byte(scale)
	write_byte(brightness)
	message_end()
}

stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
{
	new Float:fLen = xs_vec_len(fIn)
	xs_vec_copy(fIn, fOut)
	
	fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
	fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
teoretycznie terro powinien widzieć swoich na czerwono, a CT na niebiesko, a CT wszystkich na niebiesko.
Quote

  • +
  • -
Abes Mapper's Photo Abes Mapper 10.07.2009

W CT: terro na niebiesko, CT mają ten explode1.spr
W TT: terro na niebiesko, CT na niebiesko
Quote

  • +
  • -
mgr inż. Pavulon's Photo mgr inż. Pavulon 10.07.2009

W CT: terro na niebiesko, CT mają ten explode1.spr
W TT: terro na niebiesko, CT na niebiesko

czyli do zamiany 2 na 1 w:
if (userteam == 2 && get_user_team(target) == 2)
ma być:
if (userteam == 1 && get_user_team(target) == 1)
Quote

  • +
  • -
Wizzardius's Photo Wizzardius 10.07.2009

Dobra daje pomógł :)
Quote
Locked