Fixed traceresults and trace hooks..

This commit is contained in:
Steve Dudenhoeffer
2004-09-15 18:40:18 +00:00
parent 0ea68c81dc
commit 1485014229
4 changed files with 53 additions and 52 deletions

View File

@ -1,5 +1,7 @@
#include "fakemeta_amxx.h"
TraceResult *gfm_tr;
/*enum
{
TR_AllSolid,
@ -16,60 +18,59 @@
static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
{
cell *cPtr = &params[1];
int type = params[2];
TraceResult *tr = (TraceResult*)((void *)cPtr);
int type = params[1];
//TraceResult *tr = (TraceResult*)((void *)cPtr);
if (*params / sizeof(cell) < 3)
if (*params / sizeof(cell) < 2)
return 0; //TODO: Error
cell *ptr = MF_GetAmxAddr(amx, params[3]);
cell *ptr = MF_GetAmxAddr(amx, params[2]);
edict_t *e = 0;
switch (type)
{
case TR_AllSolid:
{
tr->fAllSolid = *ptr;
gfm_tr->fAllSolid = *ptr;
return 1;
break;
}
case TR_StartSolid:
{
return tr->fStartSolid;
return gfm_tr->fStartSolid;
break;
}
case TR_InWater:
{
tr->fInWater = *ptr;
gfm_tr->fInWater = *ptr;
return 1;
break;
}
case TR_flFraction:
{
tr->flFraction = amx_ctof(*ptr);
gfm_tr->flFraction = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecEndPos:
{
tr->vecEndPos.x = amx_ctof(ptr[0]);
tr->vecEndPos.y = amx_ctof(ptr[1]);
tr->vecEndPos.z = amx_ctof(ptr[2]);
gfm_tr->vecEndPos.x = amx_ctof(ptr[0]);
gfm_tr->vecEndPos.y = amx_ctof(ptr[1]);
gfm_tr->vecEndPos.z = amx_ctof(ptr[2]);
return 1;
break;
}
case TR_flPlaneDist:
{
tr->flPlaneDist = amx_ctof(*ptr);
gfm_tr->flPlaneDist = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecPlaneNormal:
{
tr->vecPlaneNormal.x = amx_ctof(ptr[0]);
tr->vecPlaneNormal.y = amx_ctof(ptr[1]);
tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
gfm_tr->vecPlaneNormal.x = amx_ctof(ptr[0]);
gfm_tr->vecPlaneNormal.y = amx_ctof(ptr[1]);
gfm_tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
return 1;
break;
}
@ -78,13 +79,13 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
e = INDEXENT(*ptr);
if (!e || FNullEnt(e))
return 0; //TODO: return error
tr->pHit = e;
gfm_tr->pHit = e;
return 1;
break;
}
case TR_iHitgroup:
{
tr->iHitgroup = *ptr;
gfm_tr->iHitgroup = *ptr;
return 1;
break;
}
@ -98,68 +99,66 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
{
cell *cPtr = &params[1];
int type = params[2];
TraceResult *tr = (TraceResult*)((void *)cPtr);
int type = params[1];
cell *ptr = 0;
switch (type)
{
case TR_AllSolid:
{
return tr->fAllSolid;
return gfm_tr->fAllSolid;
break;
}
case TR_StartSolid:
{
return tr->fStartSolid;
return gfm_tr->fStartSolid;
break;
}
case TR_InWater:
{
return tr->fInWater;
return gfm_tr->fInWater;
break;
}
case TR_flFraction:
{
ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flFraction);
ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flFraction);
return 1;
break;
}
case TR_vecEndPos:
{
ptr = MF_GetAmxAddr(amx, params[3]);
ptr[0] = amx_ftoc(tr->vecEndPos.x);
ptr[1] = amx_ftoc(tr->vecEndPos.y);
ptr[2] = amx_ftoc(tr->vecEndPos.z);
ptr = MF_GetAmxAddr(amx, params[2]);
ptr[0] = amx_ftoc(gfm_tr->vecEndPos.x);
ptr[1] = amx_ftoc(gfm_tr->vecEndPos.y);
ptr[2] = amx_ftoc(gfm_tr->vecEndPos.z);
return 1;
break;
}
case TR_flPlaneDist:
{
ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flPlaneDist);
ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flPlaneDist);
return 1;
break;
}
case TR_vecPlaneNormal:
{
ptr = MF_GetAmxAddr(amx, params[3]);
ptr[0] = amx_ftoc(tr->vecPlaneNormal.x);
ptr[1] = amx_ftoc(tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(tr->vecPlaneNormal.z);
ptr = MF_GetAmxAddr(amx, params[2]);
ptr[0] = amx_ftoc(gfm_tr->vecPlaneNormal.x);
ptr[1] = amx_ftoc(gfm_tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(gfm_tr->vecPlaneNormal.z);
return 1;
break;
}
case TR_pHit:
{
return ENTINDEX(tr->pHit);
return ENTINDEX(gfm_tr->pHit);
break;
}
case TR_iHitgroup:
{
return tr->iHitgroup;
return gfm_tr->iHitgroup;
break;
}
default: