diff --git a/reapi/src/amxxmodule.cpp b/reapi/src/amxxmodule.cpp index 9318e50..a8d3478 100644 --- a/reapi/src/amxxmodule.cpp +++ b/reapi/src/amxxmodule.cpp @@ -199,8 +199,7 @@ C_DLLEXPORT void AMXX_PluginsUnloading() { } -// Advanced MF functions -NOINLINE void MF_Log(const char *fmt, ...) +NOINLINE void AMXX_Log(const char *fmt, ...) { char msg[2048]; va_list arglst; @@ -211,7 +210,7 @@ NOINLINE void MF_Log(const char *fmt, ...) g_amxxapi.Log("[%s] %s", g_ModuleInfo.logtag, msg); } -NOINLINE void MF_LogError(AMX *amx, int err, const char *fmt, ...) +NOINLINE void AMXX_LogError(AMX *amx, int err, const char *fmt, ...) { char msg[2048]; va_list arglst; @@ -222,7 +221,7 @@ NOINLINE void MF_LogError(AMX *amx, int err, const char *fmt, ...) g_amxxapi.LogError(amx, err, "[%s] %s", g_ModuleInfo.logtag, msg); } -NOINLINE void AMXX_Error(AMX *amx, const char *fmt, ...) +NOINLINE void AMXX_Assert(AMX *amx, const char *fmt, ...) { char msg[2048]; va_list arglst; diff --git a/reapi/src/amxxmodule.h b/reapi/src/amxxmodule.h index f756ecc..1cae8e4 100644 --- a/reapi/src/amxxmodule.h +++ b/reapi/src/amxxmodule.h @@ -491,9 +491,9 @@ struct amxxapi_t extern amxxapi_t g_amxxapi; -void MF_Log(const char *fmt, ...); -void MF_LogError(AMX *amx, int err, const char *fmt, ...); -void AMXX_Error(AMX *amx, const char *fmt, ...); +void AMXX_Log(const char *fmt, ...); +void AMXX_LogError(AMX *amx, int err, const char *fmt, ...); +void AMXX_Assert(AMX *amx, const char *fmt, ...); char* getAmxString(cell* src, char* dest, size_t max, size_t* len = nullptr); void setAmxString(cell* dest, const char* string, size_t max); diff --git a/reapi/src/entity_callback.cpp b/reapi/src/entity_callback.cpp index 03e6cd5..c8637fd 100644 --- a/reapi/src/entity_callback.cpp +++ b/reapi/src/entity_callback.cpp @@ -57,7 +57,7 @@ bool CEntityCallback::SetThink(AMX *amx, CBaseEntity *pEntity, const char *pszCa } if (fwdid == -1) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); return false; } @@ -78,7 +78,7 @@ bool CEntityCallback::SetTouch(AMX *amx, CBaseEntity *pEntity, const char *pszCa } if (fwdid == -1) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); return false; } @@ -99,7 +99,7 @@ bool CEntityCallback::SetUse(AMX *amx, CBaseEntity *pEntity, const char *pszCall } if (fwdid == -1) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); return false; } @@ -120,7 +120,7 @@ bool CEntityCallback::SetBlocked(AMX *amx, CBaseEntity *pEntity, const char *psz } if (fwdid == -1) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); return false; } @@ -141,7 +141,7 @@ bool CEntityCallback::SetMoveDone(AMX *amx, CBaseEntity *pEntity, const char *ps } if (fwdid == -1) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: failed to register forward.", __FUNCTION__); return false; } diff --git a/reapi/src/hook_callback.h b/reapi/src/hook_callback.h index b0617ca..da3df5b 100644 --- a/reapi/src/hook_callback.h +++ b/reapi/src/hook_callback.h @@ -220,7 +220,7 @@ NOINLINE R DLLEXPORT _callForward(const hook_t* hook, original_t original, volat } if (unlikely(!hookCtx->retVal.set)) { - AMXX_Error(fwd->GetAmx(), "%s : Can't suppress original function call without new return value set", fwd->GetCallbackName()); + AMXX_Assert(fwd->GetAmx(), "%s : Can't suppress original function call without new return value set", fwd->GetCallbackName()); continue; } diff --git a/reapi/src/natives/natives_common.cpp b/reapi/src/natives/natives_common.cpp index 931dfc7..cd81c56 100644 --- a/reapi/src/natives/natives_common.cpp +++ b/reapi/src/natives/natives_common.cpp @@ -106,7 +106,7 @@ cell AMX_NATIVE_CALL amx_get_viewent(AMX *amx, cell *params) client_t *pClient = clientOfIndex(params[arg_index]); if (unlikely(pClient == nullptr || !(pClient->active | pClient->spawned | pClient->connected))) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[arg_index]); return FALSE; } @@ -134,7 +134,7 @@ cell AMX_NATIVE_CALL amx_get_key_value(AMX *amx, cell *params) char *buffer = reinterpret_cast(params[arg_buffer]); if (!buffer) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid buffer", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid buffer", __FUNCTION__); return FALSE; } @@ -162,7 +162,7 @@ cell AMX_NATIVE_CALL amx_set_key_value(AMX *amx, cell *params) char *buffer = reinterpret_cast(params[arg_buffer]); if (!buffer) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid buffer", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid buffer", __FUNCTION__); return FALSE; } @@ -205,12 +205,12 @@ cell AMX_NATIVE_CALL amx_GetBonePosition(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } if (FNullEnt(params[arg_index])) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: worldspawn not allowed", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: worldspawn not allowed", __FUNCTION__); return FALSE; } @@ -242,12 +242,12 @@ cell AMX_NATIVE_CALL amx_GetAttachment(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } if (FNullEnt(params[arg_index])) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: worldspawn not allowed", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: worldspawn not allowed", __FUNCTION__); return FALSE; } @@ -280,7 +280,7 @@ cell AMX_NATIVE_CALL amx_SetThink(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -293,7 +293,7 @@ cell AMX_NATIVE_CALL amx_SetThink(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return FALSE; } @@ -324,7 +324,7 @@ cell AMX_NATIVE_CALL amx_SetTouch(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -337,7 +337,7 @@ cell AMX_NATIVE_CALL amx_SetTouch(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return FALSE; } @@ -368,7 +368,7 @@ cell AMX_NATIVE_CALL amx_SetUse(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -381,7 +381,7 @@ cell AMX_NATIVE_CALL amx_SetUse(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return FALSE; } @@ -412,7 +412,7 @@ cell AMX_NATIVE_CALL amx_SetBlocked(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -425,7 +425,7 @@ cell AMX_NATIVE_CALL amx_SetBlocked(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return FALSE; } @@ -457,7 +457,7 @@ cell AMX_NATIVE_CALL amx_SetMoveDone(AMX *amx, cell *params) CBaseEntity *pEntity = getPrivate(params[arg_index]); if (unlikely(pEntity == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -470,7 +470,7 @@ cell AMX_NATIVE_CALL amx_SetMoveDone(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return FALSE; } diff --git a/reapi/src/natives/natives_helper.h b/reapi/src/natives/natives_helper.h index 83d5558..67aeb3f 100644 --- a/reapi/src/natives/natives_helper.h +++ b/reapi/src/natives/natives_helper.h @@ -2,10 +2,10 @@ #define PARAMS_COUNT (params[0] / sizeof(cell)) -#define CHECK_ISPLAYER(x) if (unlikely(params[x] <= 0 || params[x] > gpGlobals->maxClients)) { MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid player index %i [%s]", __FUNCTION__, params[x], #x); return FALSE; } -#define CHECK_ISENTITY(x) if (unlikely(params[x] < 0 || params[x] > gpGlobals->maxEntities)) { MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid entity index %i [%s]", __FUNCTION__, params[x], #x); return FALSE; } -#define CHECK_GAMERULES() if (unlikely(!g_pGameRules)) { MF_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__); return FALSE; } -#define CHECK_CONNECTED(x, y) if (unlikely(x == nullptr || x->has_disconnected)) { MF_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[y]); return FALSE; } +#define CHECK_ISPLAYER(x) if (unlikely(params[x] <= 0 || params[x] > gpGlobals->maxClients)) { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid player index %i [%s]", __FUNCTION__, params[x], #x); return FALSE; } +#define CHECK_ISENTITY(x) if (unlikely(params[x] < 0 || params[x] > gpGlobals->maxEntities)) { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid entity index %i [%s]", __FUNCTION__, params[x], #x); return FALSE; } +#define CHECK_GAMERULES() if (unlikely(!g_pGameRules)) { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: gamerules not initialized", __FUNCTION__); return FALSE; } +#define CHECK_CONNECTED(x, y) if (unlikely(x == nullptr || x->has_disconnected)) { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: player %i is not connected", __FUNCTION__, params[y]); return FALSE; } class CAmxArg { diff --git a/reapi/src/natives/natives_hookchains.cpp b/reapi/src/natives/natives_hookchains.cpp index 24bffd5..7df7705 100644 --- a/reapi/src/natives/natives_hookchains.cpp +++ b/reapi/src/natives/natives_hookchains.cpp @@ -22,13 +22,13 @@ cell AMX_NATIVE_CALL RegisterHookChain(AMX *amx, cell *params) if (unlikely(hook == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: function with id (%d) doesn't exist in current API version.", __FUNCTION__, func); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: function with id (%d) doesn't exist in current API version.", __FUNCTION__, func); return INVALID_HOOKCHAIN; } if (unlikely(!hook->checkRequirements())) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: function (%s) is not available, %s required.", __FUNCTION__, hook->func_name, hook->depend_name); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: function (%s) is not available, %s required.", __FUNCTION__, hook->func_name, hook->depend_name); return INVALID_HOOKCHAIN; } @@ -38,14 +38,14 @@ cell AMX_NATIVE_CALL RegisterHookChain(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname); return INVALID_HOOKCHAIN; } int fwid = hook->registerForward(amx, funcname); if (unlikely(fwid == -1)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: register forward failed.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: register forward failed.", __FUNCTION__); return INVALID_HOOKCHAIN; } @@ -70,7 +70,7 @@ cell AMX_NATIVE_CALL EnableHookChain(AMX *amx, cell *params) if (unlikely(hook == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid HookChain handle.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid HookChain handle.", __FUNCTION__); return FALSE; } @@ -94,7 +94,7 @@ cell AMX_NATIVE_CALL DisableHookChain(AMX *amx, cell *params) if (unlikely(hook == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid HookChain handle.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid HookChain handle.", __FUNCTION__); return FALSE; } @@ -114,7 +114,7 @@ cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params) { if (unlikely(!g_hookCtx)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value without active hook.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value without active hook.", __FUNCTION__); return FALSE; } @@ -123,7 +123,7 @@ cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params) if (unlikely(params[arg_type] != retVal.type)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value with incompatible type.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value with incompatible type.", __FUNCTION__); return FALSE; } @@ -179,7 +179,7 @@ cell AMX_NATIVE_CALL GetHookChainReturn(AMX *amx, cell *params) { if (unlikely(!g_hookCtx)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: trying to get return value without active hook.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: trying to get return value without active hook.", __FUNCTION__); return FALSE; } @@ -188,13 +188,13 @@ cell AMX_NATIVE_CALL GetHookChainReturn(AMX *amx, cell *params) if (unlikely(params[arg_type] != retVal.type)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value with incompatible type.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: trying to set return value with incompatible type.", __FUNCTION__); return FALSE; } if (unlikely(!retVal.set)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: return value isn't set.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: return value isn't set.", __FUNCTION__); return FALSE; } @@ -242,7 +242,7 @@ cell AMX_NATIVE_CALL SetHookChainArg(AMX *amx, cell *params) { if (unlikely(!g_hookCtx)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: trying to get return value without active hook.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: trying to get return value without active hook.", __FUNCTION__); return FALSE; } @@ -251,7 +251,7 @@ cell AMX_NATIVE_CALL SetHookChainArg(AMX *amx, cell *params) if (unlikely(number >= g_hookCtx->args_count)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: can't set argument %i of hookchain with %i args.", __FUNCTION__, params[arg_number], g_hookCtx->args_count); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: can't set argument %i of hookchain with %i args.", __FUNCTION__, params[arg_number], g_hookCtx->args_count); return FALSE; } @@ -259,7 +259,7 @@ cell AMX_NATIVE_CALL SetHookChainArg(AMX *amx, cell *params) if (unlikely(params[arg_type] != type)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid argument type provided.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid argument type provided.", __FUNCTION__); return FALSE; } @@ -307,7 +307,7 @@ AMX_NATIVE_INFO HookChain_Natives[] = void RegisterNatives_HookChains() { if (!api_cfg.hasReHLDS() && !api_cfg.hasReGameDLL()) - fillNatives(HookChain_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "You need ReHlds or ReGameDll for use hookchains"); return FALSE; }); + fillNatives(HookChain_Natives, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "You need ReHlds or ReGameDll for use hookchains"); return FALSE; }); g_amxxapi.AddNatives(HookChain_Natives); } diff --git a/reapi/src/natives/natives_hookchains.h b/reapi/src/natives/natives_hookchains.h index 572b1eb..c6e0c24 100644 --- a/reapi/src/natives/natives_hookchains.h +++ b/reapi/src/natives/natives_hookchains.h @@ -1,6 +1,6 @@ #pragma once -#define PARAMS_REQUIRE(x) if (params[0] != x * sizeof(cell)) { MF_LogError(amx, AMX_ERR_NATIVE, "Invalid parameters count in %s", __FUNCTION__); return nullptr; } -#define NATIVE_MEMBER_REQUIRE(a,x) if (!api_cfg.has##x()) { MF_LogError(amx, AMX_ERR_NATIVE, "Member (%s) is not available, required %s", memberlist[a]->member_name, #x); return 0; } +#define PARAMS_REQUIRE(x) if (params[0] != x * sizeof(cell)) { AMXX_LogError(amx, AMX_ERR_NATIVE, "Invalid parameters count in %s", __FUNCTION__); return nullptr; } +#define NATIVE_MEMBER_REQUIRE(a,x) if (!api_cfg.has##x()) { AMXX_LogError(amx, AMX_ERR_NATIVE, "Member (%s) is not available, required %s", memberlist[a]->member_name, #x); return 0; } void RegisterNatives_HookChains(); diff --git a/reapi/src/natives/natives_members.cpp b/reapi/src/natives/natives_members.cpp index c6243e0..b953f98 100644 --- a/reapi/src/natives/natives_members.cpp +++ b/reapi/src/natives/natives_members.cpp @@ -15,13 +15,13 @@ cell AMX_NATIVE_CALL set_member(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } edict_t *pEdict = edictByIndexAmx(params[arg_index]); if (unlikely(pEdict == nullptr || pEdict->pvPrivateData == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -56,13 +56,13 @@ cell AMX_NATIVE_CALL get_member(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } edict_t *pEdict = edictByIndexAmx(params[arg_index]); if (unlikely(pEdict == nullptr || pEdict->pvPrivateData == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -132,7 +132,7 @@ cell AMX_NATIVE_CALL set_member_game(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } @@ -159,7 +159,7 @@ cell AMX_NATIVE_CALL get_member_game(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } @@ -200,14 +200,14 @@ cell AMX_NATIVE_CALL set_entvar(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } CHECK_ISENTITY(arg_index); edict_t *pEdict = edictByIndexAmx(params[arg_index]); if (unlikely(pEdict == nullptr || pEdict->pvPrivateData == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -229,7 +229,7 @@ cell AMX_NATIVE_CALL get_entvar(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -237,7 +237,7 @@ cell AMX_NATIVE_CALL get_entvar(AMX *amx, cell *params) edict_t *pEdict = edictByIndexAmx(params[arg_index]); if (unlikely(pEdict == nullptr || &pEdict->v == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid or uninitialized entity", __FUNCTION__); return FALSE; } @@ -294,7 +294,7 @@ cell AMX_NATIVE_CALL set_pmove(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -319,7 +319,7 @@ cell AMX_NATIVE_CALL get_pmove(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -362,7 +362,7 @@ cell AMX_NATIVE_CALL set_movevar(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -385,7 +385,7 @@ cell AMX_NATIVE_CALL get_movevar(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -419,7 +419,7 @@ cell AMX_NATIVE_CALL set_ucmd(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -440,7 +440,7 @@ cell AMX_NATIVE_CALL get_ucmd(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -475,7 +475,7 @@ cell AMX_NATIVE_CALL set_pmtrace(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -499,7 +499,7 @@ cell AMX_NATIVE_CALL get_pmtrace(AMX *amx, cell *params) member_t *member = memberlist[params[arg_var]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_var]); return FALSE; } @@ -534,13 +534,13 @@ cell AMX_NATIVE_CALL set_rebuy(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } cell *handle = (cell *)params[arg_handle]; if (unlikely(handle == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid rebuy handle", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid rebuy handle", __FUNCTION__); return FALSE; } @@ -562,13 +562,13 @@ cell AMX_NATIVE_CALL get_rebuy(AMX *amx, cell *params) member_t *member = memberlist[params[arg_member]]; if (unlikely(member == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown member id %i", __FUNCTION__, params[arg_member]); return FALSE; } cell *handle = (cell *)params[arg_handle]; if (unlikely(handle == nullptr)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid rebuy handle", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid rebuy handle", __FUNCTION__); return FALSE; } @@ -612,7 +612,7 @@ AMX_NATIVE_INFO ReGameVars_Natives[] = void RegisterNatives_Members() { if (!api_cfg.hasReGameDLL()) - fillNatives(ReGameVars_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; }); + fillNatives(ReGameVars_Natives, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; }); g_amxxapi.AddNatives(ReGameVars_Natives); g_amxxapi.AddNatives(EngineVars_Natives); diff --git a/reapi/src/natives/natives_misc.cpp b/reapi/src/natives/natives_misc.cpp index fce809f..e654972 100644 --- a/reapi/src/natives/natives_misc.cpp +++ b/reapi/src/natives/natives_misc.cpp @@ -271,7 +271,7 @@ cell AMX_NATIVE_CALL rg_multidmg_add(AMX *amx, cell *params) CHECK_ISENTITY(arg_victim); if (params[arg_victim] < 0) { // null - MF_LogError(amx, AMX_ERR_NATIVE, "%s: victim == null", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: victim == null", __FUNCTION__); return FALSE; } @@ -418,7 +418,7 @@ cell AMX_NATIVE_CALL rg_round_end(AMX *amx, cell *params) auto winstatus = params[arg_win]; if (winstatus <= 0) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown win status %i", __FUNCTION__, winstatus); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown win status %i", __FUNCTION__, winstatus); return FALSE; } @@ -697,7 +697,7 @@ cell AMX_NATIVE_CALL rg_get_weapon_info(AMX *amx, cell *params) if (!GetWeaponInfoRange(weaponId, false) && info_type != WI_ID) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid weapon id %i", __FUNCTION__, weaponId); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid weapon id %i", __FUNCTION__, weaponId); return 0; } @@ -731,7 +731,7 @@ cell AMX_NATIVE_CALL rg_get_weapon_info(AMX *amx, cell *params) case WI_AMMO_NAME: { if (PARAMS_COUNT != arg_4) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: bad parameter count, got %i, expected %i", __FUNCTION__, PARAMS_COUNT, arg_4); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: bad parameter count, got %i, expected %i", __FUNCTION__, PARAMS_COUNT, arg_4); return -1; } @@ -750,7 +750,7 @@ cell AMX_NATIVE_CALL rg_get_weapon_info(AMX *amx, cell *params) case WI_NAME: { if (PARAMS_COUNT != arg_4) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: bad parameter count, got %i, expected %i", __FUNCTION__, PARAMS_COUNT, arg_4); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: bad parameter count, got %i, expected %i", __FUNCTION__, PARAMS_COUNT, arg_4); return -1; } @@ -767,7 +767,7 @@ cell AMX_NATIVE_CALL rg_get_weapon_info(AMX *amx, cell *params) return 1; } default: - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown type statement %i, params count %i", __FUNCTION__, info_type, PARAMS_COUNT); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown type statement %i, params count %i", __FUNCTION__, info_type, PARAMS_COUNT); return -1; } } @@ -789,7 +789,7 @@ cell AMX_NATIVE_CALL rg_set_weapon_info(AMX *amx, cell *params) WeaponIdType weaponId = static_cast(params[arg_weapon_id]); if (!GetWeaponInfoRange(weaponId, true)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid weapon id %i", __FUNCTION__, weaponId); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid weapon id %i", __FUNCTION__, weaponId); return 0; } @@ -819,10 +819,10 @@ cell AMX_NATIVE_CALL rg_set_weapon_info(AMX *amx, cell *params) break; case WI_AMMO_NAME: case WI_NAME: - MF_LogError(amx, AMX_ERR_NATIVE, "%s: this change will have no effect, type statement %i", __FUNCTION__, info_type); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: this change will have no effect, type statement %i", __FUNCTION__, info_type); return 0; default: - MF_LogError(amx, AMX_ERR_NATIVE, "%s: unknown type statement %i, params count %i", __FUNCTION__, info_type, PARAMS_COUNT); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: unknown type statement %i, params count %i", __FUNCTION__, info_type, PARAMS_COUNT); return 0; } @@ -1380,7 +1380,7 @@ cell AMX_NATIVE_CALL rg_set_user_model(AMX *amx, cell *params) char modelbuf[256]; const char* newModel = getAmxString(amx, params[arg_model], modelbuf); if (*newModel == '\0') { - MF_LogError(amx, AMX_ERR_NATIVE, "Model can not be empty"); + AMXX_LogError(amx, AMX_ERR_NATIVE, "Model can not be empty"); return FALSE; } @@ -1552,7 +1552,7 @@ cell AMX_NATIVE_CALL rg_instant_reload_weapons(AMX *amx, cell *params) { pWeapon = getPrivate(params[arg_weapon]); if (!pWeapon || !pWeapon->IsWeapon()) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__); return FALSE; } } @@ -1709,7 +1709,7 @@ cell AMX_NATIVE_CALL rg_switch_weapon(AMX *amx, cell *params) auto pWeapon = getPrivate(params[arg_weapon]); if (pWeapon == nullptr || !pWeapon->IsWeapon()) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weapon", __FUNCTION__); return FALSE; } @@ -1752,7 +1752,7 @@ cell AMX_NATIVE_CALL rg_is_player_can_takedamage(AMX *amx, cell *params) CBaseEntity *pAttacker = getPrivate(params[arg_attacker]); if (!pAttacker) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity attacker", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity attacker", __FUNCTION__); return FALSE; } @@ -1776,7 +1776,7 @@ cell AMX_NATIVE_CALL rg_get_weaponbox_id(AMX *amx, cell *params) CWeaponBox *pEntityBox = getPrivate(params[arg_entity]); if (pEntityBox == nullptr) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weaponbox", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Invalid entity weaponbox", __FUNCTION__); return FALSE; } @@ -2147,10 +2147,10 @@ AMX_NATIVE_INFO Misc_Natives_RH[] = void RegisterNatives_Misc() { if (!api_cfg.hasReGameDLL()) - fillNatives(Misc_Natives_RG, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; }); + fillNatives(Misc_Natives_RG, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReGameDll"); return FALSE; }); if (!api_cfg.hasReHLDS()) - fillNatives(Misc_Natives_RH, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReHlds"); return FALSE; }); + fillNatives(Misc_Natives_RH, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "ReHlds"); return FALSE; }); g_amxxapi.AddNatives(Misc_Natives_RG); g_amxxapi.AddNatives(Misc_Natives_RH); diff --git a/reapi/src/natives/natives_rechecker.cpp b/reapi/src/natives/natives_rechecker.cpp index 49cfd9a..4fc2057 100644 --- a/reapi/src/natives/natives_rechecker.cpp +++ b/reapi/src/natives/natives_rechecker.cpp @@ -21,7 +21,7 @@ cell AMX_NATIVE_CALL RegisterQueryFile(AMX *amx, cell *params) { case RES_TYPE_NONE: case RES_TYPE_IGNORE: - MF_LogError(amx, AMX_ERR_NATIVE, "%s: invalid flag type \"%i\".", __FUNCTION__, flag); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: invalid flag type \"%i\".", __FUNCTION__, flag); break; case RES_TYPE_EXISTS: if (params[arg_hash] == -1) { @@ -35,7 +35,7 @@ cell AMX_NATIVE_CALL RegisterQueryFile(AMX *amx, cell *params) char filename[MAX_PATH]; const char *file = getAmxString(amx, params[arg_file], filename); if (!file || file[0] == '\0') { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: file can not be empty.", __FUNCTION__); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: file can not be empty.", __FUNCTION__); return FALSE; } @@ -45,7 +45,7 @@ cell AMX_NATIVE_CALL RegisterQueryFile(AMX *amx, cell *params) int funcid; if (unlikely(g_amxxapi.amx_FindPublic(amx, func, &funcid) != AMX_ERR_NONE)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, func); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, func); return FALSE; } @@ -79,7 +79,7 @@ AMX_NATIVE_INFO Rechecker_Natives[] = void RegisterNatives_Rechecker() { if (!api_cfg.hasRechecker()) - fillNatives(Rechecker_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "Rechecker"); return FALSE; }); + fillNatives(Rechecker_Natives, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "Rechecker"); return FALSE; }); g_amxxapi.AddNatives(Rechecker_Natives); } diff --git a/reapi/src/natives/natives_reunion.cpp b/reapi/src/natives/natives_reunion.cpp index 40d9425..3437b4a 100644 --- a/reapi/src/natives/natives_reunion.cpp +++ b/reapi/src/natives/natives_reunion.cpp @@ -78,7 +78,7 @@ AMX_NATIVE_INFO Reunion_Natives[] = void RegisterNatives_Reunion() { if (!api_cfg.hasReunion()) - fillNatives(Reunion_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "Reunion"); return FALSE; }); + fillNatives(Reunion_Natives, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "Reunion"); return FALSE; }); g_amxxapi.AddNatives(Reunion_Natives); } diff --git a/reapi/src/natives/natives_vtc.cpp b/reapi/src/natives/natives_vtc.cpp index fa2289b..b53e557 100644 --- a/reapi/src/natives/natives_vtc.cpp +++ b/reapi/src/natives/natives_vtc.cpp @@ -112,7 +112,7 @@ AMX_NATIVE_INFO VTC_Natives[] = void RegisterNatives_VTC() { if (!api_cfg.hasVTC()) - fillNatives(VTC_Natives, [](AMX *amx, cell *params) -> cell { MF_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "VTC"); return FALSE; }); + fillNatives(VTC_Natives, [](AMX *amx, cell *params) -> cell { AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: isn't available", "VTC"); return FALSE; }); g_amxxapi.AddNatives(VTC_Natives); } diff --git a/reapi/src/reapi_utils.cpp b/reapi/src/reapi_utils.cpp index 42d89a9..0996765 100644 --- a/reapi/src/reapi_utils.cpp +++ b/reapi/src/reapi_utils.cpp @@ -52,7 +52,7 @@ CTempStrings::CTempStrings() char* CTempStrings::push(AMX* amx) { if (m_current == STRINGS_MAX) { - MF_LogError(amx, AMX_ERR_NATIVE, "temp strings limit exceeded, contact reapi authors"); + AMXX_LogError(amx, AMX_ERR_NATIVE, "temp strings limit exceeded, contact reapi authors"); return nullptr; } @@ -69,7 +69,7 @@ CBaseEntity *GiveNamedItemInternal(AMX *amx, CBasePlayer *pPlayer, const char *p edict_t *pEdict = CREATE_NAMED_ENTITY(ALLOC_STRING(pszItemName)); if (FNullEnt(pEdict)) { - MF_LogError(amx, AMX_ERR_NATIVE, "%s: Item \"%s\" failed to create!\n", __FUNCTION__, pszItemName); + AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: Item \"%s\" failed to create!\n", __FUNCTION__, pszItemName); return nullptr; }