#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
}
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.
|
Guest Message by DevFuse
Znowu Termalne gogle :)
Temat rozp. Wizzardius, 11.07.2009 00:05
Brak odpowiedzi do tego tematu
#1
Napisano 11.07.2009 00:05
Mógłby mi ktoś przerobić ten plugin pod Zombie Plague żeby zombie widziały termalnie, ale żeby nie musiały miec na sobie noktowizora (bo na zombie plague, te gogle jakby nie odbieraja tej zombiackiej noktowizji
). A żeby CT z noktowizja czy bez - nie widzieli zadnych plam

Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych


Dodatki SourceMod



Temat jest zamknięty








