Merge pull request #259 from Nextra/engine-fix
Engine: Fix bcompat and consistency for CHECK_ENTITY
This commit is contained in:
		@@ -269,38 +269,7 @@ static cell AMX_NATIVE_CALL PointContents(AMX *amx, cell *params)
 | 
			
		||||
static cell AMX_NATIVE_CALL trace_normal(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int iEnt = params[1];
 | 
			
		||||
	CHECK_ENTITY(iEnt);
 | 
			
		||||
 | 
			
		||||
	cell *cStart = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
	cell *cEnd = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
	REAL fStartX = amx_ctof(cStart[0]);
 | 
			
		||||
	REAL fStartY = amx_ctof(cStart[1]);
 | 
			
		||||
	REAL fStartZ = amx_ctof(cStart[2]);
 | 
			
		||||
	REAL fEndX = amx_ctof(cEnd[0]);
 | 
			
		||||
	REAL fEndY = amx_ctof(cEnd[1]);
 | 
			
		||||
	REAL fEndZ = amx_ctof(cEnd[2]);
 | 
			
		||||
 | 
			
		||||
	cell *vRet = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
 | 
			
		||||
	Vector vStart = Vector(fStartX, fStartY, fStartZ);
 | 
			
		||||
	Vector vEnd = Vector(fEndX, fEndY, fEndZ);
 | 
			
		||||
 | 
			
		||||
	TRACE_LINE(vStart, vEnd, dont_ignore_monsters, INDEXENT2(iEnt), &g_tr);
 | 
			
		||||
 | 
			
		||||
	vRet[0] = amx_ftoc(g_tr.vecPlaneNormal.x);
 | 
			
		||||
	vRet[1] = amx_ftoc(g_tr.vecPlaneNormal.y);
 | 
			
		||||
	vRet[2] = amx_ftoc(g_tr.vecPlaneNormal.z);
 | 
			
		||||
 | 
			
		||||
	if (g_tr.flFraction >= 1.0)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL trace_line(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int iEnt = params[1];
 | 
			
		||||
	if (iEnt != -1) {
 | 
			
		||||
	if (iEnt > 0) {
 | 
			
		||||
		CHECK_ENTITY(iEnt);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -318,10 +287,43 @@ static cell AMX_NATIVE_CALL trace_line(AMX *amx, cell *params)
 | 
			
		||||
	Vector vStart = Vector(fStartX, fStartY, fStartZ);
 | 
			
		||||
	Vector vEnd = Vector(fEndX, fEndY, fEndZ);
 | 
			
		||||
 | 
			
		||||
	if (iEnt == -1)
 | 
			
		||||
		TRACE_LINE(vStart, vEnd, ignore_monsters, NULL, &g_tr);
 | 
			
		||||
	else
 | 
			
		||||
	TRACE_LINE(vStart, vEnd, dont_ignore_monsters, iEnt > 0 ? INDEXENT2(iEnt) : NULL, &g_tr);
 | 
			
		||||
 | 
			
		||||
	vRet[0] = amx_ftoc(g_tr.vecPlaneNormal.x);
 | 
			
		||||
	vRet[1] = amx_ftoc(g_tr.vecPlaneNormal.y);
 | 
			
		||||
	vRet[2] = amx_ftoc(g_tr.vecPlaneNormal.z);
 | 
			
		||||
 | 
			
		||||
	if (g_tr.flFraction >= 1.0)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell AMX_NATIVE_CALL trace_line(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int iEnt = params[1];
 | 
			
		||||
	if (iEnt > 0) {
 | 
			
		||||
		CHECK_ENTITY(iEnt);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cell *cStart = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
	cell *cEnd = MF_GetAmxAddr(amx, params[3]);
 | 
			
		||||
	REAL fStartX = amx_ctof(cStart[0]);
 | 
			
		||||
	REAL fStartY = amx_ctof(cStart[1]);
 | 
			
		||||
	REAL fStartZ = amx_ctof(cStart[2]);
 | 
			
		||||
	REAL fEndX = amx_ctof(cEnd[0]);
 | 
			
		||||
	REAL fEndY = amx_ctof(cEnd[1]);
 | 
			
		||||
	REAL fEndZ = amx_ctof(cEnd[2]);
 | 
			
		||||
 | 
			
		||||
	cell *vRet = MF_GetAmxAddr(amx, params[4]);
 | 
			
		||||
 | 
			
		||||
	Vector vStart = Vector(fStartX, fStartY, fStartZ);
 | 
			
		||||
	Vector vEnd = Vector(fEndX, fEndY, fEndZ);
 | 
			
		||||
	
 | 
			
		||||
	if (iEnt > 0)
 | 
			
		||||
		TRACE_LINE(vStart, vEnd, dont_ignore_monsters, INDEXENT2(iEnt), &g_tr);
 | 
			
		||||
	else
 | 
			
		||||
		TRACE_LINE(vStart, vEnd, ignore_monsters, NULL, &g_tr);
 | 
			
		||||
 | 
			
		||||
	edict_t *pHit = g_tr.pHit;
 | 
			
		||||
 | 
			
		||||
@@ -370,7 +372,6 @@ static cell AMX_NATIVE_CALL get_decal_index(AMX *amx, cell *params)
 | 
			
		||||
static cell AMX_NATIVE_CALL get_info_keybuffer(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int iEnt = params[1];
 | 
			
		||||
	
 | 
			
		||||
	if (iEnt != -1) {
 | 
			
		||||
		CHECK_ENTITY(iEnt);
 | 
			
		||||
	}
 | 
			
		||||
@@ -636,7 +637,9 @@ static cell AMX_NATIVE_CALL playback_event(AMX *amx, cell *params)
 | 
			
		||||
	int bparam1;
 | 
			
		||||
	int bparam2;
 | 
			
		||||
	flags = params[1];
 | 
			
		||||
	CHECK_ENTITY(params[2]);
 | 
			
		||||
	if (params[2] > 0) {
 | 
			
		||||
		CHECK_ENTITY(params[2]);
 | 
			
		||||
	}
 | 
			
		||||
	pInvoker=INDEXENT2(params[2]);
 | 
			
		||||
	eventindex=params[3];
 | 
			
		||||
	delay=amx_ctof(params[4]);
 | 
			
		||||
@@ -954,7 +957,7 @@ static cell AMX_NATIVE_CALL trace_forward(AMX *amx, cell *params)
 | 
			
		||||
   cell *cAngles = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
   REAL fGive = amx_ctof(params[3]);
 | 
			
		||||
   int iIgnoreEnt = params[4];
 | 
			
		||||
   if (iIgnoreEnt != -1) {
 | 
			
		||||
   if (iIgnoreEnt > 0) {
 | 
			
		||||
	   CHECK_ENTITY(iIgnoreEnt);
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
@@ -996,10 +999,10 @@ static cell AMX_NATIVE_CALL trace_forward(AMX *amx, cell *params)
 | 
			
		||||
      REAL fUseZ = fStartZ + (REAL)inum;
 | 
			
		||||
      Vector vStart =  Vector(fStartX, fStartY, fUseZ);
 | 
			
		||||
      Vector vEnd = Vector(fEndX, fEndY, fUseZ);
 | 
			
		||||
      if(iIgnoreEnt == -1)
 | 
			
		||||
         TRACE_LINE(vStart, vEnd, ignore_monsters, NULL, &tr);
 | 
			
		||||
      else   
 | 
			
		||||
         TRACE_LINE(vStart, vEnd, dont_ignore_monsters, INDEXENT2(iIgnoreEnt), &tr); 
 | 
			
		||||
      if(iIgnoreEnt > 0)
 | 
			
		||||
		  TRACE_LINE(vStart, vEnd, dont_ignore_monsters, INDEXENT2(iIgnoreEnt), &tr);
 | 
			
		||||
	  else
 | 
			
		||||
		  TRACE_LINE(vStart, vEnd, ignore_monsters, NULL, &tr);
 | 
			
		||||
      fRetX = tr.vecEndPos.x;
 | 
			
		||||
      fRetY = tr.vecEndPos.y;
 | 
			
		||||
      fRetZ = tr.vecEndPos.z;
 | 
			
		||||
 
 | 
			
		||||
@@ -1338,7 +1338,9 @@ static cell AMX_NATIVE_CALL get_entity_pointer(AMX *amx, cell *params) // get_en
 | 
			
		||||
static cell AMX_NATIVE_CALL find_ent_in_sphere(AMX *amx, cell *params)
 | 
			
		||||
{
 | 
			
		||||
	int idx = params[1];
 | 
			
		||||
	CHECK_ENTITY_SIMPLE(idx);
 | 
			
		||||
	if (idx > 0) {
 | 
			
		||||
		CHECK_ENTITY_SIMPLE(idx);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	edict_t *pEnt = INDEXENT2(idx);
 | 
			
		||||
	cell *cAddr = MF_GetAmxAddr(amx, params[2]);
 | 
			
		||||
@@ -1360,7 +1362,9 @@ static cell AMX_NATIVE_CALL find_ent_in_sphere(AMX *amx, cell *params)
 | 
			
		||||
static cell AMX_NATIVE_CALL find_ent_by_class(AMX *amx, cell *params) /* 3 param */
 | 
			
		||||
{
 | 
			
		||||
	int idx = params[1];
 | 
			
		||||
	CHECK_ENTITY_SIMPLE(idx);
 | 
			
		||||
	if (idx > 0) {
 | 
			
		||||
		CHECK_ENTITY_SIMPLE(idx);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	edict_t *pEnt = INDEXENT2(idx);
 | 
			
		||||
 | 
			
		||||
@@ -1498,7 +1502,9 @@ static cell AMX_NATIVE_CALL find_ent_by_owner(AMX *amx, cell *params)  // native
 | 
			
		||||
{
 | 
			
		||||
	int iEnt = params[1];
 | 
			
		||||
	int oEnt = params[3];
 | 
			
		||||
	CHECK_ENTITY_SIMPLE(iEnt);
 | 
			
		||||
	if (iEnt > 0) {
 | 
			
		||||
		CHECK_ENTITY_SIMPLE(iEnt);
 | 
			
		||||
	}
 | 
			
		||||
	CHECK_ENTITY_SIMPLE(oEnt);
 | 
			
		||||
 | 
			
		||||
	edict_t *pEnt = INDEXENT2(iEnt);
 | 
			
		||||
@@ -1534,7 +1540,10 @@ static cell AMX_NATIVE_CALL get_grenade_id(AMX *amx, cell *params)  /* 4 param *
 | 
			
		||||
	int index = params[1];
 | 
			
		||||
	const char *szModel;
 | 
			
		||||
 | 
			
		||||
	CHECK_ENTITY_SIMPLE(params[4]);
 | 
			
		||||
	if (params[4] > 0) {
 | 
			
		||||
		CHECK_ENTITY_SIMPLE(params[4]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CHECK_ENTITY(index);
 | 
			
		||||
 | 
			
		||||
	edict_t* pentFind = INDEXENT2(params[4]);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user