mirror of
https://github.com/rehlds/reapi.git
synced 2025-01-16 08:38:08 +03:00
getAmxString refactoring
This commit is contained in:
parent
ab359ab320
commit
81d5b4b699
@ -240,7 +240,7 @@ NOINLINE void AMXX_Error(AMX *amx, const char *fmt, ...)
|
|||||||
g_amxxapi.Log("[%s] %s", scriptName, msg);
|
g_amxxapi.Log("[%s] %s", scriptName, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* getAmxStringTemp(cell* src, char* dest, size_t max, size_t* len)
|
char* getAmxString(cell* src, char* dest, size_t max, size_t* len)
|
||||||
{
|
{
|
||||||
char* start = dest;
|
char* start = dest;
|
||||||
|
|
||||||
|
@ -494,12 +494,12 @@ extern amxxapi_t g_amxxapi;
|
|||||||
void MF_Log(const char *fmt, ...);
|
void MF_Log(const char *fmt, ...);
|
||||||
void MF_LogError(AMX *amx, int err, const char *fmt, ...);
|
void MF_LogError(AMX *amx, int err, const char *fmt, ...);
|
||||||
void AMXX_Error(AMX *amx, const char *fmt, ...);
|
void AMXX_Error(AMX *amx, const char *fmt, ...);
|
||||||
char* getAmxStringTemp(cell* src, char* dest, size_t max, size_t* len = nullptr);
|
char* getAmxString(cell* src, char* dest, size_t max, size_t* len = nullptr);
|
||||||
void setAmxString(cell* dest, const char* string, size_t max);
|
void setAmxString(cell* dest, const char* string, size_t max);
|
||||||
|
|
||||||
inline cell* getAmxAddr(AMX *amx, cell amx_addr)
|
inline cell* getAmxAddr(AMX *amx, cell amx_addr)
|
||||||
{
|
{
|
||||||
return (cell *)(amx->base + (int)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
return (cell *)(amx->base + (size_t)(((AMX_HEADER *)amx->base)->dat + amx_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __AMXXMODULE_H__
|
#endif // __AMXXMODULE_H__
|
||||||
|
@ -17,8 +17,10 @@ cell AMX_NATIVE_CALL amx_FClassnameIs(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char classname[256];
|
||||||
|
|
||||||
edict_t *pEdict = edictByIndex(nEntityIndex);
|
edict_t *pEdict = edictByIndex(nEntityIndex);
|
||||||
if (pEdict && FClassnameIs(pEdict, getAmxString(amx, params[arg_classname]))) {
|
if (pEdict && FClassnameIs(pEdict, getAmxString(amx, params[arg_classname], classname))) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,8 +138,8 @@ cell AMX_NATIVE_CALL amx_get_key_value(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
char key[MAX_KV_LEN];
|
char keybuf[MAX_KV_LEN];
|
||||||
Q_strlcpy(key, getAmxString(amx, params[arg_key]));
|
auto key = getAmxString(amx, params[arg_key], keybuf);
|
||||||
|
|
||||||
return g_amxxapi.SetAmxString(amx, params[arg_value], g_engfuncs.pfnInfoKeyValue(buffer, key), params[arg_maxlen]);
|
return g_amxxapi.SetAmxString(amx, params[arg_value], g_engfuncs.pfnInfoKeyValue(buffer, key), params[arg_maxlen]);
|
||||||
}
|
}
|
||||||
@ -164,9 +166,9 @@ cell AMX_NATIVE_CALL amx_set_key_value(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
char key[MAX_KV_LEN], value[MAX_KV_LEN];
|
char keybuf[MAX_KV_LEN], valuebuf[MAX_KV_LEN];
|
||||||
Q_strlcpy(key, getAmxString(amx, params[arg_key]));
|
auto key = getAmxString(amx, params[arg_key], keybuf);
|
||||||
Q_strlcpy(value, getAmxString(amx, params[arg_value]));
|
auto value = getAmxString(amx, params[arg_value], valuebuf);
|
||||||
|
|
||||||
if (!key[0])
|
if (!key[0])
|
||||||
{
|
{
|
||||||
@ -282,13 +284,14 @@ cell AMX_NATIVE_CALL amx_SetThink(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int funcid;
|
char namebuf[256];
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
||||||
pEntity->SetThink(nullptr);
|
pEntity->SetThink(nullptr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int funcid;
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) {
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -325,13 +328,14 @@ cell AMX_NATIVE_CALL amx_SetTouch(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int funcid;
|
char namebuf[256];
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
||||||
pEntity->SetTouch(nullptr);
|
pEntity->SetTouch(nullptr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int funcid;
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) {
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -368,13 +372,14 @@ cell AMX_NATIVE_CALL amx_SetUse(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int funcid;
|
char namebuf[256];
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
||||||
pEntity->SetUse(nullptr);
|
pEntity->SetUse(nullptr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int funcid;
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) {
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -411,13 +416,14 @@ cell AMX_NATIVE_CALL amx_SetBlocked(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int funcid;
|
char namebuf[256];
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
||||||
pEntity->SetBlocked(nullptr);
|
pEntity->SetBlocked(nullptr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int funcid;
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) {
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -455,13 +461,14 @@ cell AMX_NATIVE_CALL amx_SetMoveDone(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int funcid;
|
char namebuf[256];
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
if (unlikely(funcname == nullptr || funcname[0] == '\0')) {
|
||||||
((CBaseToggle *)pEntity)->SetMoveDone(nullptr);
|
((CBaseToggle *)pEntity)->SetMoveDone(nullptr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int funcid;
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE)) {
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -98,26 +98,18 @@ private:
|
|||||||
cell* m_params;
|
cell* m_params;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct getAmxString
|
template<size_t N>
|
||||||
|
const char* getAmxString(cell* src, char (&dest)[N], size_t* len = nullptr)
|
||||||
{
|
{
|
||||||
getAmxString(cell* src, size_t* len = nullptr)
|
return getAmxString(src, dest, N - 1, len);
|
||||||
{
|
|
||||||
getAmxStringTemp(src, temp, sizeof temp - 1, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getAmxString(AMX* amx, cell addr, size_t* len = nullptr)
|
template<size_t N>
|
||||||
|
const char* getAmxString(AMX* amx, cell addr, char (&dest)[N], size_t* len = nullptr)
|
||||||
{
|
{
|
||||||
getAmxStringTemp(getAmxAddr(amx, addr), temp, sizeof temp - 1, len);
|
return getAmxString(getAmxAddr(amx, addr), dest, N - 1, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
operator char *()
|
|
||||||
{
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
char temp[1024];
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void fillNatives(AMX_NATIVE_INFO* table, cell (AMX_NATIVE_CALL with)(AMX *, cell *))
|
inline void fillNatives(AMX_NATIVE_INFO* table, cell (AMX_NATIVE_CALL with)(AMX *, cell *))
|
||||||
{
|
{
|
||||||
for (size_t i = 0; table[i].name; i++)
|
for (size_t i = 0; table[i].name; i++)
|
||||||
|
@ -32,8 +32,10 @@ cell AMX_NATIVE_CALL RegisterHookChain(AMX *amx, cell *params)
|
|||||||
return INVALID_HOOKCHAIN;
|
return INVALID_HOOKCHAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char namebuf[256];
|
||||||
|
const char *funcname = getAmxString(amx, params[arg_handler], namebuf);
|
||||||
|
|
||||||
int funcid;
|
int funcid;
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
|
||||||
if (unlikely(g_amxxapi.amx_FindPublic(amx, funcname, &funcid) != AMX_ERR_NONE))
|
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, funcname);
|
||||||
@ -125,6 +127,7 @@ cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char string[2048];
|
||||||
cell* srcAddr = getAmxAddr(amx, params[arg_value]);
|
cell* srcAddr = getAmxAddr(amx, params[arg_value]);
|
||||||
|
|
||||||
switch (retVal.type)
|
switch (retVal.type)
|
||||||
@ -140,7 +143,7 @@ cell AMX_NATIVE_CALL SetHookChainReturn(AMX *amx, cell *params)
|
|||||||
delete[] retVal._string;
|
delete[] retVal._string;
|
||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
const char *dest = getAmxString(srcAddr, &len);
|
const char *dest = getAmxString(srcAddr, string, &len);
|
||||||
retVal._string = strcpy(new char[len + 1], dest);
|
retVal._string = strcpy(new char[len + 1], dest);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -270,7 +273,7 @@ cell AMX_NATIVE_CALL SetHookChainArg(AMX *amx, cell *params)
|
|||||||
*(cell *)destAddr = *srcAddr;
|
*(cell *)destAddr = *srcAddr;
|
||||||
break;
|
break;
|
||||||
case ATYPE_STRING:
|
case ATYPE_STRING:
|
||||||
*(char **)destAddr = getAmxStringTemp(srcAddr, g_hookCtx->get_temp_string(amx), CTempStrings::STRING_LEN);
|
*(char **)destAddr = getAmxString(srcAddr, g_hookCtx->get_temp_string(amx), CTempStrings::STRING_LEN);
|
||||||
break;
|
break;
|
||||||
case ATYPE_CLASSPTR:
|
case ATYPE_CLASSPTR:
|
||||||
*(CBaseEntity **)destAddr = getPrivate<CBaseEntity>(*srcAddr);
|
*(CBaseEntity **)destAddr = getPrivate<CBaseEntity>(*srcAddr);
|
||||||
|
@ -620,6 +620,8 @@ void RegisterNatives_Members()
|
|||||||
|
|
||||||
cell set_member(void* pdata, const member_t *member, cell* value, size_t element)
|
cell set_member(void* pdata, const member_t *member, cell* value, size_t element)
|
||||||
{
|
{
|
||||||
|
char string[2048];
|
||||||
|
|
||||||
switch (member->type) {
|
switch (member->type) {
|
||||||
case MEMBER_CLASSPTR:
|
case MEMBER_CLASSPTR:
|
||||||
{
|
{
|
||||||
@ -655,14 +657,14 @@ cell set_member(void* pdata, const member_t *member, cell* value, size_t element
|
|||||||
// native set_member(_index, any:_member, const source[]);
|
// native set_member(_index, any:_member, const source[]);
|
||||||
if (member->max_size > sizeof(char*)) {
|
if (member->max_size > sizeof(char*)) {
|
||||||
// char []
|
// char []
|
||||||
char *source = getAmxString(value);
|
const char *source = getAmxString(value, string);
|
||||||
char *dest = get_member_direct<char>(pdata, member->offset);
|
char *dest = get_member_direct<char>(pdata, member->offset);
|
||||||
strncpy(dest, source, member->max_size - 1);
|
strncpy(dest, source, member->max_size - 1);
|
||||||
dest[member->max_size - 1] = '\0';
|
dest[member->max_size - 1] = '\0';
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// char *
|
// char *
|
||||||
char *source = getAmxString(value);
|
const char *source = getAmxString(value, string);
|
||||||
char *&dest = get_member<char *>(pdata, member->offset);
|
char *&dest = get_member<char *>(pdata, member->offset);
|
||||||
g_ReGameFuncs->ChangeString(dest, source);
|
g_ReGameFuncs->ChangeString(dest, source);
|
||||||
}
|
}
|
||||||
@ -671,7 +673,7 @@ cell set_member(void* pdata, const member_t *member, cell* value, size_t element
|
|||||||
}
|
}
|
||||||
case MEMBER_QSTRING:
|
case MEMBER_QSTRING:
|
||||||
{
|
{
|
||||||
char *source = getAmxString(value);
|
const char *source = getAmxString(value, string);
|
||||||
string_t newstr = (source && source[0] != '\0') ? ALLOC_STRING(source) : iStringNull;
|
string_t newstr = (source && source[0] != '\0') ? ALLOC_STRING(source) : iStringNull;
|
||||||
set_member<string_t>(pdata, member->offset, newstr, element);
|
set_member<string_t>(pdata, member->offset, newstr, element);
|
||||||
return (cell)newstr;
|
return (cell)newstr;
|
||||||
|
@ -73,9 +73,10 @@ cell AMX_NATIVE_CALL rg_give_item(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
GiveType type = static_cast<GiveType>(params[arg_type]);
|
char namebuf[256];
|
||||||
const char *itemName = getAmxString(amx, params[arg_item]);
|
const char *itemName = getAmxString(amx, params[arg_item], namebuf);
|
||||||
|
|
||||||
|
GiveType type = static_cast<GiveType>(params[arg_type]);
|
||||||
if (type > GT_APPEND)
|
if (type > GT_APPEND)
|
||||||
{
|
{
|
||||||
auto pInfo = g_ReGameApi->GetWeaponSlot(itemName);
|
auto pInfo = g_ReGameApi->GetWeaponSlot(itemName);
|
||||||
@ -118,9 +119,10 @@ cell AMX_NATIVE_CALL rg_give_custom_item(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
GiveType type = static_cast<GiveType>(params[arg_type]);
|
char namebuf[256];
|
||||||
const char *itemName = getAmxString(amx, params[arg_item]);
|
const char *itemName = getAmxString(amx, params[arg_item], namebuf);
|
||||||
|
|
||||||
|
GiveType type = static_cast<GiveType>(params[arg_type]);
|
||||||
if (type > GT_APPEND)
|
if (type > GT_APPEND)
|
||||||
{
|
{
|
||||||
auto pInfo = g_ReGameApi->GetWeaponSlot(itemName);
|
auto pInfo = g_ReGameApi->GetWeaponSlot(itemName);
|
||||||
@ -420,29 +422,25 @@ cell AMX_NATIVE_CALL rg_round_end(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char sentencebuf[190], messagebuf[190];
|
||||||
|
const char *sentence = getAmxString(amx, params[arg_sentence], sentencebuf);
|
||||||
|
const char *message = getAmxString(amx, params[arg_message], messagebuf);
|
||||||
|
|
||||||
ScenarioEventEndRound event = static_cast<ScenarioEventEndRound>(params[arg_event]);
|
ScenarioEventEndRound event = static_cast<ScenarioEventEndRound>(params[arg_event]);
|
||||||
|
|
||||||
char sentence[190], message[190];
|
|
||||||
Q_strlcpy(sentence, getAmxString(amx, params[arg_sentence]));
|
|
||||||
Q_strlcpy(message, getAmxString(amx, params[arg_message]));
|
|
||||||
|
|
||||||
const char *_sentence = sentence;
|
|
||||||
const char *_message = message;
|
|
||||||
|
|
||||||
if (event != ROUND_NONE) {
|
if (event != ROUND_NONE) {
|
||||||
auto& lst = msg_sentence_list[event];
|
auto& lst = msg_sentence_list[event];
|
||||||
if (strcmp(_sentence, "default") == 0)
|
if (strcmp(sentence, "default") == 0)
|
||||||
_sentence = lst.sentence;
|
sentence = lst.sentence;
|
||||||
if (strcmp(message, "default") == 0)
|
if (strcmp(message, "default") == 0)
|
||||||
_message = lst.msg;
|
message = lst.msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_sentence[0] != '\0')
|
if (sentence[0] != '\0')
|
||||||
{
|
{
|
||||||
Broadcast(_sentence);
|
Broadcast(sentence);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSGameRules()->EndRoundMessage(_message, event);
|
CSGameRules()->EndRoundMessage(message, event);
|
||||||
CSGameRules()->TerminateRound(CAmxArg(amx, params[arg_delay]), winstatus);
|
CSGameRules()->TerminateRound(CAmxArg(amx, params[arg_delay]), winstatus);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -486,7 +484,8 @@ cell AMX_NATIVE_CALL rg_create_entity(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
enum args_e { arg_count, arg_classname, arg_hashtable };
|
enum args_e { arg_count, arg_classname, arg_hashtable };
|
||||||
|
|
||||||
string_t iClass = g_engfuncs.pfnAllocString(getAmxString(amx, params[arg_classname]));
|
char classname[256];
|
||||||
|
string_t iClass = g_engfuncs.pfnAllocString(getAmxString(amx, params[arg_classname], classname));
|
||||||
|
|
||||||
edict_t *pEntity;
|
edict_t *pEntity;
|
||||||
if (params[arg_hashtable] != 0)
|
if (params[arg_hashtable] != 0)
|
||||||
@ -518,7 +517,8 @@ cell AMX_NATIVE_CALL rg_find_ent_by_class(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
enum args_e { arg_count, arg_start_index, arg_classname, arg_hashtable };
|
enum args_e { arg_count, arg_start_index, arg_classname, arg_hashtable };
|
||||||
|
|
||||||
const char* value = getAmxString(amx, params[arg_classname]);
|
char classname[256];
|
||||||
|
const char* value = getAmxString(amx, params[arg_classname], classname);
|
||||||
|
|
||||||
if (params[arg_hashtable] != 0)
|
if (params[arg_hashtable] != 0)
|
||||||
{
|
{
|
||||||
@ -556,8 +556,10 @@ cell AMX_NATIVE_CALL rg_find_ent_by_owner(AMX *amx, cell *params)
|
|||||||
|
|
||||||
CHECK_ISENTITY(arg_onwer);
|
CHECK_ISENTITY(arg_onwer);
|
||||||
|
|
||||||
|
char classname[256];
|
||||||
|
|
||||||
cell& startIndex = *getAmxAddr(amx, params[arg_start_index]);
|
cell& startIndex = *getAmxAddr(amx, params[arg_start_index]);
|
||||||
const char* value = getAmxString(amx, params[arg_classname]);
|
const char* value = getAmxString(amx, params[arg_classname], classname);
|
||||||
edict_t* pOwner = edictByIndexAmx(params[arg_onwer]);
|
edict_t* pOwner = edictByIndexAmx(params[arg_onwer]);
|
||||||
edict_t* pEntity = g_pEdicts + startIndex;
|
edict_t* pEntity = g_pEdicts + startIndex;
|
||||||
|
|
||||||
@ -599,7 +601,8 @@ cell AMX_NATIVE_CALL rg_find_weapon_bpack_by_name(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
const char *pszWeaponName = getAmxString(amx, params[arg_weapon]);
|
char wname[256];
|
||||||
|
const char *pszWeaponName = getAmxString(amx, params[arg_weapon], wname);
|
||||||
auto pInfo = g_ReGameApi->GetWeaponSlot(pszWeaponName);
|
auto pInfo = g_ReGameApi->GetWeaponSlot(pszWeaponName);
|
||||||
if (pInfo != nullptr)
|
if (pInfo != nullptr)
|
||||||
{
|
{
|
||||||
@ -647,7 +650,8 @@ cell AMX_NATIVE_CALL rg_has_item_by_name(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
const char *pszItemName = getAmxString(amx, params[arg_item]);
|
char iname[256];
|
||||||
|
const char *pszItemName = getAmxString(amx, params[arg_item], iname);
|
||||||
// item_* and weapon_shield
|
// item_* and weapon_shield
|
||||||
for (auto& inf : itemInfoStruct) {
|
for (auto& inf : itemInfoStruct) {
|
||||||
if (FStrEq(inf.pszItemName, pszItemName)) {
|
if (FStrEq(inf.pszItemName, pszItemName)) {
|
||||||
@ -697,8 +701,9 @@ cell AMX_NATIVE_CALL rg_get_weapon_info(AMX *amx, cell *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char wname[256];
|
||||||
|
const char* szWeaponName = getAmxString(amx, params[arg_weapon_id], wname);
|
||||||
WeaponInfoStruct* info = g_ReGameApi->GetWeaponInfo(weaponId);
|
WeaponInfoStruct* info = g_ReGameApi->GetWeaponInfo(weaponId);
|
||||||
char* szWeaponName = getAmxString(amx, params[arg_weapon_id]);
|
|
||||||
|
|
||||||
switch (info_type)
|
switch (info_type)
|
||||||
{
|
{
|
||||||
@ -937,7 +942,8 @@ cell AMX_NATIVE_CALL rg_drop_item(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
pPlayer->CSPlayer()->DropPlayerItem(getAmxString(amx, params[arg_item_name]));
|
char item[256];
|
||||||
|
pPlayer->CSPlayer()->DropPlayerItem(getAmxString(amx, params[arg_item_name], item));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -963,9 +969,8 @@ cell AMX_NATIVE_CALL rg_internal_cmd(AMX *amx, cell *params)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
char command[128];
|
char cmd[256], arg[256];
|
||||||
Q_strlcpy(command, getAmxString(amx, params[arg_cmd]));
|
pPlayer->CSPlayer()->ClientCommand(getAmxString(amx, params[arg_cmd], cmd), getAmxString(amx, params[arg_arg], arg));
|
||||||
pPlayer->CSPlayer()->ClientCommand(command, getAmxString(amx, params[arg_arg]));
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -988,7 +993,8 @@ cell AMX_NATIVE_CALL rg_remove_item(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
const char* szItemName = getAmxString(amx, params[arg_item_name]);
|
char iname[256];
|
||||||
|
const char* szItemName = getAmxString(amx, params[arg_item_name], iname);
|
||||||
if (pPlayer->CSPlayer()->RemovePlayerItem(szItemName)) {
|
if (pPlayer->CSPlayer()->RemovePlayerItem(szItemName)) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1173,7 +1179,9 @@ cell AMX_NATIVE_CALL rg_give_defusekit(AMX *amx, cell *params)
|
|||||||
if (params[arg_def] != 0)
|
if (params[arg_def] != 0)
|
||||||
{
|
{
|
||||||
Vector* color = (Vector *)getAmxAddr(amx, params[arg_color]);
|
Vector* color = (Vector *)getAmxAddr(amx, params[arg_color]);
|
||||||
const char* icon = getAmxString(amx, params[arg_icon]);
|
|
||||||
|
char iconbuf[256];
|
||||||
|
const char* icon = getAmxString(amx, params[arg_icon], iconbuf);
|
||||||
|
|
||||||
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, nullptr, pPlayer->pev);
|
MESSAGE_BEGIN(MSG_ONE, gmsgStatusIcon, nullptr, pPlayer->pev);
|
||||||
WRITE_BYTE(params[arg_flash] != 0 ? STATUSICON_FLASH : STATUSICON_SHOW);
|
WRITE_BYTE(params[arg_flash] != 0 ? STATUSICON_FLASH : STATUSICON_SHOW);
|
||||||
@ -1369,7 +1377,8 @@ cell AMX_NATIVE_CALL rg_set_user_model(AMX *amx, cell *params)
|
|||||||
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
|
||||||
CHECK_CONNECTED(pPlayer, arg_index);
|
CHECK_CONNECTED(pPlayer, arg_index);
|
||||||
|
|
||||||
const char* newModel = getAmxString(amx, params[arg_model]);
|
char modelbuf[256];
|
||||||
|
const char* newModel = getAmxString(amx, params[arg_model], modelbuf);
|
||||||
if (*newModel == '\0') {
|
if (*newModel == '\0') {
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "Model can not be empty");
|
MF_LogError(amx, AMX_ERR_NATIVE, "Model can not be empty");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1902,7 +1911,8 @@ cell AMX_NATIVE_CALL rg_send_audio(AMX *amx, cell *params)
|
|||||||
if (nIndex < 0)
|
if (nIndex < 0)
|
||||||
nIndex = 0;
|
nIndex = 0;
|
||||||
|
|
||||||
const char *szSample = getAmxString(amx, params[arg_sample]);
|
char sample[256];
|
||||||
|
const char *szSample = getAmxString(amx, params[arg_sample], sample);
|
||||||
auto pEdict = (nIndex == 0) ? nullptr : edictByIndexAmx(nIndex);
|
auto pEdict = (nIndex == 0) ? nullptr : edictByIndexAmx(nIndex);
|
||||||
|
|
||||||
EMESSAGE_BEGIN(nIndex ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, gmsgSendAudio, nullptr, pEdict);
|
EMESSAGE_BEGIN(nIndex ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, gmsgSendAudio, nullptr, pEdict);
|
||||||
@ -2005,7 +2015,8 @@ cell AMX_NATIVE_CALL rh_set_mapname(AMX *amx, cell *params)
|
|||||||
{
|
{
|
||||||
enum args_e { arg_count, arg_mapname };
|
enum args_e { arg_count, arg_mapname };
|
||||||
|
|
||||||
const char *mapname = getAmxString(amx, params[arg_mapname]);
|
char mapbuf[256];
|
||||||
|
const char *mapname = getAmxString(amx, params[arg_mapname], mapbuf);
|
||||||
g_RehldsData->SetName(mapname);
|
g_RehldsData->SetName(mapname);
|
||||||
g_pFunctionTable->pfnResetGlobalState = ResetGlobalState;
|
g_pFunctionTable->pfnResetGlobalState = ResetGlobalState;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -2090,7 +2101,8 @@ cell AMX_NATIVE_CALL rh_emit_sound2(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAmxArgs args(amx, params);
|
CAmxArgs args(amx, params);
|
||||||
const char *sample = getAmxString(amx, params[arg_sample]);
|
char samplebuf[256];
|
||||||
|
const char *sample = getAmxString(amx, params[arg_sample], samplebuf);
|
||||||
|
|
||||||
return (cell)g_RehldsFuncs->SV_EmitSound2
|
return (cell)g_RehldsFuncs->SV_EmitSound2
|
||||||
(
|
(
|
||||||
|
@ -33,22 +33,23 @@ cell AMX_NATIVE_CALL RegisterQueryFile(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char filename[MAX_PATH];
|
char filename[MAX_PATH];
|
||||||
const char *file = getAmxString(amx, params[arg_file]);
|
const char *file = getAmxString(amx, params[arg_file], filename);
|
||||||
if (!file || file[0] == '\0') {
|
if (!file || file[0] == '\0') {
|
||||||
MF_LogError(amx, AMX_ERR_NATIVE, "%s: file can not be empty.", __FUNCTION__);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: file can not be empty.", __FUNCTION__);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Q_strlcpy(filename, file);
|
|
||||||
|
char funcname[256];
|
||||||
|
const char *func = getAmxString(amx, params[arg_handler], funcname);
|
||||||
|
|
||||||
int funcid;
|
int funcid;
|
||||||
const char *funcname = getAmxString(amx, params[arg_handler]);
|
if (unlikely(g_amxxapi.amx_FindPublic(amx, func, &funcid) != AMX_ERR_NONE))
|
||||||
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);
|
MF_LogError(amx, AMX_ERR_NATIVE, "%s: public function \"%s\" not found.", __FUNCTION__, func);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_queryFileManager.Add(amx, filename, funcname, flag, params[arg_hash]);
|
return g_queryFileManager.Add(amx, filename, func, flag, params[arg_hash]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -93,7 +93,8 @@ cell AMX_NATIVE_CALL VTC_PlaySound(AMX *amx, cell *params)
|
|||||||
|
|
||||||
CHECK_ISPLAYER(arg_index);
|
CHECK_ISPLAYER(arg_index);
|
||||||
|
|
||||||
g_pVoiceTranscoderApi->PlaySound((size_t)params[arg_index], getAmxString(amx, params[arg_audio_pathfile]));
|
char pathfile[MAX_PATH];
|
||||||
|
g_pVoiceTranscoderApi->PlaySound((size_t)params[arg_index], getAmxString(amx, params[arg_audio_pathfile], pathfile));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user