18.11.2016, 20:15
IsFreePath: verifica si el recorrido hasta cierta distancia estб libre (mediante las coordenadas y el бngulo especificado). Retorna 1 si el camino estб libre, caso contrario retorna 0.
GetFreePath: es como la funciуn anterior, pero йsta buscarб un camino que estй libre.
Code:
stock IsFreePath(Float:fX, Float:fY, Float:fZ, const Float:angle, const Float:max_dist, const Float:z_dif = 1.5) { new Float:i, Float:Z, Float:sin = floatsin(-angle, degrees), Float:cos = floatcos(-angle, degrees); for(i = 0.0; i < max_dist; i += 0.25) { MapAndreas_FindZ_For2DCoord(fX + (i * sin), fY + (i * cos), Z); if(Z - fZ < z_dif) continue; return 0; } return 1; }
Code:
stock GetFreePath(Float:fX, Float:fY, Float:fZ, Float:angle, const Float:z_dif = 2.0) { new Float:i, Float:Z; for(i = angle; i < 360.0; i += 30.0) { MapAndreas_FindZ_For2DCoord(fX + (5.0 * floatsin(-i, degrees)), fY + (5.0 * floatcos(-i, degrees)), Z); if(Z - fZ < z_dif) { fX += 5.0 * floatsin(-i, degrees); fY += 5.0 * floatcos(-i, degrees); fZ = Z + 0.9; return 1; } } for(new Float:i = 0.0; i < angle; i += 30.0) { MapAndreas_FindZ_For2DCoord(fX + (5.0 * floatsin(-i, degrees)), fY + (5.0 * floatcos(-i, degrees)), Z); if(Z - fZ < z_dif) { fX += 5.0 * floatsin(-i, degrees); fY += 5.0 * floatcos(-i, degrees); fZ = Z + 0.9; return 1; } } return 0; }