mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 14:25:38 +03:00
Added FM_KeyValue and get_kv/set_kv natives.
Removed pev natives. Probably fixed something in DLLFunc_ClientUserInfoChanged.
This commit is contained in:
parent
560f50eda7
commit
81f4a505c1
@ -212,6 +212,7 @@ static cell AMX_NATIVE_CALL dllfunc(AMX *amx,cell *params)
|
|||||||
iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT2(index)));
|
iparam1 = gpMetaUtilFuncs->pfnCallGameEntity(PLID,STRING(ALLOC_STRING(temp)),VARS(INDEXENT2(index)));
|
||||||
return iparam1;
|
return iparam1;
|
||||||
case DLLFunc_ClientUserInfoChanged: // void ) (edict_t *pEntity, char *infobuffer)
|
case DLLFunc_ClientUserInfoChanged: // void ) (edict_t *pEntity, char *infobuffer)
|
||||||
|
cRet = MF_GetAmxAddr(amx,params[1]);
|
||||||
index = cRet[0];
|
index = cRet[0];
|
||||||
CHECK_ENTITY(index);
|
CHECK_ENTITY(index);
|
||||||
gpGamedllFuncs->dllapi_table->pfnClientUserInfoChanged(INDEXENT2(index),(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)));
|
gpGamedllFuncs->dllapi_table->pfnClientUserInfoChanged(INDEXENT2(index),(*g_engfuncs.pfnGetInfoKeyBuffer)(INDEXENT2(index)));
|
||||||
|
@ -167,9 +167,21 @@
|
|||||||
Filter="">
|
Filter="">
|
||||||
<File
|
<File
|
||||||
RelativePath=".\pev.cpp">
|
RelativePath=".\pev.cpp">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\pev.h">
|
RelativePath=".\pev.h">
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
ExcludedFromBuild="TRUE">
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
@ -185,6 +197,10 @@
|
|||||||
RelativePath=".\forwardmacros.h">
|
RelativePath=".\forwardmacros.h">
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="hlsdk"
|
||||||
|
Filter="">
|
||||||
|
</Filter>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
|
@ -6,7 +6,7 @@ void OnAmxxAttach()
|
|||||||
{
|
{
|
||||||
MF_AddNatives(engfunc_natives);
|
MF_AddNatives(engfunc_natives);
|
||||||
MF_AddNatives(dllfunc_natives);
|
MF_AddNatives(dllfunc_natives);
|
||||||
MF_AddNatives(pev_natives);
|
//MF_AddNatives(pev_natives);
|
||||||
MF_AddNatives(forward_natives);
|
MF_AddNatives(forward_natives);
|
||||||
MF_AddNatives(pdata_natives);
|
MF_AddNatives(pdata_natives);
|
||||||
MF_AddNatives(tr_Natives);
|
MF_AddNatives(tr_Natives);
|
||||||
|
@ -42,7 +42,7 @@ inline edict_t* INDEXENT2( int iEdictNum )
|
|||||||
#define CHECK_ENTITY(x) if (x != 0 && (FNullEnt(INDEXENT2(x)) || x < 0 || x > gpGlobals->maxEntities)) { MF_RaiseAmxError(amx,AMX_ERR_NATIVE); return 0; }
|
#define CHECK_ENTITY(x) if (x != 0 && (FNullEnt(INDEXENT2(x)) || x < 0 || x > gpGlobals->maxEntities)) { MF_RaiseAmxError(amx,AMX_ERR_NATIVE); return 0; }
|
||||||
extern AMX_NATIVE_INFO engfunc_natives[];
|
extern AMX_NATIVE_INFO engfunc_natives[];
|
||||||
extern AMX_NATIVE_INFO dllfunc_natives[];
|
extern AMX_NATIVE_INFO dllfunc_natives[];
|
||||||
extern AMX_NATIVE_INFO pev_natives[];
|
//extern AMX_NATIVE_INFO pev_natives[];
|
||||||
extern AMX_NATIVE_INFO forward_natives[];
|
extern AMX_NATIVE_INFO forward_natives[];
|
||||||
extern AMX_NATIVE_INFO pdata_natives[];
|
extern AMX_NATIVE_INFO pdata_natives[];
|
||||||
extern AMX_NATIVE_INFO tr_Natives[];
|
extern AMX_NATIVE_INFO tr_Natives[];
|
||||||
|
@ -1,20 +1,7 @@
|
|||||||
#include "fakemeta_amxx.h"
|
#include "fakemeta_amxx.h"
|
||||||
|
|
||||||
TraceResult *gfm_tr;
|
TraceResult *gfm_tr;
|
||||||
|
KeyValueData *g_fm_keyValueData;
|
||||||
/*enum
|
|
||||||
{
|
|
||||||
TR_AllSolid,
|
|
||||||
TR_StartSolid,
|
|
||||||
TR_InOpen,
|
|
||||||
TR_InWater,
|
|
||||||
TR_flFraction,
|
|
||||||
TR_vecEndPos,
|
|
||||||
TR_flPlaneDist,
|
|
||||||
TR_vecPlaneNormal,
|
|
||||||
TR_pHit,
|
|
||||||
TR_iHitgroup,
|
|
||||||
};*/
|
|
||||||
|
|
||||||
static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
|
static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
|
||||||
{
|
{
|
||||||
@ -37,7 +24,8 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
case TR_StartSolid:
|
case TR_StartSolid:
|
||||||
{
|
{
|
||||||
return gfm_tr->fStartSolid;
|
gfm_tr->fStartSolid = *ptr;
|
||||||
|
return 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TR_InWater:
|
case TR_InWater:
|
||||||
@ -171,8 +159,93 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// native set_kv(TraceResult:tr_member, {Float,_}:...);
|
||||||
|
static cell AMX_NATIVE_CALL set_kv(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
//if (*params / sizeof(cell) < 2)
|
||||||
|
//return 0; //TODO: Error
|
||||||
|
|
||||||
|
//cell *ptr = MF_GetAmxAddr(amx, params[2]);
|
||||||
|
//edict_t *e = 0;
|
||||||
|
|
||||||
|
switch (params[1])
|
||||||
|
{
|
||||||
|
case KV_ClassName:
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
g_fm_keyValueData->szClassName = MF_GetAmxString(amx, params[2], 0, &len);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case KV_KeyName:
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
g_fm_keyValueData->szKeyName = MF_GetAmxString(amx, params[2], 0, &len);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case KV_Value:
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
g_fm_keyValueData->szValue = MF_GetAmxString(amx, params[2], 0, &len);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case KV_fHandled:
|
||||||
|
{
|
||||||
|
g_fm_keyValueData->fHandled = params[2];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
//TODO: error
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL get_kv(AMX *amx, cell *params)
|
||||||
|
{
|
||||||
|
int type = params[1];
|
||||||
|
cell *ptr = 0;
|
||||||
|
const char *szRet = "";
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case KV_ClassName:
|
||||||
|
{
|
||||||
|
if (g_fm_keyValueData->szClassName)
|
||||||
|
szRet = g_fm_keyValueData->szClassName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case KV_KeyName:
|
||||||
|
{
|
||||||
|
if (g_fm_keyValueData->szKeyName)
|
||||||
|
szRet = g_fm_keyValueData->szKeyName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case KV_Value:
|
||||||
|
{
|
||||||
|
if (g_fm_keyValueData->szValue)
|
||||||
|
szRet = g_fm_keyValueData->szValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case KV_fHandled: {
|
||||||
|
return g_fm_keyValueData->fHandled;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
//TODO: error
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MF_SetAmxString(amx, params[2], szRet, params[3]);
|
||||||
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO tr_Natives[] = {
|
AMX_NATIVE_INFO tr_Natives[] = {
|
||||||
{"get_tr", get_tr},
|
{"get_tr", get_tr},
|
||||||
{"set_tr", set_tr},
|
{"set_tr", set_tr},
|
||||||
|
{"get_kv", get_kv},
|
||||||
|
{"set_kv", set_kv},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
@ -2,7 +2,7 @@
|
|||||||
#define _INCLUDE_TR_H
|
#define _INCLUDE_TR_H
|
||||||
|
|
||||||
extern TraceResult *gfm_tr;
|
extern TraceResult *gfm_tr;
|
||||||
|
extern KeyValueData *g_fm_keyValueData; // JGHG: Yeah yeah I know this doesn't fit in here. Then again, neither does gaben.
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TR_AllSolid,
|
TR_AllSolid,
|
||||||
@ -17,6 +17,14 @@ enum
|
|||||||
TR_iHitgroup,
|
TR_iHitgroup,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum KeyValue
|
||||||
|
{
|
||||||
|
KV_ClassName,
|
||||||
|
KV_KeyName,
|
||||||
|
KV_Value,
|
||||||
|
KV_fHandled
|
||||||
|
};
|
||||||
|
|
||||||
extern AMX_NATIVE_INFO tr_Natives[];
|
extern AMX_NATIVE_INFO tr_Natives[];
|
||||||
|
|
||||||
#endif //_INCLUDE_TR_H
|
#endif //_INCLUDE_TR_H
|
@ -111,6 +111,27 @@ void TraceLine_post(const float *v1, const float *v2, int fNoMonsters, edict_t *
|
|||||||
RETURN_META(MRES_IGNORED);
|
RETURN_META(MRES_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Passed to pfnKeyValue
|
||||||
|
typedef struct KeyValueData_s
|
||||||
|
{
|
||||||
|
char *szClassName; // in: entity classname
|
||||||
|
char *szKeyName; // in: name of key
|
||||||
|
char *szValue; // in: value of key
|
||||||
|
int32 fHandled; // out: DLL sets to true if key-value pair was understood
|
||||||
|
} KeyValueData;
|
||||||
|
*/
|
||||||
|
void KeyValue(edict_t* entity, KeyValueData* data) {
|
||||||
|
g_fm_keyValueData = data;
|
||||||
|
FM_ENG_HANDLE(FM_KeyValue, (Engine[FM_KeyValue].at(i), ENTINDEX(entity)));
|
||||||
|
RETURN_META(mswi(lastFmRes));
|
||||||
|
}
|
||||||
|
void KeyValue_post(edict_t* entity, KeyValueData* data) {
|
||||||
|
FM_ENG_HANDLE_POST(FM_KeyValue, (Engine[FM_KeyValue].at(i), ENTINDEX(entity)));
|
||||||
|
RETURN_META(MRES_IGNORED);
|
||||||
|
}
|
||||||
|
|
||||||
void AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
|
void AlertMessage(ALERT_TYPE atype, char *szFmt, ...)
|
||||||
{
|
{
|
||||||
static char buf[2048];
|
static char buf[2048];
|
||||||
@ -927,15 +948,14 @@ static cell AMX_NATIVE_CALL register_forward(AMX *amx, cell *params)
|
|||||||
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
|
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_CELL, FP_DONE);
|
||||||
DLLHOOK(Blocked);
|
DLLHOOK(Blocked);
|
||||||
break;
|
break;
|
||||||
/*
|
//TODO: Expand the structure (simple: just a bunch of strings and a float.)
|
||||||
|
|
||||||
TODO: Expand the structure (simple: just a bunch of strings and a float.)
|
|
||||||
|
|
||||||
//DLLFunc_KeyValue, // void ) ( edict_t *pentKeyvalue, KeyValueData *pkvd );
|
//DLLFunc_KeyValue, // void ) ( edict_t *pentKeyvalue, KeyValueData *pkvd );
|
||||||
case FM_KeyValue:
|
case FM_KeyValue:
|
||||||
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_????, FP_DONE);
|
//fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_STRING, FP_STRING, FP_STRING, FP_CELL, FP_DONE);
|
||||||
|
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
|
||||||
|
DLLHOOK(KeyValue);
|
||||||
break;
|
break;
|
||||||
*/
|
|
||||||
//DLLFunc_SetAbsBox, // void ) ( edict_t *pent );
|
//DLLFunc_SetAbsBox, // void ) ( edict_t *pent );
|
||||||
case FM_SetAbsBox:
|
case FM_SetAbsBox:
|
||||||
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
|
fId = MF_RegisterSPForwardByName(amx, funcname, FP_CELL, FP_DONE);
|
||||||
|
Loading…
Reference in New Issue
Block a user