From 30394243ff3f1cf08e1a8ebfcbf05dbea3a215b2 Mon Sep 17 00:00:00 2001 From: Vincent Herbet Date: Wed, 31 Jul 2013 17:54:46 +0200 Subject: [PATCH] Allow [g|s]et_pdata_cbase usage at map end whereas player's private datas are still valid (following fakemeta behavior) (bug 5787, r=me) --- dlls/hamsandwich/pdata.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dlls/hamsandwich/pdata.cpp b/dlls/hamsandwich/pdata.cpp index 89c56537..174cde4b 100644 --- a/dlls/hamsandwich/pdata.cpp +++ b/dlls/hamsandwich/pdata.cpp @@ -31,6 +31,15 @@ #include "NEW_Util.h" #include "ham_utils.h" +inline edict_t* INDEXENT2( int iEdictNum ) +{ + if (iEdictNum >= 1 && iEdictNum <= gpGlobals->maxClients) + return MF_GetPlayerEdict(iEdictNum); + else + return (*g_engfuncs.pfnPEntityOfEntIndex)(iEdictNum); +} + +#ifdef DONT_TOUCH_THIS_AGAIN_BAIL #define FM_CHECK_ENTITY(x) \ if (x < 0 || x > gpGlobals->maxEntities) { \ MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ @@ -48,6 +57,16 @@ } \ } \ } +#endif + +#define FM_CHECK_ENTITY(x) \ + if (x < 0 || x > gpGlobals->maxEntities) { \ + MF_LogError(amx, AMX_ERR_NATIVE, "Entity out of range (%d)", x); \ + return 0; \ + } else if (x != 0 && FNullEnt(INDEXENT2(x))) { \ + MF_LogError(amx, AMX_ERR_NATIVE, "Invalid entity %d", x); \ + return 0; \ + } // Return -1 on null, -2 on invalid, and the the index of any other. static cell AMX_NATIVE_CALL get_pdata_cbase_safe(AMX *amx, cell *params)