Plugin
unknown
plain_text
2 years ago
12 kB
118
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...