mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-27 15:25:36 +03:00
177 lines
4.0 KiB
C++
177 lines
4.0 KiB
C++
|
#include "gpglobals.h"
|
||
|
|
||
|
static cell AMX_NATIVE_CALL get_global_float(AMX *amx, cell *params)
|
||
|
{
|
||
|
int global = params[1];
|
||
|
|
||
|
REAL returnValue;
|
||
|
|
||
|
switch (params[1]) {
|
||
|
case GL_coop:
|
||
|
returnValue = gpGlobals->coop;
|
||
|
break;
|
||
|
case GL_deathmatch:
|
||
|
returnValue = gpGlobals->deathmatch;
|
||
|
break;
|
||
|
case GL_force_retouch:
|
||
|
returnValue = gpGlobals->force_retouch;
|
||
|
break;
|
||
|
case GL_found_secrets:
|
||
|
returnValue = gpGlobals->found_secrets;
|
||
|
break;
|
||
|
case GL_frametime:
|
||
|
returnValue = gpGlobals->frametime;
|
||
|
break;
|
||
|
case GL_serverflags:
|
||
|
returnValue = gpGlobals->serverflags;
|
||
|
break;
|
||
|
case GL_teamplay:
|
||
|
returnValue = gpGlobals->teamplay;
|
||
|
break;
|
||
|
case GL_time:
|
||
|
returnValue = gpGlobals->time;
|
||
|
break;
|
||
|
case GL_trace_allsolid:
|
||
|
returnValue = gpGlobals->trace_allsolid;
|
||
|
break;
|
||
|
case GL_trace_fraction:
|
||
|
returnValue = gpGlobals->trace_fraction;
|
||
|
break;
|
||
|
case GL_trace_inopen:
|
||
|
returnValue = gpGlobals->trace_inopen;
|
||
|
break;
|
||
|
case GL_trace_inwater:
|
||
|
returnValue = gpGlobals->trace_inwater;
|
||
|
break;
|
||
|
case GL_trace_plane_dist:
|
||
|
returnValue = gpGlobals->trace_plane_dist;
|
||
|
break;
|
||
|
case GL_trace_startsolid:
|
||
|
returnValue = gpGlobals->trace_startsolid;
|
||
|
break;
|
||
|
default:
|
||
|
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return amx_ftoc(returnValue);
|
||
|
}
|
||
|
|
||
|
static cell AMX_NATIVE_CALL get_global_int(AMX *amx, cell *params)
|
||
|
{
|
||
|
int returnValue = 0;
|
||
|
|
||
|
switch (params[1]) {
|
||
|
case GL_cdAudioTrack:
|
||
|
returnValue = gpGlobals->cdAudioTrack;
|
||
|
break;
|
||
|
case GL_maxClients:
|
||
|
returnValue = gpGlobals->maxClients;
|
||
|
break;
|
||
|
case GL_maxEntities:
|
||
|
returnValue = gpGlobals->maxEntities;
|
||
|
break;
|
||
|
case GL_msg_entity:
|
||
|
returnValue = gpGlobals->msg_entity;
|
||
|
break;
|
||
|
case GL_trace_flags:
|
||
|
returnValue = gpGlobals->trace_flags;
|
||
|
break;
|
||
|
case GL_trace_hitgroup:
|
||
|
returnValue = gpGlobals->trace_hitgroup;
|
||
|
break;
|
||
|
default:
|
||
|
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return returnValue;
|
||
|
}
|
||
|
|
||
|
static cell AMX_NATIVE_CALL get_global_string(AMX *amx, cell *params)
|
||
|
{
|
||
|
string_t* returnValue;
|
||
|
|
||
|
switch(params[1]) {
|
||
|
case GL_pStringBase: // const char *, so no string_t
|
||
|
return MF_SetAmxString(amx, params[2], gpGlobals->pStringBase, params[3]);
|
||
|
// The rest are string_t:s...
|
||
|
case GL_mapname:
|
||
|
returnValue = &(gpGlobals->mapname);
|
||
|
break;
|
||
|
case GL_startspot:
|
||
|
returnValue = &(gpGlobals->startspot);
|
||
|
break;
|
||
|
default:
|
||
|
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return MF_SetAmxString(amx, params[2], STRING(*returnValue), params[3]);
|
||
|
}
|
||
|
|
||
|
static cell AMX_NATIVE_CALL get_global_vector(AMX *amx, cell *params) // globals_get_vector(variable, Float:vector[3]); = 2 params
|
||
|
{
|
||
|
cell *cRet = MF_GetAmxAddr(amx, params[2]);
|
||
|
vec3_t fetchedVector;
|
||
|
|
||
|
switch (params[1]) {
|
||
|
case GL_trace_endpos:
|
||
|
fetchedVector = gpGlobals->trace_endpos;
|
||
|
break;
|
||
|
case GL_trace_plane_normal:
|
||
|
fetchedVector = gpGlobals->trace_plane_normal;
|
||
|
break;
|
||
|
case GL_v_forward:
|
||
|
fetchedVector = gpGlobals->v_forward;
|
||
|
break;
|
||
|
case GL_v_right:
|
||
|
fetchedVector = gpGlobals->v_right;
|
||
|
break;
|
||
|
case GL_v_up:
|
||
|
fetchedVector = gpGlobals->v_up;
|
||
|
break;
|
||
|
case GL_vecLandmarkOffset:
|
||
|
fetchedVector = gpGlobals->vecLandmarkOffset;
|
||
|
break;
|
||
|
default:
|
||
|
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
cRet[0] = amx_ftoc(fetchedVector.x);
|
||
|
cRet[1] = amx_ftoc(fetchedVector.y);
|
||
|
cRet[2] = amx_ftoc(fetchedVector.z);
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
static cell AMX_NATIVE_CALL get_global_edict(AMX *amx, cell *params) // globals_get_edict(variable); = 1 param
|
||
|
{
|
||
|
edict_t* pReturnEntity;
|
||
|
|
||
|
switch (params[1]) {
|
||
|
case GL_trace_ent:
|
||
|
pReturnEntity = gpGlobals->trace_ent;
|
||
|
break;
|
||
|
default:
|
||
|
MF_RaiseAmxError(amx, AMX_ERR_NATIVE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Will crash if ENTINDEX() is called on bad pointer?
|
||
|
if(!FNullEnt(pReturnEntity))
|
||
|
return ENTINDEX(pReturnEntity);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
AMX_NATIVE_INFO global_Natives[] = {
|
||
|
{"get_global_float", get_global_float},
|
||
|
{"get_global_int", get_global_int},
|
||
|
{"get_global_string", get_global_string},
|
||
|
{"get_global_edict", get_global_edict},
|
||
|
{"get_global_vector", get_global_vector},
|
||
|
{NULL, NULL},
|
||
|
///////////////////
|
||
|
};
|