library SafeMoving
{
    private float MinX = - 8000.
    private float MaxX = 23200.
    private float MinY = -31700.
    private float MaxY = -500.
    #define
    {
        SetUnitX=SetUnitXEx
        SetUnitY=SetUnitYEx
        SetUnitPosition=SetUnitPositionEx
    }
    private float CheckX(float x)
    {
        if x>MaxX
        {
            return MaxX
        }
        elseif x<MinX
        {
            return MinX
        }
        return x
    }
    private float CheckY(float y)
    {
        if y>MaxY
        {
            return MaxY
        }
        elseif y<MinY
        {
            return MinY
        }
        return y
    }
    void SetUnitXEx(unit u, float x)
    {
        SetUnit##X(u,CheckX(x))
    }
    void SetUnitYEx(unit u, float y)
    {
        SetUnit##Y(u,CheckY(y))
    }
    void SetUnitPositionEx(unit u, float x, float y)
    {
        SetUnit##Position(u,CheckX(x),CheckY(y))
    }
    void SetUnitXY(unit u, float x, float y)
    {
        SetUnitX(u,x)
        SetUnitY(u,y)
    }
}Координаты указываются вручную, т.к. в некоторых случаях функции возврата координат ректов могут возвращать малость неверные значения. предположительно это баг из за увеличения размера карты выше стандартного максимума.
 
                        
                        
                    
 SNW
                                SNW
                            






 
                    
                
и еще вот не пойму ресурс же не публичный, откуда левые комменты?
Да фаны покоя не дают :\