mirror of
https://github.com/rehlds/reapi.git
synced 2024-12-29 08:05:36 +03:00
s/get_member: Added a throw error for clarity if the member type is not supported
This commit is contained in:
parent
4430205522
commit
1e9f3f1a3a
@ -98,6 +98,41 @@ struct member_t
|
|||||||
const char *name;
|
const char *name;
|
||||||
MType type;
|
MType type;
|
||||||
bool (*pfnIsRefsToClass)(void *pEntity);
|
bool (*pfnIsRefsToClass)(void *pEntity);
|
||||||
|
|
||||||
|
inline static const char *getTypeString(MType memberType)
|
||||||
|
{
|
||||||
|
switch (memberType)
|
||||||
|
{
|
||||||
|
case MEMBER_FLOAT: return "Float";
|
||||||
|
case MEMBER_DOUBLE: return "Double";
|
||||||
|
case MEMBER_ENTITY: return "Entity";
|
||||||
|
case MEMBER_CLASSPTR: return "ClassPtr";
|
||||||
|
case MEMBER_EHANDLE: return "EHANDLE";
|
||||||
|
case MEMBER_EVARS: return "entvars";
|
||||||
|
case MEMBER_EDICT: return "edict";
|
||||||
|
case MEMBER_VECTOR: return "Vector";
|
||||||
|
case MEMBER_STRING: return "String";
|
||||||
|
case MEMBER_QSTRING: return "QStirng";
|
||||||
|
case MEMBER_INTEGER: return "Integer";
|
||||||
|
case MEMBER_SHORT: return "Short";
|
||||||
|
case MEMBER_BYTE: return "Byte";
|
||||||
|
case MEMBER_BOOL: return "Bool";
|
||||||
|
case MEMBER_SIGNALS: return "Signals";
|
||||||
|
case MEBMER_REBUYSTRUCT: return "RebuyStruct";
|
||||||
|
case MEMBER_PMTRACE: return "pmtrace";
|
||||||
|
case MEBMER_USERCMD: return "usercmd";
|
||||||
|
case MEMBER_TRACERESULT: return "TraceResult";
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
static char string[16];
|
||||||
|
Q_snprintf(string, sizeof(string), "%d", memberType);
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""; // shut up compiler
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool member_t::isTypeReturnable() const
|
inline bool member_t::isTypeReturnable() const
|
||||||
|
@ -29,6 +29,7 @@ cell AMX_NATIVE_CALL set_member(AMX *amx, cell *params)
|
|||||||
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
||||||
|
|
||||||
return set_member(
|
return set_member(
|
||||||
|
amx,
|
||||||
get_pdata_custom(getPrivate<CBaseEntity>(pEdict), params[arg_member]),
|
get_pdata_custom(getPrivate<CBaseEntity>(pEdict), params[arg_member]),
|
||||||
member,
|
member,
|
||||||
value,
|
value,
|
||||||
@ -99,7 +100,7 @@ cell AMX_NATIVE_CALL get_member(AMX *amx, cell *params)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(
|
return get_member(amx,
|
||||||
get_pdata_custom(getPrivate<CBaseEntity>(pEdict), params[arg_member]),
|
get_pdata_custom(getPrivate<CBaseEntity>(pEdict), params[arg_member]),
|
||||||
member,
|
member,
|
||||||
dest,
|
dest,
|
||||||
@ -145,6 +146,7 @@ cell AMX_NATIVE_CALL set_member_s(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return set_member(
|
return set_member(
|
||||||
|
amx,
|
||||||
pEntity,
|
pEntity,
|
||||||
member,
|
member,
|
||||||
value,
|
value,
|
||||||
@ -225,6 +227,7 @@ cell AMX_NATIVE_CALL get_member_s(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return get_member(
|
return get_member(
|
||||||
|
amx,
|
||||||
pEntity,
|
pEntity,
|
||||||
member,
|
member,
|
||||||
dest,
|
dest,
|
||||||
@ -257,7 +260,7 @@ cell AMX_NATIVE_CALL set_member_game(AMX *amx, cell *params)
|
|||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
||||||
|
|
||||||
return set_member(g_pGameRules, member, value, element);
|
return set_member(amx, g_pGameRules, member, value, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -308,7 +311,7 @@ cell AMX_NATIVE_CALL get_member_game(AMX *amx, cell *params)
|
|||||||
length = 0;
|
length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(g_pGameRules, member, dest, element, length);
|
return get_member(amx, g_pGameRules, member, dest, element, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -337,7 +340,7 @@ cell AMX_NATIVE_CALL set_entvar(AMX *amx, cell *params)
|
|||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
size_t element = (PARAMS_COUNT == 4) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
||||||
|
|
||||||
return set_member(&pEdict->v, member, value, element);
|
return set_member(amx, &pEdict->v, member, value, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -399,7 +402,7 @@ cell AMX_NATIVE_CALL get_entvar(AMX *amx, cell *params)
|
|||||||
length = 0;
|
length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(&pEdict->v, member, dest, element, length);
|
return get_member(amx, &pEdict->v, member, dest, element, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -424,7 +427,7 @@ cell AMX_NATIVE_CALL set_pmove(AMX *amx, cell *params)
|
|||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
size_t element = (PARAMS_COUNT == 3) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
size_t element = (PARAMS_COUNT == 3) ? *getAmxAddr(amx, params[arg_elem]) : 0;
|
||||||
|
|
||||||
return set_member(g_pMove, member, value, element);
|
return set_member(amx, g_pMove, member, value, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -492,7 +495,7 @@ cell AMX_NATIVE_CALL get_pmove(AMX *amx, cell *params)
|
|||||||
length = 0;
|
length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(g_pMove, member, dest, element, length);
|
return get_member(amx, g_pMove, member, dest, element, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -515,7 +518,7 @@ cell AMX_NATIVE_CALL set_movevar(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
return set_member(g_pMove->movevars, member, value, 0);
|
return set_member(amx, g_pMove->movevars, member, value, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -552,7 +555,7 @@ cell AMX_NATIVE_CALL get_movevar(AMX *amx, cell *params)
|
|||||||
length = 0;
|
length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(g_pMove->movevars, member, dest, element, length);
|
return get_member(amx, g_pMove->movevars, member, dest, element, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -573,7 +576,7 @@ cell AMX_NATIVE_CALL set_ucmd(AMX *amx, cell *params)
|
|||||||
|
|
||||||
cell* cmd = (cell *)params[arg_cmd];
|
cell* cmd = (cell *)params[arg_cmd];
|
||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
return set_member(cmd, member, value, 0);
|
return set_member(amx, cmd, member, value, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -605,7 +608,7 @@ cell AMX_NATIVE_CALL get_ucmd(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell* cmd = (cell *)params[arg_cmd];
|
cell* cmd = (cell *)params[arg_cmd];
|
||||||
return get_member(cmd, member, dest, element);
|
return get_member(amx, cmd, member, dest, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -629,7 +632,7 @@ cell AMX_NATIVE_CALL set_pmtrace(AMX *amx, cell *params)
|
|||||||
|
|
||||||
cell* tr = (cell *)params[arg_tr];
|
cell* tr = (cell *)params[arg_tr];
|
||||||
cell* value = getAmxAddr(amx, params[arg_value]);
|
cell* value = getAmxAddr(amx, params[arg_value]);
|
||||||
return set_member(tr, member, value, 0);
|
return set_member(amx, tr, member, value, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -664,7 +667,7 @@ cell AMX_NATIVE_CALL get_pmtrace(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cell* tr = (cell *)params[arg_tr];
|
cell* tr = (cell *)params[arg_tr];
|
||||||
return get_member(tr, member, dest, element);
|
return get_member(amx, tr, member, dest, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -782,7 +785,7 @@ cell AMX_NATIVE_CALL set_rebuy(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return set_member(handle, member, ¶ms[arg_value], 0);
|
return set_member(amx, handle, member, ¶ms[arg_value], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -810,7 +813,7 @@ cell AMX_NATIVE_CALL get_rebuy(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_member(handle, member, nullptr, 0);
|
return get_member(amx, handle, member, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO EngineVars_Natives[] =
|
AMX_NATIVE_INFO EngineVars_Natives[] =
|
||||||
@ -862,7 +865,7 @@ void RegisterNatives_Members()
|
|||||||
g_amxxapi.AddNatives(EngineVars_Natives);
|
g_amxxapi.AddNatives(EngineVars_Natives);
|
||||||
}
|
}
|
||||||
|
|
||||||
cell set_member(void* pdata, const member_t *member, cell* value, size_t element)
|
cell set_member(AMX *amx, void* pdata, const member_t *member, cell* value, size_t element)
|
||||||
{
|
{
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -981,6 +984,7 @@ cell set_member(void* pdata, const member_t *member, cell* value, size_t element
|
|||||||
case MEBMER_REBUYSTRUCT:
|
case MEBMER_REBUYSTRUCT:
|
||||||
case MEMBER_PMTRACE:
|
case MEMBER_PMTRACE:
|
||||||
case MEBMER_USERCMD:
|
case MEBMER_USERCMD:
|
||||||
|
AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: member type %s (%s) is not supported", __FUNCTION__, member_t::getTypeString(member->type), member->name);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
@ -989,7 +993,7 @@ cell set_member(void* pdata, const member_t *member, cell* value, size_t element
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
cell get_member(void* pdata, const member_t *member, cell* dest, size_t element, size_t length)
|
cell get_member(AMX *amx, void* pdata, const member_t *member, cell* dest, size_t element, size_t length)
|
||||||
{
|
{
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -1103,7 +1107,8 @@ cell get_member(void* pdata, const member_t *member, cell* dest, size_t element,
|
|||||||
|
|
||||||
case MEMBER_ENTITY:
|
case MEMBER_ENTITY:
|
||||||
case MEMBER_EVARS:
|
case MEMBER_EVARS:
|
||||||
return 0;
|
AMXX_LogError(amx, AMX_ERR_NATIVE, "%s: member type %s (%s) is not supported", __FUNCTION__, member_t::getTypeString(member->type), member->name);
|
||||||
|
return FALSE;
|
||||||
case MEMBER_TRACERESULT:
|
case MEMBER_TRACERESULT:
|
||||||
return (cell)get_member_direct<TraceResult>(pdata, member->offset, element);
|
return (cell)get_member_direct<TraceResult>(pdata, member->offset, element);
|
||||||
case MEBMER_REBUYSTRUCT:
|
case MEBMER_REBUYSTRUCT:
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
void RegisterNatives_Members();
|
void RegisterNatives_Members();
|
||||||
|
|
||||||
void *get_pdata_custom(CBaseEntity *pEntity, cell member);
|
void *get_pdata_custom(CBaseEntity *pEntity, cell member);
|
||||||
cell set_member(void* pdata, const member_t *member, cell* value, size_t element);
|
cell set_member(AMX *amx, void* pdata, const member_t *member, cell* value, size_t element);
|
||||||
cell get_member(void* pdata, const member_t *member, cell* dest, size_t element, size_t length = 0);
|
cell get_member(AMX *amx, void* pdata, const member_t *member, cell* dest, size_t element, size_t length = 0);
|
||||||
|
|
||||||
bool isTypeReturnable(MType type);
|
bool isTypeReturnable(MType type);
|
||||||
|
Loading…
Reference in New Issue
Block a user