Diff
checker
Text
Text
Bilder
Dokumente
Excel
Ordner
Legal
Enterprise
Desktop-App
Preise
Einloggen
Diffchecker Desktop herunterladen
Texte vergleichen
Finde den Unterschied zwischen zwei Textdateien
Werkzeuge
Verlauf
Live-Editor
Gleiches ausblenden
Zeilenumbruch aus
Ansicht
Zweispaltig
Einspaltig
Vergleichsgenauigkeit
Intelligent
Wort
Zeichen
Syntaxhervorhebung
Syntax auswählen
Ignorieren
Text umwandeln
Zur ersten Änderung
Eingabe bearbeiten
Diffchecker Desktop
Der sicherste Weg, Diffchecker zu nutzen. Hol dir die Desktop-App: Deine Diffs verlassen nie deinen Computer!
Desktop holen
jtfHeightFinder
Erstellt
vor 6 Jahren
Diff läuft nie ab
Löschen
Exportieren
Teilen
Erklären
461 Entfernungen
Zeilen
Gesamt
Entfernt
Zeichen
Gesamt
Entfernt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
552 Zeilen
Kopieren
404 Hinzufügungen
Zeilen
Gesamt
Hinzugefügt
Zeichen
Gesamt
Hinzugefügt
Um diese Funktion weiterhin zu nutzen, aktualisiere auf
Diff
checker
Pro
Preise anzeigen
491 Zeilen
Kopieren
#pragma semicolon 1
#pragma semicolon 1
#include <sourcemod>
#include <sourcemod>
#include <sdktools>
#include <sdktools>
#include <sdkhooks>
#include <sdkhooks>
Kopieren
Kopiert
Kopieren
Kopiert
#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"
Kopieren
Kopiert
Kopieren
Kopiert
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];
Kopieren
Kopiert
Kopieren
Kopiert
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
;
Kopieren
Kopiert
Kopieren
Kopiert
float
FL_VelClient
[MAXPLAYERS + 1][3];
float
g_fVelocity
[MAXPLAYERS + 1][3];
Kopieren
Kopiert
Kopieren
Kopiert
ConVar g_
pluginEnabled
;
ConVar g_
cvarEnabled
;
Kopieren
Kopiert
Kopieren
Kopiert
Handle
HudDisplay
;
Handle
g_hHudSync
;
Kopieren
Kopiert
Kopieren
Kopiert
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 = ""
};
};
Kopieren
Kopiert
Kopieren
Kopiert
public
OnPluginStart()
public
void
OnPluginStart()
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
Kopieren
Kopiert
Kopieren
Kopiert
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
);
Kopieren
Kopiert
Kopieren
Kopiert
HookConVarChange(g_
pluginEnabled
, ConsoleVarChange);
HookConVarChange(g_
cvarEnabled
, ConsoleVarChange);
Kopieren
Kopiert
Kopieren
Kopiert
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!");
Kopieren
Kopiert
Kopieren
Kopiert
}
Kopieren
Kopiert
Kopieren
Kopiert
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");
Kopieren
Kopiert
Kopieren
Kopiert
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");
Kopieren
Kopiert
Kopieren
Kopiert
HudDisplay
= CreateHudSynchronizer();
g_hHudSync
= CreateHudSynchronizer();
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public
OnMapStart()
public
void
OnMapStart()
{
{
Kopieren
Kopiert
Kopieren
Kopiert
sprite
= PrecacheModel(SPRITE_BEAM);
g_iSpritePrecache
= PrecacheModel(SPRITE_BEAM);
halo
= PrecacheModel(SPRITE_BEAM);
g_iHaloPrecache
= PrecacheModel(SPRITE_BEAM);
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public
ConsoleVarChange(
Handle:C
Var
, const
String:
oldValue
[]
, const
String:
newValue
[]
)
public
void
ConsoleVarChange(
Con
Var
cvar
, const
char[]
oldValue
, const
char[]
newValue
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if(CVar == g_pluginEnabled)
g_bEnabled
= GetConVarBool(
cvar);
{
PL_Enabled
= GetConVarBool(
g_pluginEnabled);
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public
OnClientPutInServer(
myC
lient)
public
void
OnClientPutInServer(
int c
lient)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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)
Kopieren
Kopiert
Kopieren
Kopiert
{
{
delete menu;
delete menu;
}
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:CJ_Command(myC
lient,
args)
public Action
cmdCheckJump(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if
(!PL_
Enabled
|| !IsValidClient(myC
lient)
)
if
(g_b
Enabled
&& c
lient)
return Plugin_Continue;
if (!CJ_ENABLED[myClient])
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:BM_Command(myC
lient,
args)
public Action
cmdBrushMode(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if
(!PL_
Enabled
|| !IsValidClient(myC
lient)
)
if
(g_b
Enabled
&& c
lient)
return Plugin_Continue;
if (!BM_ENABLED[myClient])
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:RENT_Command(myC
lient,
args)
public Action
cmdRemoveEntities(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
RemoveEntity(
myEntity
);
RemoveEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:STT_Command(myC
lient,
args)
public Action
cmdDisableTeleTrigger(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
StopShowBrushEntity(
myEntity
);
StopShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:TT_Command(myC
lient,
args)
public Action
cmdEnableTeleTrigger(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
ShowBrushEntity(
myEntity
);
ShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:NG_Command(myC
lient,
args)
public Action
cmdEnableNoGrenade(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
ShowBrushEntity(
myEntity
);
ShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:SNG_Command(myC
lient,
args)
public Action
cmdDisableNoGrenade(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (IsValidEntity(
myEntity
))
if (IsValidEntity(
i
))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
StopShowBrushEntity(
myEntity
);
StopShowBrushEntity(
i
);
}
}
}
}
}
}
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:MED_Command(myC
lient,
args)
public Action
cmdMoveEnt(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
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;
Kopieren
Kopiert
Kopieren
Kopiert
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
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
ReplyToCommand(
myC
lient, "Invalid value");
ReplyToCommand(
c
lient, "Invalid value");
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
else
char className[32];
GetEntityClassname(entity, className, sizeof(className));
if (StrEqual(className, "func_nogrenades") || StrEqual(className, "trigger_teleport"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:MEU_Command(myC
lient,
args)
public Action
cmdGetEntityIndex(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
ReplyToCommand(myClient, "Invalid value");
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
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))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
}
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
delete tr;
return Plugin_Handled;
return Plugin_Handled;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:GEI_Command(myC
lient,
args)
public Action
cmdFindHeight(int c
lient,
int
args)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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]);
}
}
Kopieren
Kopiert
Kopieren
Kopiert
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");
Kopieren
Kopiert
Kopieren
Kopiert
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);
Kopieren
Kopiert
Kopieren
Kopiert
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))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
}
}
Kopieren
Kopiert
Kopieren
Kopiert
delete myTrace;
delete myTrace;
Kopieren
Kopiert
Kopieren
Kopiert
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");
Kopieren
Kopiert
Kopieren
Kopiert
menu.AddItem("th", distance, ITEMDRAW_DISABLED);
float difference[3];
menu.AddItem("be", detent, ITEMDRAW_DISABLED);
SubtractVectors(endPoint, playerOrigin, difference); //Distance to the ground
Kopieren
Kopiert
Kopieren
Kopiert
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)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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
{
{
Kopieren
Kopiert
Kopieren
Kopiert
Format(
typent
, sizeof(
typent
), "First detected: ---");
Format(
buffer
, sizeof(
buffer
), "First detected: ---");
}
}
Kopieren
Kopiert
Kopieren
Kopiert
menu.AddItem("fd", typent, ITEMDRAW_DISABLED);
menu.Display(myClient, 30);
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action
:
OnPlayerRunCmd(
myC
lient,
&myB
uttons
, &myImpulse, Float:myVel[3], Float:myAng[3], &myWeapon
)
public Action
OnPlayerRunCmd(
int c
lient,
int &b
uttons
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if
(!PL_
Enabled || !
IsValidClient(myClient))
if
(!g_b
Enabled || !
g_bCheckJump[client])
{
return Plugin_Continue;
return Plugin_Continue;
Kopieren
Kopiert
Kopieren
Kopiert
}
Kopieren
Kopiert
Kopieren
Kopiert
if (
CJ_ENABLED[myClient]
)
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", g_fVelocity[client]);
if (
g_fVelocity[client][2] <= 0.0
)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
Kopieren
Kopiert
Kopieren
Kopiert
if(TR_DidHit(myTrace))
float playerOrigin[3];
{
GetClientAbsOrigin(client, playerOrigin);
TR_GetEndPosition(FL_TargetPos, myTrace);
}
delete myTrace;
Kopieren
Kopiert
Kopieren
Kopiert
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]);
}
}
Kopieren
Kopiert
Kopieren
Kopiert
delete tr;
return Plugin_Continue;
return Plugin_Continue;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public bool TraceFilterEntity(int
myE
ntity, int m
yM
ask)
public bool TraceFilterEntity(int
e
ntity, int m
ask)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
return
(myE
ntity
== 0
||
myE
ntity > MaxClients
); //0 - server console
return
!e
ntity
||
e
ntity > MaxClients
;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public bool DetectTrigger(int
myE
ntity, int
myC
lient)
public bool DetectTrigger(int
e
ntity, int
c
lient)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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"))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
BrushEntity
Index[myC
lient]
[0]
=
myE
ntity;
g_i
BrushEntity
[c
lient]
=
e
ntity;
return false;
return false;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
else
{
g_i
BrushEntity
[c
lient]
= -1;
BrushEntity
Index[myC
lient]
[0]
= -1;
return true;
return true;
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
public Action Func_SetTransmit(int entity, int
myC
lient)
public Action Func_SetTransmit(int entity, int
c
lient)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (!
BM_ENABLED[myC
lient])
if (!
g_bBrushMode[c
lient])
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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;
}
}
Kopieren
Kopiert
Kopieren
Kopiert
return Plugin_Continue;
return Plugin_Continue;
}
}
/////////////////////////////// <-- STOCKS --> ////////////////////////////////////////////////
/////////////////////////////// <-- STOCKS --> ////////////////////////////////////////////////
Kopieren
Kopiert
Kopieren
Kopiert
/**
#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)
Kopieren
Kopiert
Kopieren
Kopiert
* @param
myE
ntity Entity index.
* @param
e
ntity Entity index.
*/
*/
Kopieren
Kopiert
Kopieren
Kopiert
stock
void ShowBrushEntity(int
myE
ntity)
void ShowBrushEntity(int
e
ntity)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (
IsValidEdict(
myE
ntity))
if (
!
IsValidEdict(
e
ntity))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
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)
Kopieren
Kopiert
Kopieren
Kopiert
* @param
myE
ntity Entity index.
* @param
e
ntity Entity index.
*/
*/
Kopieren
Kopiert
Kopieren
Kopiert
stock
void StopShowBrushEntity(int
myE
ntity)
void StopShowBrushEntity(int
e
ntity)
{
{
Kopieren
Kopiert
Kopieren
Kopiert
if (
IsValidEdict(
myE
ntity))
if (
!
IsValidEdict(
e
ntity))
{
{
Kopieren
Kopiert
Kopieren
Kopiert
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);
}
}
}
Kopieren
Kopiert
Kopieren
Kopiert
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);
}
}
Gespeicherte Diffs
Originaltext
Datei öffnen
#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); }
Bearbeitung
Datei öffnen
#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); }
Unterschied finden