Jump to content

Radar area problem.


Recommended Posts

Hi everyone.

I'm having issues with calculations for a radar area, for some reason is not creating it where it should:

My code:

                local width, height = math.abs ( x2 - x ), math.abs ( y2 - y ) 
                if ( x2 < x ) then 
                    local tempx = x2 
                    x2 = x 
                    x = tempx 
                end 
                if ( y2 < y ) then 
                    local tempy = y2 
                    y2 = y 
                    y = tempy 
                end 

And the screenshot of the problem:

http://i.imgur.com/pNEwh.jpg

The RED rectangle is the radar area created by script, and the GREEN is where the radar area should be.

I hope someone can help me with this issue.

Thanks in advance.

Link to comment

hmmm, well, after the width and height has been released, the script checks if x2/y2 < x/y now,

I'm not sure, but try putting the width and height part after the that little check.

  
                if ( x2 < x ) then 
                    local tempx = x2 
                    x2 = x 
                    x = tempx 
                end 
                if ( y2 < y ) then 
                    local tempy = y2 
                    y2 = y 
                    y = tempy 
                end 
            local width, height = math.abs ( x2 - x ), math.abs ( y2 - y ) 

Link to comment

Easy: compare x and x2 values with abs (so you won't have problem whereever you are)

  
            if math.abs(x2) > math.abs(x) then 
                local tempx = x2 
                x2 = x 
                x = tempx 
            end 
            if math.abs(y2) > math.abs(y) then 
                local tempy = y2 
                y2 = y 
                y = tempy 
            end 
            local width, height = math.abs ( x2 - x ), math.abs ( y2 - y ) 
  

Link to comment

What about after you get x coord take away the width of the area to get correct x?

x = x - width; -- or whichever x you use as the first argument in createRadarArea 

TIP: You can swap values in Lua as following:

x, x2 = x2, x; 

Link to comment
Easy: compare x and x2 values with abs (so you won't have problem whereever you are)
  
            if math.abs(x2) > math.abs(x) then 
                local tempx = x2 
                x2 = x 
                x = tempx 
            end 
            if math.abs(y2) > math.abs(y) then 
                local tempy = y2 
                y2 = y 
                y = tempy 
            end 
            local width, height = math.abs ( x2 - x ), math.abs ( y2 - y ) 
  

With this the result is the following: http://i.imgur.com/rmH12.jpg

Edit: With this:

                if math.abs(x2) > math.abs(x) then 
                    local tempx = x2 
                    x2 = x 
                    x = tempx 
                end 
                if math.abs(y2) > math.abs(y) then 
                    local tempy = y2 
                    y2 = y 
                    y = tempy 
                end 
                local width, height = math.abs ( x2 - x ), math.abs ( y2 - y ) 
                x = x - width 

In Los Santos it works fine, but then in other places like Las Venturas it bugs like this: http://i.imgur.com/Gfc0x.jpg

Link to comment

Why use math.abs to compare values? Doesn't matter where you are, if you get bottomX and bottomY values, they will always be smaller then topX and topY (since topX and topY are equal to bottomX + width and bottomY + height).

Use math.abs only to calculate width and height only.

Lets say you are in the x < 0 and y < 0 quadrant (which is quadrant III -> http://en.wikipedia.org/wiki/Quadrant_(plane_geometry))

x = -1245 
y = -130 
topX = -1200 
topY = -10 
  
x < topX and y < topY -- this is true if you do math.abs for these, it will be false because then: x > topX and y > bottomY 

Your last screenshot shows that you need to add height or radar area to bottomY coord.

Link to comment

Give an example of 2 areas you use: x, x2, y, y2 (from different quadrants, follow the link from previous post if you don't know what I mean by quadrants). I'm not sure if the coords you use are what I think they are. It's simple maths but if you get the coords wrong the result will be wrong.

Link to comment

I copied it exactly like the script output, this makes it the same:

local x = ( x - width ) 

Area 1:

x = 1524.0031738281 
x2 = 1440.0651855469 
y = -1725.3817138672 
y2 = -1600.7269287109 

Area 2:

x = 2389.6433105469 
x2 = 2256.5837402344 
y = 1347.0687255859 
y2 = 1219.8205566406 

Link to comment

Your coords are wrong. They should be as swapped.

Area 1:

x = 1440.0651855469; 
y = -1725.3817138672; 
x2 = 1524.0031738281; 
y2 = -1600.7269287109; 

Area 2:

x = 2256.5837402344; 
y = 1219.8205566406; 
x2 = 2389.6433105469; 
y2 = 1347.0687255859; 

Width and height:

width = math.abs( x2 - x ); 
height = math.abs( y2 - y ); 
createRadarArea( x, y, width, height ); 

You should get coords in the following manner:

25hl4ya.png

Link to comment

I'm creating it like you say, but still bugged.

Current code:

                if ( x2 > x ) then 
                    local tempx = x2 
                    x2 = x 
                    x = tempx 
                end 
                if ( y2 > y ) then 
                    local tempy = y2 
                    y2 = y 
                    y = tempy 
                end 
                width = math.abs( x2 - x ) 
                height = math.abs( y2 - y ) 
                local x = ( x - width ) 

Screenshot: http://i.imgur.com/Fc2Ec.jpg

Link to comment

This is all you need:

                width = math.abs( x2 - x ) 
                height = math.abs( y2 - y ) 

You don't need to swap coords.

Try this (just copy'n'pase in onResourceStart):

x = 1440.0651855469; 
y = -1725.3817138672; 
x2 = 1524.0031738281; 
y2 = -1600.7269287109; 
width = math.abs( x2 - x ); -- width = 1524 - 1440 = 84 
height = math.abs( y2 - y ); -- height = -1600 - (-1725) = -1600 + 1725 = 125 
createRadarArea( x, y, width, height ); 

Link to comment

That's all you need. Just replace the x, y, x2 and y2 with coords of other areas but remember to follow the rules I showed you on the picture previously and it should always create the area correctly. I think your coords are little messed up and that's the reason it fails or you have some more calculations which are not necessary.

Link to comment
x = 1440.0651855469; 
y = -1725.3817138672; 
x2 = 1524.0031738281; 
y2 = -1600.7269287109; 
width = math.abs( x2 - x ); -- width = 1524 - 1440 = 84 
height = math.abs( y2 - y ); -- height = -1600 - (-1725) = -1600 + 1725 = 125 
createRadarArea( x, y, width, height ); 

I replaced these coordinates with ones from the Pyramid at Las Venturas and now it doesn't even appear.

My coords:

x = 2255.3669433594; 
y = 1344.3487548828; 
x2 = 2255.3669433594; 
y2 = 1219.9694824219; 
width = math.abs( x2 - x ); 
height = math.abs( y2 - y ); 
createRadarArea( x, y, width, height ); 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...