06.01.2017, 02:45
Efectivamente, SetPlayerWorldBounds es igual de efectivo en el caso de los rectбngulos/cuadrados.
De todas formas, para simplificar lo anterior podrнamos hacer algo como esto:
Asн tambiйn podrнamos personalizar un poco mбs nuestros scripts, aсadiendo una condiciуn en OnPlayerLeaveDynamicArea por ejemplo. Con SetPlayerWorldBounds hay que estar cambiando los lнmites continuamente para permitirle al jugador desplazarse fuera de esos lнmites.
De todas formas, para simplificar lo anterior podrнamos hacer algo como esto:
PHP код:
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
if(areaid == mi_area)
{
SendClientMessage(playerid, -1, "No puede abandonar esta zona.");
SetPlayerOnSquareMargin(playerid, areaid);
}
return 1;
}
PHP код:
SetPlayerOnRectangleMargin(playerid, areaid)
{
if(Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_TYPE) == STREAMER_AREA_TYPE_RECTANGLE)
{
new Float:p_coords[3];
new Float:area_coords[4];
GetPlayerPos(playerid, p_coords[0], p_coords[1], p_coords[2]);
area_coords[0] = Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MIN_X);
area_coords[1] = Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MIN_Y);
area_coords[2] = Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MAX_X);
area_coords[3] = Streamer_GetFloatData(STREAMER_TYPE_AREA, areaid, E_STREAMER_MAX_Y);
if(p_coords[0] > area_coords[2])
{
SetPlayerPos(playerid, area_coords[2], p_coords[1], p_coords[2]);
}
else if(p_coords[0] < area_coords[0])
{
SetPlayerPos(playerid, area_coords[0], p_coords[1], p_coords[2]);
}
if(p_coords[1] > area_coords[3])
{
SetPlayerPos(playerid, p_coords[0], area_coords[3], p_coords[2]);
}
else if(p_coords[1] < area_coords[1])
{
SetPlayerPos(playerid, p_coords[0], area_coords[1], p_coords[2]);
}
}
else
{
printf("[ERROR] El бrea %d no es un rectбngulo.");
}
}