Plugin
unknown
plain_text
2 years ago
12 kB
11
Indexable
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#define PLUGIN "ADV Like: WallHack"
#define VERSION "1.0"
#define AUTHOR "Bim Bim Cay"
//**********************************************
//* Resources *
//**********************************************
// Sprites
#define SPRITE_BEAM "sprites/laserbeam.spr"
//**********************************************
//* Some macroses. *
//**********************************************
#define SET_MODEL(%0,%1) engfunc(EngFunc_SetModel, %0, %1)
#define SET_ORIGIN(%0,%1) engfunc(EngFunc_SetOrigin, %0, %1)
#define SET_SIZE(%0,%1,%2) engfunc(EngFunc_SetSize, %0, %1, %2)
#define PRECACHE_MODEL(%0) engfunc(EngFunc_PrecacheModel, %0)
#define PRECACHE_SOUND(%0) engfunc(EngFunc_PrecacheSound, %0)
#define PRECACHE_GENERIC(%0) engfunc(EngFunc_PrecacheGeneric, %0)
#define NUMBER_OF_ENTITIES() engfunc(EngFunc_NumberOfEntities)
#define IsObserver(%0) pev(%0,pev_iuser1)
#define BitSet(%0,%1) %0 |= (1 << (%1 - 1))
#define BitClear(%0,%1) %0 &= ~(1 << (%1 - 1))
#define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))
//**********************************************
//* Private Data Offsets. *
//**********************************************
// Linux extra offsets
#define extra_offset_player 5
// CBaseMonster
#define m_iTeam 114
//**********************************************
//* CS Team *
//**********************************************
#define CS_TEAM_UNASSIGNED 0
#define CS_TEAM_T 1
#define CS_TEAM_CT 2
#define CS_TEAM_SPECTATOR 3
//**********************************************
//* Entity Classname *
//**********************************************
#define BEAM_CLASSNAME "WallHack_Beam"
//**********************************************
//* Config *
//**********************************************
// Color
#define SPRITECOLOR_T {255, 0, 0}
#define SPRITECOLOR_CT {0, 0, 255}
#define SPRITECOLOR_SPECTATOR {255, 255, 255}
//**********************************************
//* Vars *
//**********************************************
#define MAX_PLAYER 32
// Is player connected ?
new g_IsConnected
// Is player alive ?
new g_IsAlive
// Is player enable ?
new g_IsWallHacking
// Can plugin work ?
new g_IsPluginEnabled
// Beam Key
new g_iszBeamKey
// PSet
new Float:flOriginData[MAX_PLAYER+1][3][3]
//**********************************************
//* Precache *
//**********************************************
public plugin_precache()
{
PRECACHE_MODEL(SPRITE_BEAM)
g_iszBeamKey = engfunc(EngFunc_AllocString, BEAM_CLASSNAME)
}
//**********************************************
//* Natives *
//**********************************************
public plugin_natives()
{
register_native("EnableWallHack", "EnableWallHack", 1)
register_native("DisableWallHack", "DisableWallHack", 1)
}
//**********************************************
//* Plugin Init *
//**********************************************
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_IsPluginEnabled = Create_PlayerBeamEntity()
if(g_IsPluginEnabled)
{
register_forward(FM_CheckVisibility, "fw_CheckVisibility")
register_forward(FM_AddToFullPack, "fw_AddToFullPack")
register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
RegisterHam(Ham_Spawn, "player", "fw_Player_Spawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_Player_Killed_Post", 1)
register_clcmd("say /wallhack", "ToggleWallHack")
}
}
//**********************************************
//* Toggle WallHack *
//**********************************************
public client_connect(iPlayer)
{
BitClear(g_IsAlive, iPlayer)
BitClear(g_IsConnected, iPlayer)
BitClear(g_IsWallHacking, iPlayer)
}
public client_disconnect(iPlayer)
{
BitClear(g_IsAlive, iPlayer)
BitClear(g_IsConnected, iPlayer)
BitClear(g_IsWallHacking, iPlayer)
}
public client_putinserver(iPlayer)
{
BitSet(g_IsConnected, iPlayer)
}
public fw_Player_Spawn_Post(iPlayer)
{
if(!BitCheck(g_IsConnected, iPlayer))
return
if(!IsAlive(iPlayer))
return
BitSet(g_IsAlive, iPlayer)
}
public fw_Player_Killed_Post(iPlayer)
{
BitClear(g_IsAlive, iPlayer)
}
public EnableWallHack(iPlayer)
{
if(!g_IsPluginEnabled)
return
BitSet(g_IsWallHacking, iPlayer)
}
public DisableWallHack(iPlayer)
{
if(!g_IsPluginEnabled)
return
BitClear(g_IsWallHacking, iPlayer)
}
public ToggleWallHack(iPlayer)
{
if(BitCheck(g_IsWallHacking, iPlayer))
{
BitClear(g_IsWallHacking, iPlayer)
}
else
{
BitSet(g_IsWallHacking, iPlayer)
}
}
//**********************************************
//* Create Entities *
//**********************************************
Create_PlayerBeamEntity()
{
static g_MaxPlayers; g_MaxPlayers = get_maxplayers()
if(global_get(glb_maxEntities) - NUMBER_OF_ENTITIES() < g_MaxPlayers)
return 0
static iEntity
static iszAllocStringCached
for(new iPlayer = 1; iPlayer <= g_MaxPlayers; iPlayer++)
{
if(iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "beam")))
{
iEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)
}
if(!pev_valid(iEntity))
return 0
set_pev(iEntity, pev_classname, BEAM_CLASSNAME)
set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_CUSTOMENTITY)
SET_MODEL(iEntity, SPRITE_BEAM)
set_pev(iEntity, pev_rendermode, (pev(iEntity, pev_rendermode) & 0xF0) | 0 & 0x0F)
set_pev(iEntity, pev_rendermode, (pev(iEntity, pev_rendermode) & 0x0F) | 0 & 0xF0)
set_pev(iEntity, pev_body, 0)
set_pev(iEntity, pev_frame, 0.0)
set_pev(iEntity, pev_scale, 0.0)
set_pev(iEntity, pev_animtime, 0.0)
set_pev(iEntity, pev_renderamt, 0.0)
set_pev(iEntity, pev_rendercolor, Float:{0.0, 0.0, 0.0})
set_pev(iEntity, pev_team, iPlayer)
set_pev(iEntity, pev_impulse, g_iszBeamKey)
}
return 1
}
//**********************************************
//* Wall hack *
//**********************************************
// In Pawn, iEntity is the same as iE.
public fw_AddToFullPack(iState, iE, iEntity, iHost, iHostflags, IsPlayer, pSet)
{
if(!pev_valid(iEntity) || pev(iEntity, pev_impulse) != g_iszBeamKey)
return FMRES_IGNORED
if(!BitCheck(g_IsWallHacking, iHost))
{
forward_return(FMV_CELL, 0)
return FMRES_SUPERCEDE
}
static iTarget; iTarget = pev(iEntity, pev_team)
if(iTarget == iHost || !BitCheck(g_IsAlive, iTarget))
{
forward_return(FMV_CELL, 0)
return FMRES_SUPERCEDE
}
static Float:flTOrigin[3], Float:flVOrigin[3]
pev(iTarget, pev_origin, flTOrigin)
pev(iHost, pev_origin, flVOrigin)
static Float:flDir[3], Float:flFacingDir[3]
xs_vec_sub(flTOrigin, flVOrigin, flDir)
xs_vec_normalize(flDir, flDir)
pev(iHost, pev_v_angle, flFacingDir)
angle_vector(flFacingDir, ANGLEVECTOR_FORWARD, flFacingDir)
xs_vec_normalize(flFacingDir, flFacingDir)
if(xs_vec_dot(flDir, flFacingDir) <= 0.0)
{
forward_return(FMV_CELL, 0)
return FMRES_SUPERCEDE
}
static iTrace; iTrace = create_tr2()
static Float:flFraction, Float:flHitPoint[3]
engfunc(EngFunc_TraceLine, flVOrigin, flTOrigin, IGNORE_MONSTERS, iHost, iTrace)
get_tr2(iTrace, TR_vecEndPos, flHitPoint)
get_tr2(iTrace, TR_flFraction, flFraction)
free_tr2(iTrace)
if(flFraction >= 1.0)
{
forward_return(FMV_CELL, 0)
return FMRES_SUPERCEDE
}
flOriginData[iHost][0] = flVOrigin
flOriginData[iHost][1] = flTOrigin
flOriginData[iHost][2] = flHitPoint
return FMRES_IGNORED
}
public fw_CheckVisibility(iEntity, pSet)
{
if(pev(iEntity, pev_impulse) != g_iszBeamKey)
return FMRES_IGNORED
forward_return(FMV_CELL, 1)
return FMRES_SUPERCEDE
}
public fw_AddToFullPack_Post(iState, iE, iEntity, iHost, iHostflags, IsPlayer, pSet)
{
if(!get_orig_retval())
return
if(IsPlayer)
{
if(!BitCheck(g_IsWallHacking, iHost))
return
switch(get_pdata_int(iEntity, m_iTeam, extra_offset_player))
{
case CS_TEAM_T:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_T)
}
case CS_TEAM_CT:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_CT)
}
case CS_TEAM_SPECTATOR:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_SPECTATOR)
}
}
set_es(iState, ES_RenderFx, kRenderFxGlowShell)
set_es(iState, ES_RenderAmt, 16)
}
else
{
if(pev(iEntity, pev_impulse) != g_iszBeamKey)
return
static iTarget; iTarget = pev(iEntity, pev_team)
static Float:flVOrigin[3], Float:flTOrigin[3], Float:flHitPoint[3]
flVOrigin = flOriginData[iHost][0]
flTOrigin = flOriginData[iHost][1]
flHitPoint = flOriginData[iHost][2]
static Float:flDistanceToTarget, Float:flDistanceToHitPoint
flDistanceToTarget = get_distance_f(flVOrigin, flTOrigin)
flDistanceToHitPoint = get_distance_f(flVOrigin, flHitPoint)
static Float:flDirection[3]
xs_vec_sub(flTOrigin, flVOrigin, flDirection)
static Float:flScaleBoneLen, Float:flScaleBoneWid
flScaleBoneLen = flDistanceToHitPoint / flDistanceToTarget * 50.0
flScaleBoneWid = flDistanceToHitPoint / flDistanceToTarget * 150.0
// Get the point 10.0 units away from wall
xs_vec_normalize(flDirection, flDirection)
xs_vec_mul_scalar(flDirection, flDistanceToHitPoint - 10.0, flDirection)
static Float:flEyeLevel[3]
xs_vec_copy(flVOrigin, flEyeLevel)
if(pev(iHost, pev_flags) & FL_DUCKING)
{
flEyeLevel[2] += 12.0
}
else
{
flEyeLevel[2] += 18.0
}
static Float:flBoneStart[3]
xs_vec_add(flDirection, flEyeLevel, flBoneStart)
static Float:flBoneEnd[3]
xs_vec_set(flBoneEnd, flBoneStart[0], flBoneStart[1], flBoneStart[2] - flScaleBoneLen)
static Float:flTargetHitPointDistance; flTargetHitPointDistance = flDistanceToTarget - flDistanceToHitPoint
static iBrightness; iBrightness = 255
if(flTargetHitPointDistance < 2040.0)
{
iBrightness = (255 - floatround(flTargetHitPointDistance / 12.0))
}
else
{
iBrightness = 85
}
set_es(iState, ES_Origin, flBoneStart)
set_es(iState, ES_Angles, flBoneEnd)
switch(get_pdata_int(iTarget, m_iTeam, extra_offset_player))
{
case CS_TEAM_T:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_T)
}
case CS_TEAM_CT:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_CT)
}
case CS_TEAM_SPECTATOR:
{
set_es(iState, ES_RenderColor, SPRITECOLOR_SPECTATOR)
}
}
set_es(iState, ES_Scale, flScaleBoneWid)
set_es(iState, ES_RenderAmt, iBrightness)
}
}
//**********************************************
//* Player Check *
//**********************************************
IsAlive(iEntity)
{
return (pev(iEntity, pev_deadflag) == DEAD_NO && pev(iEntity, pev_health) > 0)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Editor is loading...