Diff
checker
Texte
Texte
Images
Documents
Excel
Dossiers
Legal
Enterprise
Application de bureau
Prix
Se connecter
Télécharger Diffchecker Desktop
Comparer le texte
Trouver la différence entre deux fichiers texte
Outils
Historique
Éditeur live
Cacher identiques
Sans retour à la ligne
Vue
Divisé
Unifié
Niveau de précision
Intelligent
Mot
Caractère
Coloration syntaxique
Choisir la syntaxe
Ignorer
Transformer le texte
Aller au premier écart
Modifier l'entrée
Diffchecker Desktop
La façon la plus sécurisée d'utiliser Diffchecker. Obtenez l'application Diffchecker Desktop : vos diffs ne quittent jamais votre ordinateur !
Obtenir Desktop
jtfHeightFinder
Créé
il y a 6 ans
Le diff n'expire jamais
Effacer
Exporter
Partager
Expliquer
461 suppressions
Lignes
Total
Supprimé
Caractères
Total
Supprimé
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
552 lignes
Copier tout
404 ajouts
Lignes
Total
Ajouté
Caractères
Total
Ajouté
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
491 lignes
Copier tout
#pragma semicolon 1
#pragma semicolon 1
#include <sourcemod>
#include <sourcemod>
#include <sdktools>
#include <sdktools>
#include <sdkhooks>
#include <sdkhooks>
Copier
Copié
Copier
Copié
#define PLUGIN_VERSION "1.0.
1
"
#define PLUGIN_VERSION "1.0.
2
"
#define SPRITE_BEAM "materials/sprites/laser.vmt"
#define SPRITE_BEAM "materials/sprites/laser.vmt"
Copier
Copié
Copier
Copié
bool
PL_
Enabled;
bool
g_b
Enabled;
bool
BM_ENABLED
[MAXPLAYERS + 1];
bool
g_bBrushMode
[MAXPLAYERS + 1];
bool
CJ_ENABLED
[MAXPLAYERS + 1];
bool
g_bCheckJump
[MAXPLAYERS + 1];
Copier
Copié
Copier
Copié
int
Offset_for_entity_effect
= -1;
int
g_iEffectOffset
= -1;
int
BrushEntity
Index
[MAXPLAYERS + 1]
[1]
; //Array of brush entities (trigger_teleport, func_nogrenades)
int
g_i
BrushEntity
[MAXPLAYERS + 1]
; //Array of brush entities (trigger_teleport, func_nogrenades)
int
sprite
;
int
g_iSpritePrecache
;
int
halo
;
int
g_iHaloPrecache
;
Copier
Copié
Copier
Copié
float
FL_VelClient
[MAXPLAYERS + 1][3];
float
g_fVelocity
[MAXPLAYERS + 1][3];
Copier
Copié
Copier
Copié
ConVar g_
pluginEnabled
;
ConVar g_
cvarEnabled
;
Copier
Copié
Copier
Copié
Handle
HudDisplay
;
Handle
g_hHudSync
;
Copier
Copié
Copier
Copié
public Plugin
:
myinfo =
public Plugin
myinfo =
{
{
name = "Height Finder",
name = "Height Finder",
author = "Master Cake",
author = "Master Cake",
description = "This plugin finds height",
description = "This plugin finds height",
version = PLUGIN_VERSION,
version = PLUGIN_VERSION,
url = ""
url = ""
};
};
Copier
Copié
Copier
Copié
public
OnPluginStart()
public
void
OnPluginStart()
{
{
Copier
Copié
Copier
Copié
CreateConVar("hfind_version", PLUGIN_VERSION, "Height Finder Version",
FCVAR_REPLICATED |
FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
CreateConVar("hfind_version", PLUGIN_VERSION, "Height Finder Version",
FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY);
Copier
Copié
Copier
Copié
g_
pluginEnabled
= CreateConVar("hfind_enabled", "1", "Enable Height Finder\n0 = Disabled\n1 = Enabled", _, true, 0.0, true, 1.0);
g_
cvarEnabled
= CreateConVar("hfind_enabled", "1", "Enable Height Finder\n0 = Disabled\n1 = Enabled", _, true, 0.0, true, 1.0);
PL_
Enabled = GetConVarBool(g_
pluginEnabled
);
g_b
Enabled = GetConVarBool(g_
cvarEnabled
);
Copier
Copié
Copier
Copié
HookConVarChange(g_
pluginEnabled
, ConsoleVarChange);
HookConVarChange(g_
cvarEnabled
, ConsoleVarChange);
Copier
Copié
Copier
Copié
Offset_for_entity_effect
= FindSendPropInfo("CBaseEntity", "m_fEffects"); //Find offset to "m_fEffects" property
g_iEffectOffset
= FindSendPropInfo("CBaseEntity", "m_fEffects"); //Find offset to "m_fEffects" property
if (
Offset_for_entity_effect
== -1)
if (
g_iEffectOffset
== -1)
{
SetFailState("m_fEffects property not found!");
SetFailState("m_fEffects property not found!");
Copier
Copié
Copier
Copié
}
Copier
Copié
Copier
Copié
RegConsoleCmd("sm_findh",
HC_Command
, "Command to enable Height Finder");
RegConsoleCmd("sm_findh",
cmdFindHeight
, "Command to enable Height Finder");
RegConsoleCmd("sm_checkjump",
CJ_Command
, "Command to enable jump checker");
RegConsoleCmd("sm_checkjump",
cmdCheckJump
, "Command to enable jump checker");
Copier
Copié
Copier
Copié
RegAdminCmd("sm_brushmode",
BM_Command
, ADMFLAG_GENERIC, "Command to enable/disable brush mode");
RegAdminCmd("sm_brushmode",
cmdBrushMode
, ADMFLAG_GENERIC, "Command to enable/disable brush mode");
RegAdminCmd("sm_nogrenades",
NG_Command
, ADMFLAG_GENERIC, "Command to show func_nogrenades brush entities");
RegAdminCmd("sm_nogrenades",
cmdEnableNoGrenade
, ADMFLAG_GENERIC, "Command to show func_nogrenades brush entities");
RegAdminCmd("sm_stopnogrenades",
SNG_Command
, ADMFLAG_GENERIC, "Command to stop showing func_nogrenades brush entities");
RegAdminCmd("sm_stopnogrenades",
cmdDisableNoGrenade
, ADMFLAG_GENERIC, "Command to stop showing func_nogrenades brush entities");
RegAdminCmd("sm_teletriggers",
TT_Command
, ADMFLAG_GENERIC, "Command to show trigger_teleport brush entities");
RegAdminCmd("sm_teletriggers",
cmdEnableTeleTrigger
, ADMFLAG_GENERIC, "Command to show trigger_teleport brush entities");
RegAdminCmd("sm_stopteletriggers",
STT_Command
, ADMFLAG_GENERIC, "Command to stop showing trigger_teleport brush entities");
RegAdminCmd("sm_stopteletriggers",
cmdDisableTeleTrigger
, ADMFLAG_GENERIC, "Command to stop showing trigger_teleport brush entities");
RegAdminCmd("sm_removent",
RENT_Command
, ADMFLAG_GENERIC, "Command to remove trigger_teleport and func_nogrenades brush entities");
RegAdminCmd("sm_removent",
cmdRemoveEntities
, ADMFLAG_GENERIC, "Command to remove trigger_teleport and func_nogrenades brush entities");
RegAdminCmd("sm_getentindex",
GEI_Command
, ADMFLAG_GENERIC, "Command to get trigger_teleport and func_nogrenades index");
RegAdminCmd("sm_getentindex",
cmdGetEntityIndex
, ADMFLAG_GENERIC, "Command to get trigger_teleport and func_nogrenades index");
RegAdminCmd("sm_movent
up", MEU_Command, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities up");
RegAdminCmd("sm_movent
", cmdMoveEnt
, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities
");
RegAdminCmd("sm_moventdown", MED_Command
, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities
down
");
AutoExecConfig(true, "hfind");
AutoExecConfig(true, "hfind");
Copier
Copié
Copier
Copié
HudDisplay
= CreateHudSynchronizer();
g_hHudSync
= CreateHudSynchronizer();
}
}
Copier
Copié
Copier
Copié
public
OnMapStart()
public
void
OnMapStart()
{
{
Copier
Copié
Copier
Copié
sprite
= PrecacheModel(SPRITE_BEAM);
g_iSpritePrecache
= PrecacheModel(SPRITE_BEAM);
halo
= PrecacheModel(SPRITE_BEAM);
g_iHaloPrecache
= PrecacheModel(SPRITE_BEAM);
}
}
Copier
Copié
Copier
Copié
public
ConsoleVarChange(
Handle:C
Var
, const
String:
oldValue
[]
, const
String:
newValue
[]
)
public
void
ConsoleVarChange(
Con
Var
cvar
, const
char[]
oldValue
, const
char[]
newValue
)
{
{
Copier
Copié
Copier
Copié
if(CVar == g_pluginEnabled)
g_bEnabled
= GetConVarBool(
cvar);
{
PL_Enabled
= GetConVarBool(
g_pluginEnabled);
}
}
}
Copier
Copié
Copier
Copié
public
OnClientPutInServer(
myC
lient)
public
void
OnClientPutInServer(
int c
lient)
{
{
Copier
Copié
Copier
Copié
BM_ENABLED[myC
lient] = false;
g_bBrushMode[c
lient] = false;
CJ_ENABLED[myClient
] = false;
g_bCheckJump[client
] = false;
BrushEntity
Index[myC
lient]
[0]
= -1;
g_i
BrushEntity
[c
lient]
= -1;
}
}
public int MenuHandler_func(Menu menu, MenuAction action, int param1, int param2)
public int MenuHandler_func(Menu menu, MenuAction action, int param1, int param2)
{
{
if (action == MenuAction_End)
if (action == MenuAction_End)
Copier
Copié
Copier
Copié
{
{
delete menu;
delete menu;
}
}
}
}
Copier
Copié
Copier
Copié
public Action
:CJ_Command(myC
lient,
args)
public Action
cmdCheckJump(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled
|| !IsValidClient(myC
lient)
)
if
(g_b
Enabled
&& c
lient)
return Plugin_Continue;
if (!CJ_ENABLED[myClient])
{
{
Copier
Copié
Copier
Copié
CJ_ENABLED[myClient
] =
true;
g_bCheckJump[client
] =
!g_bCheckJump[client];
ReplyToCommand(
myC
lient, "[SM] Jump Check
Enabled!");
ReplyToCommand(
c
lient, "[SM] Jump Check
%s!", g_bCheckJump[client] ? "Enabled" : "
Disabled
");
return Plugin_Continue;
}
}
if (CJ_ENABLED[myClient])
{
CJ_ENABLED[myClient] = false;
ReplyToCommand(myClient, "[SM] Jump Check
Disabled
!
");
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:BM_Command(myC
lient,
args)
public Action
cmdBrushMode(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled
|| !IsValidClient(myC
lient)
)
if
(g_b
Enabled
&& c
lient)
return Plugin_Continue;
if (!BM_ENABLED[myClient])
{
{
Copier
Copié
Copier
Copié
BM_ENABLED[myC
lient] =
true;
g_bBrushMode[c
lient] =
!g_bBrushMode[client];
ReplyToCommand(
myC
lient, "[SM] Brush Mode
Enabled!");
ReplyToCommand(
c
lient, "[SM] Brush Mode
%s!", g_bBrushMode[client] ? "Enabled" : "
Disabled
");
return Plugin_Continue;
}
}
if (BM_ENABLED[myClient])
{
BM_ENABLED[myClient] = false;
ReplyToCommand(myClient, "[SM] Brush Mode
Disabled
!
");
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:RENT_Command(myC
lient,
args)
public Action
cmdRemoveEntities(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
Copier
Copié
Copier
Copié
int EntityCount = GetEntityCount();
char
c
lassName[
32
];
char
myC
lassName[
50
];
for (int
i
= MaxClients + 1;
i
<=
2048
; ++
i
)
for (int
myEntity
= MaxClients + 1;
myEntity
<=
EntityCount
; ++
myEntity
)
{
{
Copier
Copié
Copier
Copié
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
myEntity, myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
i, c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "trigger_teleport") || StrEqual(
myC
lassName, "func_nogrenades"))
if (StrEqual(
c
lassName, "trigger_teleport") || StrEqual(
c
lassName, "func_nogrenades"))
{
{
Copier
Copié
Copier
Copié
RemoveEntity(
myEntity
);
RemoveEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:STT_Command(myC
lient,
args)
public Action
cmdDisableTeleTrigger(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
Copier
Copié
Copier
Copié
int EntityCouunt = GetEntityCount();
char
c
lassName[
32
];
char
myC
lassName[
50
];
for (int
i
= MaxClients + 1;
i
<=
2048
; ++
i
)
for (int
myEntity
= MaxClients + 1;
myEntity
<=
EntityCouunt
; ++
myEntity
)
{
{
Copier
Copié
Copier
Copié
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
myEntity, myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
i, c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "trigger_teleport"))
if (StrEqual(
c
lassName, "trigger_teleport"))
{
{
Copier
Copié
Copier
Copié
StopShowBrushEntity(
myEntity
);
StopShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:TT_Command(myC
lient,
args)
public Action
cmdEnableTeleTrigger(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
Copier
Copié
Copier
Copié
int EntityCouunt = GetEntityCount();
char
c
lassName[
32
];
char
myC
lassName[
50
];
for (int
i
= MaxClients + 1;
i
<=
2048
; ++
i
)
for (int
myEntity
= MaxClients + 1;
myEntity
<=
EntityCouunt
; ++
myEntity
)
{
{
Copier
Copié
Copier
Copié
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
myEntity, myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
i, c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "trigger_teleport"))
if (StrEqual(
c
lassName, "trigger_teleport"))
{
{
Copier
Copié
Copier
Copié
ShowBrushEntity(
myEntity
);
ShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:NG_Command(myC
lient,
args)
public Action
cmdEnableNoGrenade(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
Copier
Copié
Copier
Copié
int EntityCouunt = GetEntityCount();
char
c
lassName[
32
];
char
myC
lassName[
50
];
for (int
i
= MaxClients + 1;
i
<=
2048
; ++
i
)
for (int
myEntity
= MaxClients + 1;
myEntity
<=
EntityCouunt
; ++
myEntity
)
{
{
Copier
Copié
Copier
Copié
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
myEntity, myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
i, c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "func_nogrenades"))
if (StrEqual(
c
lassName, "func_nogrenades"))
{
{
Copier
Copié
Copier
Copié
ShowBrushEntity(
myEntity
);
ShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:SNG_Command(myC
lient,
args)
public Action
cmdDisableNoGrenade(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
Copier
Copié
Copier
Copié
int EntityCouunt = GetEntityCount();
char
c
lassName[
32
];
char
myC
lassName[
50
];
for (int
i
= MaxClients + 1;
i
<=
2048
; ++
i
)
for (int
myEntity
= MaxClients + 1;
myEntity
<=
EntityCouunt
; ++
myEntity
)
{
{
Copier
Copié
Copier
Copié
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
myEntity, myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
i, c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "func_nogrenades"))
if (StrEqual(
c
lassName, "func_nogrenades"))
{
{
Copier
Copié
Copier
Copié
StopShowBrushEntity(
myEntity
);
StopShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:MED_Command(myC
lient,
args)
public Action
cmdMoveEnt(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_
Continue;
{
return Plugin_
Handled;
}
if (args != 2)
if (args != 2)
{
{
Copier
Copié
Copier
Copié
ReplyToCommand(
myC
lient, "Usage: sm_movent
down
<index> <num of units>");
ReplyToCommand(
c
lient, "Usage: sm_movent
up
<index> <num of units>");
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
char
myArgs1
[32];
char
arg1
[32];
GetCmdArg(1,
myArgs1
, sizeof(
myArgs1
));
GetCmdArg(1,
arg1
, sizeof(
arg1
));
int
EntIndex
= StringToInt(
myArgs1
);
if (!IsValidEntity(
EntIndex))
int
entity
= StringToInt(
arg1
);
if (!IsValidEntity(
entity))
{
return Plugin_Handled;
return Plugin_Handled;
Copier
Copié
Copier
Copié
char
myArgs2
[32];
}
GetCmdArg(2,
myArgs2
, sizeof(
myArgs2
));
int
num
= StringToInt(
myArgs2
);
char
arg2
[32];
if (
num
> 999
)
GetCmdArg(2,
arg2
, sizeof(
arg2
));
int
distance
= StringToInt(
arg2
);
if (
!distance || distance
> 999
|| distance < -999
)
{
{
Copier
Copié
Copier
Copié
ReplyToCommand(
myC
lient, "Invalid value");
ReplyToCommand(
c
lient, "Invalid value");
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
else
char className[32];
GetEntityClassname(entity, className, sizeof(className));
if (StrEqual(className, "func_nogrenades") || StrEqual(className, "trigger_teleport"))
{
{
Copier
Copié
Copier
Copié
float
EntPos
[3];
float
origin
[3];
char typent[32];
GetEntPropVector(
entity
, Prop_Send, "m_vecOrigin",
origin
);
GetEntityClassname(EntIndex, typent, sizeof(typent));
if (StrEqual(typent, "func_nogrenades") || StrEqual(typent, "trigger_teleport"))
origin[2] += distance;
{
GetEntPropVector(
EntIndex
, Prop_Send, "m_vecOrigin",
EntPos
);
TeleportEntity(entity, origin
, NULL_VECTOR, NULL_VECTOR);
if (num == 0)
{
EntPos[2] += num;
}
else
{
EntPos[2] -= num;
}
TeleportEntity(EntIndex, EntPos
, NULL_VECTOR, NULL_VECTOR);
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:MEU_Command(myC
lient,
args)
public Action
cmdGetEntityIndex(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient
)
|| !
BM_ENABLED[myC
lient])
if
(!g_b
Enabled || !
c
lient
|| !
g_bBrushMode[c
lient])
return Plugin_Continue;
if (args != 2)
{
ReplyToCommand(myClient, "Usage: sm_moventup <index> <num of units>");
return Plugin_Handled;
}
char myArgs1[32];
GetCmdArg(1, myArgs1, sizeof(myArgs1));
int EntIndex = StringToInt(myArgs1);
if (!IsValidEntity(EntIndex))
return Plugin_Handled;
char myArgs2[32];
GetCmdArg(2, myArgs2, sizeof(myArgs2));
int num = StringToInt(myArgs2);
if (num > 999)
{
{
Copier
Copié
Copier
Copié
ReplyToCommand(myClient, "Invalid value");
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
else
float eyeOrigin[3];
GetClientEyePosition(client, eyeOrigin);
float eyeAngle[3];
GetClientEyeAngles(client, eyeAngle);
Handle tr = TR_TraceRayFilterEx(eyeOrigin, eyeAngle, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
if (TR_DidHit(tr))
{
{
Copier
Copié
Copier
Copié
float
EntPos
[3];
float
endPoint
[3];
char typent[32];
TR_GetEndPosition(endPoint, tr
);
GetEntityClassname(EntIndex, typent, sizeof(typent)
);
TR_EnumerateEntities(eyeOrigin, endPoint, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, client);
if (StrEqual(typent, "func_nogrenades") || StrEqual(typent, "trigger_teleport"))
if (g_iBrushEntity[client] != -1)
{
{
Copier
Copié
Copier
Copié
GetEntPropVector(
Ent
Index
, Prop_Send, "m_vecOrigin", EntPos);
ReplyToCommand(client, "
Ent
ity
Index
: %i", g_iBrushEntity[client]);
if (num == 0)
{
EntPos[2] += num;
}
else
{
EntPos[2] += num; //Anyway LOL
}
TeleportEntity(EntIndex, EntPos, NULL_VECTOR, NULL_VECTOR);
}
}
}
}
Copier
Copié
Copier
Copié
delete tr;
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:GEI_Command(myC
lient,
args)
public Action
cmdFindHeight(int c
lient,
int
args)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myC
lient)
|| !BM_ENABLED[myClient])
if
(!g_b
Enabled || !
c
lient)
return Plugin_Continue;
float FL_TargetPos[3];
float FL_PlayerPos[3];
float FL_PlayerAng[3];
GetClientEyePosition(myClient, FL_PlayerPos);
GetClientEyeAngles(myClient, FL_PlayerAng);
Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
if(TR_DidHit(myTrace))
{
{
Copier
Copié
Copier
Copié
TR_GetEndPosition(FL_TargetPos, myTrace);
return Plugin_Handled;
TR_EnumerateEntities(FL_PlayerPos, FL_TargetPos, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, myClient);
if (BrushEntityIndex[myClient][0] != -1)
ReplyToCommand(myClient, "Entity Index: %i", BrushEntityIndex[myClient][0]);
}
}
Copier
Copié
Copier
Copié
delete myTrace;
return Plugin_Handled;
}
public Action:HC_Command(myClient, args)
{
if(!PL_Enabled || !IsValidClient(myClient))
return Plugin_Continue;
Menu menu = new Menu(MenuHandler_func);
Menu menu = new Menu(MenuHandler_func);
menu.SetTitle("Height Finder");
menu.SetTitle("Height Finder");
Copier
Copié
Copier
Copié
static float FL_TargetPos[3];
float eyeOrigin
[3];
static float FL_PlayerPos[3];
GetClientEyePosition(
c
lient,
eyeOrigin);
static float FL_PlayerAbsPos[3];
static float FL_PlayerTempPos[3];
static float FL_PlayerAng[3];
static float FL_TargetVec
[3];
GetClientEyePosition(
myC
lient,
FL_PlayerPos);
GetClientAbsOrigin(myClient, FL_PlayerAbsPos); //Abs Origin
GetClientEyeAngles(myClient, FL_PlayerAng);
Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
Copier
Copié
Copier
Copié
if
(TR_DidHit(myTrace))
float playerOrigin[3];
GetClientAbsOrigin(client, playerOrigin); //Abs Origin
float eyeAngle[3];
GetClientEyeAngles(client, eyeAngle);
Handle myTrace = TR_TraceRayFilterEx(eyeOrigin, eyeAngle, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
float endPoint[3];
if
(TR_DidHit(myTrace))
{
{
Copier
Copié
Copier
Copié
TR_GetEndPosition(
FL_TargetPos
, myTrace);
TR_GetEndPosition(
endPoint
, myTrace);
TR_EnumerateEntities(
FL_PlayerPos, FL_TargetPos
, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger,
myC
lient);
TR_EnumerateEntities(
eyeOrigin, endPoint
, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger,
c
lient);
}
}
Copier
Copié
Copier
Copié
delete myTrace;
delete myTrace;
Copier
Copié
Copier
Copié
char
distance[32];
char
buffer[32];
char detent[32];
char typent[32];
SubtractVectors(FL_TargetPos, FL_PlayerAbsPos, FL_TargetVec); //Distance to the ground
Format(distance, sizeof(distance), "Target height: %1.3f", FL_TargetVec[2]);
if (BrushEntityIndex[myClient][0] != -1)
Format(detent, sizeof(detent), "Brush entity: YES");
else
Format(detent, sizeof(detent), "Brush entity: NO");
Copier
Copié
Copier
Copié
menu.AddItem("th", distance, ITEMDRAW_DISABLED);
float difference[3];
menu.AddItem("be", detent, ITEMDRAW_DISABLED);
SubtractVectors(endPoint, playerOrigin, difference); //Distance to the ground
Copier
Copié
Copier
Copié
if (
BrushEntity
Index[myC
lient]
[0]
!= -1)
FormatEx(buffer, sizeof(buffer), "Target height: %1.3f", difference[2]);
menu.AddItem("", buffer, ITEMDRAW_DISABLED);
FormatEx(buffer, sizeof(buffer), "Brush entity: %s", g_iBrushEntity[client] != -1 ? "YES" : "NO");
menu.AddItem("", buffer, ITEMDRAW_DISABLED);
if (g_i
BrushEntity
[c
lient]
!= -1)
{
{
Copier
Copié
Copier
Copié
GetEntityClassname(
BrushEntity
Index[myC
lient]
[0], typent
, sizeof(
typent
));
GetEntityClassname(
g_i
BrushEntity
[c
lient]
, buffer
, sizeof(
buffer
));
if (StrEqual(
typent
, "func_nogrenades"))
Format(
typent
, sizeof(
typent
), "First detected: Nogrenade");
if (StrEqual(
buffer
, "func_nogrenades"))
if (StrEqual(
typent
, "trigger_teleport"))
{
Format(
typent
, sizeof(
typent
), "First detected: Teleport");
Format(
buffer
, sizeof(
buffer
), "First detected: Nogrenade");
}
else
if (StrEqual(
buffer
, "trigger_teleport"))
{
Format(
buffer
, sizeof(
buffer
), "First detected: Teleport");
}
}
}
else
else
{
{
Copier
Copié
Copier
Copié
Format(
typent
, sizeof(
typent
), "First detected: ---");
Format(
buffer
, sizeof(
buffer
), "First detected: ---");
}
}
Copier
Copié
Copier
Copié
menu.AddItem("fd", typent, ITEMDRAW_DISABLED);
menu.Display(myClient, 30);
Copier
Copié
Copier
Copié
int color[4]; color[0] = 255; color[1] = 255; color[2] = 255; color[3] = 255;
menu.AddItem("", buffer, ITEMDRAW_DISABLED);
TE_SetupBeamPoints(FL_PlayerAbsPos, FL_TargetPos, sprite, halo
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
color
, 0);
menu.Display(client, 30);
TE_SendToClient(
myC
lient, 0.1);
FL_PlayerTempPos
=
FL_PlayerAbsPos
;
TE_SetupBeamPoints(playerOrigin, endPoint, g_iSpritePrecache, g_iHaloPrecache
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
{255, 255, 255, 255}
, 0);
FL_PlayerTempPos
[2] =
FL_TargetPos
[2];
TE_SendToClient(
c
lient, 0.1);
TE_SetupBeamPoints(
FL_TargetPos, FL_PlayerTempPos, sprite, halo
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
color
, 0);
TE_SendToClient(
myC
lient, 0.1);
float temp[3];
TE_SetupBeamPoints(
FL_PlayerTempPos, FL_PlayerAbsPos, sprite, halo
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
color
, 0);
temp[0]
=
playerOrigin[0]
;
TE_SendToClient(
myC
lient, 0.1);
temp[1] = playerOrigin[1];
temp
[2] =
endPoint
[2];
TE_SetupBeamPoints(
endPoint, temp, g_iSpritePrecache, g_iHaloPrecache
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
{255, 255, 255, 255}
, 0);
TE_SendToClient(
c
lient, 0.1);
TE_SetupBeamPoints(
temp, playerOrigin, g_iSpritePrecache, g_iHaloPrecache
, 0, 0, 7.0, 5.0, 5.0, 1, 0.0,
{255, 255, 255, 255}
, 0);
TE_SendToClient(
c
lient, 0.1);
return Plugin_Handled;
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
public Action
:
OnPlayerRunCmd(
myC
lient,
&myB
uttons
, &myImpulse, Float:myVel[3], Float:myAng[3], &myWeapon
)
public Action
OnPlayerRunCmd(
int c
lient,
int &b
uttons
)
{
{
Copier
Copié
Copier
Copié
if
(!PL_
Enabled || !
IsValidClient(myClient))
if
(!g_b
Enabled || !
g_bCheckJump[client])
{
return Plugin_Continue;
return Plugin_Continue;
Copier
Copié
Copier
Copié
}
Copier
Copié
Copier
Copié
if (
CJ_ENABLED[myClient]
)
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", g_fVelocity[client]);
if (
g_fVelocity[client][2] <= 0.0
)
{
{
Copier
Copié
Copier
Copié
GetEntPropVector(myClient, Prop_Data, "m_vecAbsVelocity", FL_VelClient[myClient]);
return Plugin_Continue;
if (FL_VelClient[myClient][2] > 0.0)
}
{
static float FL_TargetPos[3];
static float FL_PlayerPos[3];
static float FL_PlayerAng[3]; FL_PlayerAng[0] = 90.0; FL_PlayerAng[1] = 0.0; FL_PlayerAng[2] = 0.0;
static float FL_TargetVec[3];
GetClientAbsOrigin(myClient, FL_PlayerPos);
Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
Copier
Copié
Copier
Copié
if(TR_DidHit(myTrace))
float playerOrigin[3];
{
GetClientAbsOrigin(client, playerOrigin);
TR_GetEndPosition(FL_TargetPos, myTrace);
}
delete myTrace;
Copier
Copié
Copier
Copié
SubtractVectors(
FL_PlayerPos, FL_TargetPos, FL_TargetVec
); //Distance to the ground
Handle tr = TR_TraceRayFilterEx(playerOrigin, view_as<float>({90.0, 0.0, 0.0}), MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity);
ClearSyncHud(myClient, HudDisplay);
float endPoint[3];
SetHudTextParams(0.65, 0.55, 5.0, 255, 255, 255, 255, 0, 0.1, 0.1, 0.1);
if (TR_DidHit(tr))
ShowSyncHudText(
myC
lient,
HudDisplay
, "Your max height: %1.3f",
FL_TargetVec
[2]);
{
return Plugin_Continue;
TR_GetEndPosition(endPoint, tr);
}
float difference[3];
SubtractVectors(
playerOrigin, endPoint, difference
); //Distance to the ground
SetHudTextParams(0.65, 0.55, 5.0, 255, 255, 255, 255, 0, 0.1, 0.1, 0.1);
ShowSyncHudText(
c
lient,
g_hHudSync
, "Your max height: %1.3f",
difference
[2]);
}
}
Copier
Copié
Copier
Copié
delete tr;
return Plugin_Continue;
return Plugin_Continue;
}
}
Copier
Copié
Copier
Copié
public bool TraceFilterEntity(int
myE
ntity, int m
yM
ask)
public bool TraceFilterEntity(int
e
ntity, int m
ask)
{
{
Copier
Copié
Copier
Copié
return
(myE
ntity
== 0
||
myE
ntity > MaxClients
); //0 - server console
return
!e
ntity
||
e
ntity > MaxClients
;
}
}
Copier
Copié
Copier
Copié
public bool DetectTrigger(int
myE
ntity, int
myC
lient)
public bool DetectTrigger(int
e
ntity, int
c
lient)
{
{
Copier
Copié
Copier
Copié
char
myC
lassName[
50
];
char
c
lassName[
32
];
GetEntityClassname(
myE
ntity,
myC
lassName, sizeof(
myC
lassName));
GetEntityClassname(
e
ntity,
c
lassName, sizeof(
c
lassName));
if (StrEqual(
myC
lassName, "trigger_teleport") || StrEqual(
myC
lassName, "func_nogrenades"))
if (StrEqual(
c
lassName, "trigger_teleport") || StrEqual(
c
lassName, "func_nogrenades"))
{
{
Copier
Copié
Copier
Copié
BrushEntity
Index[myC
lient]
[0]
=
myE
ntity;
g_i
BrushEntity
[c
lient]
=
e
ntity;
return false;
return false;
}
}
Copier
Copié
Copier
Copié
else
{
g_i
BrushEntity
[c
lient]
= -1;
BrushEntity
Index[myC
lient]
[0]
= -1;
return true;
return true;
}
}
}
Copier
Copié
Copier
Copié
public Action Func_SetTransmit(int entity, int
myC
lient)
public Action Func_SetTransmit(int entity, int
c
lient)
{
{
Copier
Copié
Copier
Copié
if (!
BM_ENABLED[myC
lient])
if (!
g_bBrushMode[c
lient])
{
{
Copier
Copié
Copier
Copié
return Plugin_Handled;
//Disable trigger_teleport transmit to the client (if plugin is disabled for current player in array)
//Disable trigger_teleport transmit to the client (if plugin is disabled for current player in array)
return Plugin_Handled;
}
}
Copier
Copié
Copier
Copié
return Plugin_Continue;
return Plugin_Continue;
}
}
/////////////////////////////// <-- STOCKS --> ////////////////////////////////////////////////
/////////////////////////////// <-- STOCKS --> ////////////////////////////////////////////////
Copier
Copié
Copier
Copié
/**
#define EF_NODRAW 0x020
* Checks client validity
* @param myEntity Entity index.
* @param Replay Logical bool parameter.
*/
stock bool:IsValidClient(myClient, bool:Replay = true)
{
if(myClient <= 0 || myClient > MaxClients || !IsClientInGame(myClient))
return false;
if(Replay && (IsClientSourceTV(myClient) || IsClientReplay(myClient) || IsClientObserver(myClient)))
return false;
return true;
}
/**
/**
* Sets transmit state to the edict and flag (shows brush entity - func_nogrenades, trigger_teleport)
* Sets transmit state to the edict and flag (shows brush entity - func_nogrenades, trigger_teleport)
Copier
Copié
Copier
Copié
* @param
myE
ntity Entity index.
* @param
e
ntity Entity index.
*/
*/
Copier
Copié
Copier
Copié
stock
void ShowBrushEntity(int
myE
ntity)
void ShowBrushEntity(int
e
ntity)
{
{
Copier
Copié
Copier
Copié
if (
IsValidEdict(
myE
ntity))
if (
!
IsValidEdict(
e
ntity))
{
{
Copier
Copié
Copier
Copié
int EffectFlags = GetEntData(myEntity, Offset_for_entity_effect);
return;
int EdictFlags = GetEdictFlags(myEntity);
if (myEntity != -1)
{
EffectFlags &= ~32; //EF_NODRAW flag (0x020)
EdictFlags &= ~FL_EDICT_DONTSEND; //Transmit State - Don't ever transmit.
SetEntData(myEntity, Offset_for_entity_effect, EffectFlags);
ChangeEdictState(myEntity, Offset_for_entity_effect);
SetEdictFlags(myEntity, EdictFlags);
}
}
}
Copier
Copié
Copier
Copié
SDKHook(
myE
ntity, SDKHook_SetTransmit, Func_SetTransmit);
SetEntData(entity, g_iEffectOffset, GetEntData(entity, g_iEffectOffset) & ~EF_NODRAW);
SetEdictFlags(entity, GetEdictFlags(entity) & ~FL_EDICT_DONTSEND);
ChangeEdictState(entity, g_iEffectOffset);
SDKHook(
e
ntity, SDKHook_SetTransmit, Func_SetTransmit);
}
}
/**
/**
* Sets transmit state to the edict and flag (stops showing brush entities - func_nogrenades, trigger_teleport)
* Sets transmit state to the edict and flag (stops showing brush entities - func_nogrenades, trigger_teleport)
Copier
Copié
Copier
Copié
* @param
myE
ntity Entity index.
* @param
e
ntity Entity index.
*/
*/
Copier
Copié
Copier
Copié
stock
void StopShowBrushEntity(int
myE
ntity)
void StopShowBrushEntity(int
e
ntity)
{
{
Copier
Copié
Copier
Copié
if (
IsValidEdict(
myE
ntity))
if (
!
IsValidEdict(
e
ntity))
{
{
Copier
Copié
Copier
Copié
int EffectFlags = GetEntData(myEntity, Offset_for_entity_effect);
return;
int EdictFlags = GetEdictFlags(myEntity);
if (myEntity != -1)
{
EffectFlags |= 32; //EF_NODRAW flag (0x020)
EdictFlags |= FL_EDICT_DONTSEND; //Transmit State - Don't ever transmit.
SetEntData(myEntity, Offset_for_entity_effect, EffectFlags);
ChangeEdictState(myEntity, Offset_for_entity_effect);
SetEdictFlags(myEntity, EdictFlags);
}
}
}
Copier
Copié
Copier
Copié
SDKUnhook(
myE
ntity, SDKHook_SetTransmit, Func_SetTransmit);
SetEntData(entity, g_iEffectOffset, GetEntData(entity, g_iEffectOffset)|EF_NODRAW);
SetEdictFlags(entity, GetEdictFlags(entity)|FL_EDICT_DONTSEND);
ChangeEdictState(entity, g_iEffectOffset);
SDKUnhook(
e
ntity, SDKHook_SetTransmit, Func_SetTransmit);
}
}
Différences enregistrées
Texte d'origine
Ouvrir un fichier
#pragma semicolon 1 #include <sourcemod> #include <sdktools> #include <sdkhooks> #define PLUGIN_VERSION "1.0.1" #define SPRITE_BEAM "materials/sprites/laser.vmt" bool PL_Enabled; bool BM_ENABLED[MAXPLAYERS + 1]; bool CJ_ENABLED[MAXPLAYERS + 1]; int Offset_for_entity_effect = -1; int BrushEntityIndex[MAXPLAYERS + 1][1]; //Array of brush entities (trigger_teleport, func_nogrenades) int sprite; int halo; float FL_VelClient[MAXPLAYERS + 1][3]; ConVar g_pluginEnabled; Handle HudDisplay; public Plugin:myinfo = { name = "Height Finder", author = "Master Cake", description = "This plugin finds height", version = PLUGIN_VERSION, url = "" }; public OnPluginStart() { CreateConVar("hfind_version", PLUGIN_VERSION, "Height Finder Version", FCVAR_REPLICATED | FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY); g_pluginEnabled = CreateConVar("hfind_enabled", "1", "Enable Height Finder\n0 = Disabled\n1 = Enabled", _, true, 0.0, true, 1.0); PL_Enabled = GetConVarBool(g_pluginEnabled); HookConVarChange(g_pluginEnabled, ConsoleVarChange); Offset_for_entity_effect = FindSendPropInfo("CBaseEntity", "m_fEffects"); //Find offset to "m_fEffects" property if (Offset_for_entity_effect == -1) SetFailState("m_fEffects property not found!"); RegConsoleCmd("sm_findh", HC_Command, "Command to enable Height Finder"); RegConsoleCmd("sm_checkjump", CJ_Command, "Command to enable jump checker"); RegAdminCmd("sm_brushmode", BM_Command, ADMFLAG_GENERIC, "Command to enable/disable brush mode"); RegAdminCmd("sm_nogrenades", NG_Command, ADMFLAG_GENERIC, "Command to show func_nogrenades brush entities"); RegAdminCmd("sm_stopnogrenades", SNG_Command, ADMFLAG_GENERIC, "Command to stop showing func_nogrenades brush entities"); RegAdminCmd("sm_teletriggers", TT_Command, ADMFLAG_GENERIC, "Command to show trigger_teleport brush entities"); RegAdminCmd("sm_stopteletriggers", STT_Command, ADMFLAG_GENERIC, "Command to stop showing trigger_teleport brush entities"); RegAdminCmd("sm_removent", RENT_Command, ADMFLAG_GENERIC, "Command to remove trigger_teleport and func_nogrenades brush entities"); RegAdminCmd("sm_getentindex", GEI_Command, ADMFLAG_GENERIC, "Command to get trigger_teleport and func_nogrenades index"); RegAdminCmd("sm_moventup", MEU_Command, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities up"); RegAdminCmd("sm_moventdown", MED_Command, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities down"); AutoExecConfig(true, "hfind"); HudDisplay = CreateHudSynchronizer(); } public OnMapStart() { sprite = PrecacheModel(SPRITE_BEAM); halo = PrecacheModel(SPRITE_BEAM); } public ConsoleVarChange(Handle:CVar, const String:oldValue[], const String:newValue[]) { if(CVar == g_pluginEnabled) { PL_Enabled = GetConVarBool(g_pluginEnabled); } } public OnClientPutInServer(myClient) { BM_ENABLED[myClient] = false; CJ_ENABLED[myClient] = false; BrushEntityIndex[myClient][0] = -1; } public int MenuHandler_func(Menu menu, MenuAction action, int param1, int param2) { if (action == MenuAction_End) { delete menu; } } public Action:CJ_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient)) return Plugin_Continue; if (!CJ_ENABLED[myClient]) { CJ_ENABLED[myClient] = true; ReplyToCommand(myClient, "[SM] Jump Check Enabled!"); return Plugin_Continue; } if (CJ_ENABLED[myClient]) { CJ_ENABLED[myClient] = false; ReplyToCommand(myClient, "[SM] Jump Check Disabled!"); } return Plugin_Handled; } public Action:BM_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient)) return Plugin_Continue; if (!BM_ENABLED[myClient]) { BM_ENABLED[myClient] = true; ReplyToCommand(myClient, "[SM] Brush Mode Enabled!"); return Plugin_Continue; } if (BM_ENABLED[myClient]) { BM_ENABLED[myClient] = false; ReplyToCommand(myClient, "[SM] Brush Mode Disabled!"); } return Plugin_Handled; } public Action:RENT_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; int EntityCount = GetEntityCount(); char myClassName[50]; for (int myEntity = MaxClients + 1; myEntity <= EntityCount; ++myEntity) { if (IsValidEntity(myEntity)) { GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "trigger_teleport") || StrEqual(myClassName, "func_nogrenades")) { RemoveEntity(myEntity); } } } return Plugin_Handled; } public Action:STT_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; int EntityCouunt = GetEntityCount(); char myClassName[50]; for (int myEntity = MaxClients + 1; myEntity <= EntityCouunt; ++myEntity) { if (IsValidEntity(myEntity)) { GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "trigger_teleport")) { StopShowBrushEntity(myEntity); } } } return Plugin_Handled; } public Action:TT_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; int EntityCouunt = GetEntityCount(); char myClassName[50]; for (int myEntity = MaxClients + 1; myEntity <= EntityCouunt; ++myEntity) { if (IsValidEntity(myEntity)) { GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "trigger_teleport")) { ShowBrushEntity(myEntity); } } } return Plugin_Handled; } public Action:NG_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; int EntityCouunt = GetEntityCount(); char myClassName[50]; for (int myEntity = MaxClients + 1; myEntity <= EntityCouunt; ++myEntity) { if (IsValidEntity(myEntity)) { GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "func_nogrenades")) { ShowBrushEntity(myEntity); } } } return Plugin_Handled; } public Action:SNG_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; int EntityCouunt = GetEntityCount(); char myClassName[50]; for (int myEntity = MaxClients + 1; myEntity <= EntityCouunt; ++myEntity) { if (IsValidEntity(myEntity)) { GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "func_nogrenades")) { StopShowBrushEntity(myEntity); } } } return Plugin_Handled; } public Action:MED_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; if (args != 2) { ReplyToCommand(myClient, "Usage: sm_moventdown <index> <num of units>"); return Plugin_Handled; } char myArgs1[32]; GetCmdArg(1, myArgs1, sizeof(myArgs1)); int EntIndex = StringToInt(myArgs1); if (!IsValidEntity(EntIndex)) return Plugin_Handled; char myArgs2[32]; GetCmdArg(2, myArgs2, sizeof(myArgs2)); int num = StringToInt(myArgs2); if (num > 999) { ReplyToCommand(myClient, "Invalid value"); return Plugin_Handled; } else { float EntPos[3]; char typent[32]; GetEntityClassname(EntIndex, typent, sizeof(typent)); if (StrEqual(typent, "func_nogrenades") || StrEqual(typent, "trigger_teleport")) { GetEntPropVector(EntIndex, Prop_Send, "m_vecOrigin", EntPos); if (num == 0) { EntPos[2] += num; } else { EntPos[2] -= num; } TeleportEntity(EntIndex, EntPos, NULL_VECTOR, NULL_VECTOR); } } return Plugin_Handled; } public Action:MEU_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; if (args != 2) { ReplyToCommand(myClient, "Usage: sm_moventup <index> <num of units>"); return Plugin_Handled; } char myArgs1[32]; GetCmdArg(1, myArgs1, sizeof(myArgs1)); int EntIndex = StringToInt(myArgs1); if (!IsValidEntity(EntIndex)) return Plugin_Handled; char myArgs2[32]; GetCmdArg(2, myArgs2, sizeof(myArgs2)); int num = StringToInt(myArgs2); if (num > 999) { ReplyToCommand(myClient, "Invalid value"); return Plugin_Handled; } else { float EntPos[3]; char typent[32]; GetEntityClassname(EntIndex, typent, sizeof(typent)); if (StrEqual(typent, "func_nogrenades") || StrEqual(typent, "trigger_teleport")) { GetEntPropVector(EntIndex, Prop_Send, "m_vecOrigin", EntPos); if (num == 0) { EntPos[2] += num; } else { EntPos[2] += num; //Anyway LOL } TeleportEntity(EntIndex, EntPos, NULL_VECTOR, NULL_VECTOR); } } return Plugin_Handled; } public Action:GEI_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient) || !BM_ENABLED[myClient]) return Plugin_Continue; float FL_TargetPos[3]; float FL_PlayerPos[3]; float FL_PlayerAng[3]; GetClientEyePosition(myClient, FL_PlayerPos); GetClientEyeAngles(myClient, FL_PlayerAng); Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); if(TR_DidHit(myTrace)) { TR_GetEndPosition(FL_TargetPos, myTrace); TR_EnumerateEntities(FL_PlayerPos, FL_TargetPos, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, myClient); if (BrushEntityIndex[myClient][0] != -1) ReplyToCommand(myClient, "Entity Index: %i", BrushEntityIndex[myClient][0]); } delete myTrace; return Plugin_Handled; } public Action:HC_Command(myClient, args) { if(!PL_Enabled || !IsValidClient(myClient)) return Plugin_Continue; Menu menu = new Menu(MenuHandler_func); menu.SetTitle("Height Finder"); static float FL_TargetPos[3]; static float FL_PlayerPos[3]; static float FL_PlayerAbsPos[3]; static float FL_PlayerTempPos[3]; static float FL_PlayerAng[3]; static float FL_TargetVec[3]; GetClientEyePosition(myClient, FL_PlayerPos); GetClientAbsOrigin(myClient, FL_PlayerAbsPos); //Abs Origin GetClientEyeAngles(myClient, FL_PlayerAng); Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); if(TR_DidHit(myTrace)) { TR_GetEndPosition(FL_TargetPos, myTrace); TR_EnumerateEntities(FL_PlayerPos, FL_TargetPos, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, myClient); } delete myTrace; char distance[32]; char detent[32]; char typent[32]; SubtractVectors(FL_TargetPos, FL_PlayerAbsPos, FL_TargetVec); //Distance to the ground Format(distance, sizeof(distance), "Target height: %1.3f", FL_TargetVec[2]); if (BrushEntityIndex[myClient][0] != -1) Format(detent, sizeof(detent), "Brush entity: YES"); else Format(detent, sizeof(detent), "Brush entity: NO"); menu.AddItem("th", distance, ITEMDRAW_DISABLED); menu.AddItem("be", detent, ITEMDRAW_DISABLED); if (BrushEntityIndex[myClient][0] != -1) { GetEntityClassname(BrushEntityIndex[myClient][0], typent, sizeof(typent)); if (StrEqual(typent, "func_nogrenades")) Format(typent, sizeof(typent), "First detected: Nogrenade"); if (StrEqual(typent, "trigger_teleport")) Format(typent, sizeof(typent), "First detected: Teleport"); } else { Format(typent, sizeof(typent), "First detected: ---"); } menu.AddItem("fd", typent, ITEMDRAW_DISABLED); menu.Display(myClient, 30); int color[4]; color[0] = 255; color[1] = 255; color[2] = 255; color[3] = 255; TE_SetupBeamPoints(FL_PlayerAbsPos, FL_TargetPos, sprite, halo, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, color, 0); TE_SendToClient(myClient, 0.1); FL_PlayerTempPos = FL_PlayerAbsPos; FL_PlayerTempPos[2] = FL_TargetPos[2]; TE_SetupBeamPoints(FL_TargetPos, FL_PlayerTempPos, sprite, halo, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, color, 0); TE_SendToClient(myClient, 0.1); TE_SetupBeamPoints(FL_PlayerTempPos, FL_PlayerAbsPos, sprite, halo, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, color, 0); TE_SendToClient(myClient, 0.1); return Plugin_Handled; } public Action:OnPlayerRunCmd(myClient, &myButtons, &myImpulse, Float:myVel[3], Float:myAng[3], &myWeapon) { if(!PL_Enabled || !IsValidClient(myClient)) return Plugin_Continue; if (CJ_ENABLED[myClient]) { GetEntPropVector(myClient, Prop_Data, "m_vecAbsVelocity", FL_VelClient[myClient]); if (FL_VelClient[myClient][2] > 0.0) { static float FL_TargetPos[3]; static float FL_PlayerPos[3]; static float FL_PlayerAng[3]; FL_PlayerAng[0] = 90.0; FL_PlayerAng[1] = 0.0; FL_PlayerAng[2] = 0.0; static float FL_TargetVec[3]; GetClientAbsOrigin(myClient, FL_PlayerPos); Handle myTrace = TR_TraceRayFilterEx(FL_PlayerPos, FL_PlayerAng, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); if(TR_DidHit(myTrace)) { TR_GetEndPosition(FL_TargetPos, myTrace); } delete myTrace; SubtractVectors(FL_PlayerPos, FL_TargetPos, FL_TargetVec); //Distance to the ground ClearSyncHud(myClient, HudDisplay); SetHudTextParams(0.65, 0.55, 5.0, 255, 255, 255, 255, 0, 0.1, 0.1, 0.1); ShowSyncHudText(myClient, HudDisplay, "Your max height: %1.3f", FL_TargetVec[2]); return Plugin_Continue; } } return Plugin_Continue; } public bool TraceFilterEntity(int myEntity, int myMask) { return (myEntity == 0 || myEntity > MaxClients); //0 - server console } public bool DetectTrigger(int myEntity, int myClient) { char myClassName[50]; GetEntityClassname(myEntity, myClassName, sizeof(myClassName)); if (StrEqual(myClassName, "trigger_teleport") || StrEqual(myClassName, "func_nogrenades")) { BrushEntityIndex[myClient][0] = myEntity; return false; } else { BrushEntityIndex[myClient][0] = -1; return true; } } public Action Func_SetTransmit(int entity, int myClient) { if (!BM_ENABLED[myClient]) { return Plugin_Handled; //Disable trigger_teleport transmit to the client (if plugin is disabled for current player in array) } return Plugin_Continue; } /////////////////////////////// <-- STOCKS --> //////////////////////////////////////////////// /** * Checks client validity * @param myEntity Entity index. * @param Replay Logical bool parameter. */ stock bool:IsValidClient(myClient, bool:Replay = true) { if(myClient <= 0 || myClient > MaxClients || !IsClientInGame(myClient)) return false; if(Replay && (IsClientSourceTV(myClient) || IsClientReplay(myClient) || IsClientObserver(myClient))) return false; return true; } /** * Sets transmit state to the edict and flag (shows brush entity - func_nogrenades, trigger_teleport) * @param myEntity Entity index. */ stock void ShowBrushEntity(int myEntity) { if (IsValidEdict(myEntity)) { int EffectFlags = GetEntData(myEntity, Offset_for_entity_effect); int EdictFlags = GetEdictFlags(myEntity); if (myEntity != -1) { EffectFlags &= ~32; //EF_NODRAW flag (0x020) EdictFlags &= ~FL_EDICT_DONTSEND; //Transmit State - Don't ever transmit. SetEntData(myEntity, Offset_for_entity_effect, EffectFlags); ChangeEdictState(myEntity, Offset_for_entity_effect); SetEdictFlags(myEntity, EdictFlags); } } SDKHook(myEntity, SDKHook_SetTransmit, Func_SetTransmit); } /** * Sets transmit state to the edict and flag (stops showing brush entities - func_nogrenades, trigger_teleport) * @param myEntity Entity index. */ stock void StopShowBrushEntity(int myEntity) { if (IsValidEdict(myEntity)) { int EffectFlags = GetEntData(myEntity, Offset_for_entity_effect); int EdictFlags = GetEdictFlags(myEntity); if (myEntity != -1) { EffectFlags |= 32; //EF_NODRAW flag (0x020) EdictFlags |= FL_EDICT_DONTSEND; //Transmit State - Don't ever transmit. SetEntData(myEntity, Offset_for_entity_effect, EffectFlags); ChangeEdictState(myEntity, Offset_for_entity_effect); SetEdictFlags(myEntity, EdictFlags); } } SDKUnhook(myEntity, SDKHook_SetTransmit, Func_SetTransmit); }
Texte modifié
Ouvrir un fichier
#pragma semicolon 1 #include <sourcemod> #include <sdktools> #include <sdkhooks> #define PLUGIN_VERSION "1.0.2" #define SPRITE_BEAM "materials/sprites/laser.vmt" bool g_bEnabled; bool g_bBrushMode[MAXPLAYERS + 1]; bool g_bCheckJump[MAXPLAYERS + 1]; int g_iEffectOffset = -1; int g_iBrushEntity[MAXPLAYERS + 1]; //Array of brush entities (trigger_teleport, func_nogrenades) int g_iSpritePrecache; int g_iHaloPrecache; float g_fVelocity[MAXPLAYERS + 1][3]; ConVar g_cvarEnabled; Handle g_hHudSync; public Plugin myinfo = { name = "Height Finder", author = "Master Cake", description = "This plugin finds height", version = PLUGIN_VERSION, url = "" }; public void OnPluginStart() { CreateConVar("hfind_version", PLUGIN_VERSION, "Height Finder Version", FCVAR_SPONLY | FCVAR_DONTRECORD | FCVAR_NOTIFY); g_cvarEnabled = CreateConVar("hfind_enabled", "1", "Enable Height Finder\n0 = Disabled\n1 = Enabled", _, true, 0.0, true, 1.0); g_bEnabled = GetConVarBool(g_cvarEnabled); HookConVarChange(g_cvarEnabled, ConsoleVarChange); g_iEffectOffset = FindSendPropInfo("CBaseEntity", "m_fEffects"); //Find offset to "m_fEffects" property if (g_iEffectOffset == -1) { SetFailState("m_fEffects property not found!"); } RegConsoleCmd("sm_findh", cmdFindHeight, "Command to enable Height Finder"); RegConsoleCmd("sm_checkjump", cmdCheckJump, "Command to enable jump checker"); RegAdminCmd("sm_brushmode", cmdBrushMode, ADMFLAG_GENERIC, "Command to enable/disable brush mode"); RegAdminCmd("sm_nogrenades", cmdEnableNoGrenade, ADMFLAG_GENERIC, "Command to show func_nogrenades brush entities"); RegAdminCmd("sm_stopnogrenades", cmdDisableNoGrenade, ADMFLAG_GENERIC, "Command to stop showing func_nogrenades brush entities"); RegAdminCmd("sm_teletriggers", cmdEnableTeleTrigger, ADMFLAG_GENERIC, "Command to show trigger_teleport brush entities"); RegAdminCmd("sm_stopteletriggers", cmdDisableTeleTrigger, ADMFLAG_GENERIC, "Command to stop showing trigger_teleport brush entities"); RegAdminCmd("sm_removent", cmdRemoveEntities, ADMFLAG_GENERIC, "Command to remove trigger_teleport and func_nogrenades brush entities"); RegAdminCmd("sm_getentindex", cmdGetEntityIndex, ADMFLAG_GENERIC, "Command to get trigger_teleport and func_nogrenades index"); RegAdminCmd("sm_movent", cmdMoveEnt, ADMFLAG_GENERIC, "Command to move trigger_teleport and func_nogrenades brush entities"); AutoExecConfig(true, "hfind"); g_hHudSync = CreateHudSynchronizer(); } public void OnMapStart() { g_iSpritePrecache = PrecacheModel(SPRITE_BEAM); g_iHaloPrecache = PrecacheModel(SPRITE_BEAM); } public void ConsoleVarChange(ConVar cvar, const char[] oldValue, const char[] newValue) { g_bEnabled = GetConVarBool(cvar); } public void OnClientPutInServer(int client) { g_bBrushMode[client] = false; g_bCheckJump[client] = false; g_iBrushEntity[client] = -1; } public int MenuHandler_func(Menu menu, MenuAction action, int param1, int param2) { if (action == MenuAction_End) { delete menu; } } public Action cmdCheckJump(int client, int args) { if (g_bEnabled && client) { g_bCheckJump[client] = !g_bCheckJump[client]; ReplyToCommand(client, "[SM] Jump Check %s!", g_bCheckJump[client] ? "Enabled" : "Disabled"); } return Plugin_Handled; } public Action cmdBrushMode(int client, int args) { if (g_bEnabled && client) { g_bBrushMode[client] = !g_bBrushMode[client]; ReplyToCommand(client, "[SM] Brush Mode %s!", g_bBrushMode[client] ? "Enabled" : "Disabled"); } return Plugin_Handled; } public Action cmdRemoveEntities(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } char className[32]; for (int i = MaxClients + 1; i <= 2048; ++i) { if (IsValidEntity(i)) { GetEntityClassname(i, className, sizeof(className)); if (StrEqual(className, "trigger_teleport") || StrEqual(className, "func_nogrenades")) { RemoveEntity(i); } } } return Plugin_Handled; } public Action cmdDisableTeleTrigger(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } char className[32]; for (int i = MaxClients + 1; i <= 2048; ++i) { if (IsValidEntity(i)) { GetEntityClassname(i, className, sizeof(className)); if (StrEqual(className, "trigger_teleport")) { StopShowBrushEntity(i); } } } return Plugin_Handled; } public Action cmdEnableTeleTrigger(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } char className[32]; for (int i = MaxClients + 1; i <= 2048; ++i) { if (IsValidEntity(i)) { GetEntityClassname(i, className, sizeof(className)); if (StrEqual(className, "trigger_teleport")) { ShowBrushEntity(i); } } } return Plugin_Handled; } public Action cmdEnableNoGrenade(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } char className[32]; for (int i = MaxClients + 1; i <= 2048; ++i) { if (IsValidEntity(i)) { GetEntityClassname(i, className, sizeof(className)); if (StrEqual(className, "func_nogrenades")) { ShowBrushEntity(i); } } } return Plugin_Handled; } public Action cmdDisableNoGrenade(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } char className[32]; for (int i = MaxClients + 1; i <= 2048; ++i) { if (IsValidEntity(i)) { GetEntityClassname(i, className, sizeof(className)); if (StrEqual(className, "func_nogrenades")) { StopShowBrushEntity(i); } } } return Plugin_Handled; } public Action cmdMoveEnt(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } if (args != 2) { ReplyToCommand(client, "Usage: sm_moventup <index> <num of units>"); return Plugin_Handled; } char arg1[32]; GetCmdArg(1, arg1, sizeof(arg1)); int entity = StringToInt(arg1); if (!IsValidEntity(entity)) { return Plugin_Handled; } char arg2[32]; GetCmdArg(2, arg2, sizeof(arg2)); int distance = StringToInt(arg2); if (!distance || distance > 999 || distance < -999) { ReplyToCommand(client, "Invalid value"); return Plugin_Handled; } char className[32]; GetEntityClassname(entity, className, sizeof(className)); if (StrEqual(className, "func_nogrenades") || StrEqual(className, "trigger_teleport")) { float origin[3]; GetEntPropVector(entity, Prop_Send, "m_vecOrigin", origin); origin[2] += distance; TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR); } return Plugin_Handled; } public Action cmdGetEntityIndex(int client, int args) { if (!g_bEnabled || !client || !g_bBrushMode[client]) { return Plugin_Handled; } float eyeOrigin[3]; GetClientEyePosition(client, eyeOrigin); float eyeAngle[3]; GetClientEyeAngles(client, eyeAngle); Handle tr = TR_TraceRayFilterEx(eyeOrigin, eyeAngle, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); if (TR_DidHit(tr)) { float endPoint[3]; TR_GetEndPosition(endPoint, tr); TR_EnumerateEntities(eyeOrigin, endPoint, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, client); if (g_iBrushEntity[client] != -1) { ReplyToCommand(client, "Entity Index: %i", g_iBrushEntity[client]); } } delete tr; return Plugin_Handled; } public Action cmdFindHeight(int client, int args) { if (!g_bEnabled || !client) { return Plugin_Handled; } Menu menu = new Menu(MenuHandler_func); menu.SetTitle("Height Finder"); float eyeOrigin[3]; GetClientEyePosition(client, eyeOrigin); float playerOrigin[3]; GetClientAbsOrigin(client, playerOrigin); //Abs Origin float eyeAngle[3]; GetClientEyeAngles(client, eyeAngle); Handle myTrace = TR_TraceRayFilterEx(eyeOrigin, eyeAngle, MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); float endPoint[3]; if (TR_DidHit(myTrace)) { TR_GetEndPosition(endPoint, myTrace); TR_EnumerateEntities(eyeOrigin, endPoint, PARTITION_TRIGGER_EDICTS, RayType_EndPoint, DetectTrigger, client); } delete myTrace; char buffer[32]; float difference[3]; SubtractVectors(endPoint, playerOrigin, difference); //Distance to the ground FormatEx(buffer, sizeof(buffer), "Target height: %1.3f", difference[2]); menu.AddItem("", buffer, ITEMDRAW_DISABLED); FormatEx(buffer, sizeof(buffer), "Brush entity: %s", g_iBrushEntity[client] != -1 ? "YES" : "NO"); menu.AddItem("", buffer, ITEMDRAW_DISABLED); if (g_iBrushEntity[client] != -1) { GetEntityClassname(g_iBrushEntity[client], buffer, sizeof(buffer)); if (StrEqual(buffer, "func_nogrenades")) { Format(buffer, sizeof(buffer), "First detected: Nogrenade"); } else if (StrEqual(buffer, "trigger_teleport")) { Format(buffer, sizeof(buffer), "First detected: Teleport"); } } else { Format(buffer, sizeof(buffer), "First detected: ---"); } menu.AddItem("", buffer, ITEMDRAW_DISABLED); menu.Display(client, 30); TE_SetupBeamPoints(playerOrigin, endPoint, g_iSpritePrecache, g_iHaloPrecache, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, {255, 255, 255, 255}, 0); TE_SendToClient(client, 0.1); float temp[3]; temp[0] = playerOrigin[0]; temp[1] = playerOrigin[1]; temp[2] = endPoint[2]; TE_SetupBeamPoints(endPoint, temp, g_iSpritePrecache, g_iHaloPrecache, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, {255, 255, 255, 255}, 0); TE_SendToClient(client, 0.1); TE_SetupBeamPoints(temp, playerOrigin, g_iSpritePrecache, g_iHaloPrecache, 0, 0, 7.0, 5.0, 5.0, 1, 0.0, {255, 255, 255, 255}, 0); TE_SendToClient(client, 0.1); return Plugin_Handled; } public Action OnPlayerRunCmd(int client, int &buttons) { if (!g_bEnabled || !g_bCheckJump[client]) { return Plugin_Continue; } GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", g_fVelocity[client]); if (g_fVelocity[client][2] <= 0.0) { return Plugin_Continue; } float playerOrigin[3]; GetClientAbsOrigin(client, playerOrigin); Handle tr = TR_TraceRayFilterEx(playerOrigin, view_as<float>({90.0, 0.0, 0.0}), MASK_PLAYERSOLID, RayType_Infinite, TraceFilterEntity); float endPoint[3]; if (TR_DidHit(tr)) { TR_GetEndPosition(endPoint, tr); float difference[3]; SubtractVectors(playerOrigin, endPoint, difference); //Distance to the ground SetHudTextParams(0.65, 0.55, 5.0, 255, 255, 255, 255, 0, 0.1, 0.1, 0.1); ShowSyncHudText(client, g_hHudSync, "Your max height: %1.3f", difference[2]); } delete tr; return Plugin_Continue; } public bool TraceFilterEntity(int entity, int mask) { return !entity || entity > MaxClients; } public bool DetectTrigger(int entity, int client) { char className[32]; GetEntityClassname(entity, className, sizeof(className)); if (StrEqual(className, "trigger_teleport") || StrEqual(className, "func_nogrenades")) { g_iBrushEntity[client] = entity; return false; } g_iBrushEntity[client] = -1; return true; } public Action Func_SetTransmit(int entity, int client) { if (!g_bBrushMode[client]) { //Disable trigger_teleport transmit to the client (if plugin is disabled for current player in array) return Plugin_Handled; } return Plugin_Continue; } /////////////////////////////// <-- STOCKS --> //////////////////////////////////////////////// #define EF_NODRAW 0x020 /** * Sets transmit state to the edict and flag (shows brush entity - func_nogrenades, trigger_teleport) * @param entity Entity index. */ void ShowBrushEntity(int entity) { if (!IsValidEdict(entity)) { return; } SetEntData(entity, g_iEffectOffset, GetEntData(entity, g_iEffectOffset) & ~EF_NODRAW); SetEdictFlags(entity, GetEdictFlags(entity) & ~FL_EDICT_DONTSEND); ChangeEdictState(entity, g_iEffectOffset); SDKHook(entity, SDKHook_SetTransmit, Func_SetTransmit); } /** * Sets transmit state to the edict and flag (stops showing brush entities - func_nogrenades, trigger_teleport) * @param entity Entity index. */ void StopShowBrushEntity(int entity) { if (!IsValidEdict(entity)) { return; } SetEntData(entity, g_iEffectOffset, GetEntData(entity, g_iEffectOffset)|EF_NODRAW); SetEdictFlags(entity, GetEdictFlags(entity)|FL_EDICT_DONTSEND); ChangeEdictState(entity, g_iEffectOffset); SDKUnhook(entity, SDKHook_SetTransmit, Func_SetTransmit); }
Trouver la différence