mirror of
https://github.com/alliedmodders/sourcemod.git
synced 2025-12-07 02:18:35 +00:00
Fix regression in DescribePlayer (%N / %L) for players not yet having entities (#2260)
* Define a constant for ENTREF_MASK * Fix regression in DescribePlayer for players that don't yet have entities
This commit is contained in:
parent
25faf18760
commit
6cd5bf87d8
@ -978,7 +978,7 @@ cell_t CHalfLife2::EntityToReference(CBaseEntity *pEntity)
|
|||||||
{
|
{
|
||||||
IServerUnknown *pUnknown = (IServerUnknown *)pEntity;
|
IServerUnknown *pUnknown = (IServerUnknown *)pEntity;
|
||||||
CBaseHandle hndl = pUnknown->GetRefEHandle();
|
CBaseHandle hndl = pUnknown->GetRefEHandle();
|
||||||
return (hndl.ToInt() | (1<<31));
|
return (hndl.ToInt() | ENTREF_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
CBaseEntity *CHalfLife2::ReferenceToEntity(cell_t entRef)
|
CBaseEntity *CHalfLife2::ReferenceToEntity(cell_t entRef)
|
||||||
@ -990,10 +990,10 @@ CBaseEntity *CHalfLife2::ReferenceToEntity(cell_t entRef)
|
|||||||
|
|
||||||
CEntInfo *pInfo = NULL;
|
CEntInfo *pInfo = NULL;
|
||||||
|
|
||||||
if (entRef & (1<<31))
|
if (entRef & ENTREF_MASK)
|
||||||
{
|
{
|
||||||
/* Proper ent reference */
|
/* Proper ent reference */
|
||||||
int hndlValue = entRef & ~(1<<31);
|
int hndlValue = entRef & ~ENTREF_MASK;
|
||||||
CBaseHandle hndl(hndlValue);
|
CBaseHandle hndl(hndlValue);
|
||||||
|
|
||||||
pInfo = LookupEntity(hndl.GetEntryIndex());
|
pInfo = LookupEntity(hndl.GetEntryIndex());
|
||||||
@ -1094,10 +1094,10 @@ int CHalfLife2::ReferenceToIndex(cell_t entRef)
|
|||||||
return INVALID_EHANDLE_INDEX;
|
return INVALID_EHANDLE_INDEX;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entRef & (1<<31))
|
if (entRef & ENTREF_MASK)
|
||||||
{
|
{
|
||||||
/* Proper ent reference */
|
/* Proper ent reference */
|
||||||
int hndlValue = entRef & ~(1<<31);
|
int hndlValue = entRef & ~ENTREF_MASK;
|
||||||
CBaseHandle hndl(hndlValue);
|
CBaseHandle hndl(hndlValue);
|
||||||
|
|
||||||
CEntInfo *pInfo = LookupEntity(hndl.GetEntryIndex());
|
CEntInfo *pInfo = LookupEntity(hndl.GetEntryIndex());
|
||||||
@ -1148,7 +1148,7 @@ cell_t CHalfLife2::EntityToBCompatRef(CBaseEntity *pEntity)
|
|||||||
|
|
||||||
if (hndl.GetEntryIndex() >= MAX_EDICTS)
|
if (hndl.GetEntryIndex() >= MAX_EDICTS)
|
||||||
{
|
{
|
||||||
return (hndl.ToInt() | (1<<31));
|
return (hndl.ToInt() | ENTREF_MASK);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1163,7 +1163,7 @@ cell_t CHalfLife2::ReferenceToBCompatRef(cell_t entRef)
|
|||||||
return INVALID_EHANDLE_INDEX;
|
return INVALID_EHANDLE_INDEX;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hndlValue = entRef & ~(1<<31);
|
int hndlValue = entRef & ~ENTREF_MASK;
|
||||||
CBaseHandle hndl(hndlValue);
|
CBaseHandle hndl(hndlValue);
|
||||||
|
|
||||||
if (hndl.GetEntryIndex() < MAX_EDICTS)
|
if (hndl.GetEntryIndex() < MAX_EDICTS)
|
||||||
|
|||||||
@ -57,6 +57,8 @@ class ICommandArgs;
|
|||||||
using namespace SourceHook;
|
using namespace SourceHook;
|
||||||
using namespace SourceMod;
|
using namespace SourceMod;
|
||||||
|
|
||||||
|
static const int ENTREF_MASK = (1 << 31);
|
||||||
|
|
||||||
#define HUD_PRINTTALK 3
|
#define HUD_PRINTTALK 3
|
||||||
#define HUD_PRINTCENTER 4
|
#define HUD_PRINTCENTER 4
|
||||||
|
|
||||||
|
|||||||
@ -576,7 +576,14 @@ int CoreProviderImpl::MaxClients()
|
|||||||
|
|
||||||
bool CoreProviderImpl::DescribePlayer(int entRef, const char **namep, const char **authp, int *useridp)
|
bool CoreProviderImpl::DescribePlayer(int entRef, const char **namep, const char **authp, int *useridp)
|
||||||
{
|
{
|
||||||
int index = g_HL2.ReferenceToIndex(entRef);
|
int index = entRef;
|
||||||
|
if (entRef & ENTREF_MASK)
|
||||||
|
{
|
||||||
|
// Unless this is an explicit entity reference, we don't know nor care if the player has an entity yet,
|
||||||
|
// as long as they are currently connected. (But if it *is* an explicit ref, validate it)
|
||||||
|
index = g_HL2.ReferenceToIndex(entRef);
|
||||||
|
}
|
||||||
|
|
||||||
CPlayer *player = g_Players.GetPlayerByIndex(index);
|
CPlayer *player = g_Players.GetPlayerByIndex(index);
|
||||||
if (!player || !player->IsConnected())
|
if (!player || !player->IsConnected())
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user