Vlue

Proximity

Aug 5th, 2012
8,625
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ##Proximity Detection Script v1.5a
  2. #
  3. #Usage: Functions mainly used to activate events when within a certain range!
  4. #
  5. #Functions:
  6. #  Proxy.inprox?(@event_id, distance, los)
  7. #    -distance is the range of detection and los is whether to use line of sight,
  8. #     both have default values
  9. #  Proxy.inprox_d?(@event_id, distance, los)
  10. #    -same as original but only checks in the direction the event is facing
  11. #  Proxy.inprox_r?(@event_id, width, height)
  12. #    -checks a rectangle of width/height around the event (odd values best)
  13. #
  14. # All calls return true if within range and false when not
  15. #
  16. #Examples:
  17. # Proxy.inprox?(@event_id)
  18. # Proxy.inprox?(@event_id,10)
  19. # Proxy.inprox?(@event_id,5,false)
  20. # Proxy.inprox_d?(@event_id,6)
  21. # Proxy.inprox_r?(@event_id,3,3)
  22. #
  23. #------#
  24. #-- Script by: V.M of D.T
  25. #
  26. #- Questions or comments can be:
  27. #    given by email: sumptuaryspade@live.ca
  28. #    provided on facebook: http://www.facebook.com/DaimoniousTailsGames
  29. #   All my other scripts and projects can be found here: http://daimonioustails.weebly.com/
  30. #
  31. #--- Free to use in any project, commercial or non-commercial, with credit given
  32. # - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
  33.  
  34.  
  35. module Proxy
  36.   #Default radius of detection:
  37.   PROXYRANGE = 4
  38.   #Region for transparent obstacles
  39.   REGION = 20
  40.   #Switch to be turned on to pause Proximity
  41.   PAUSE_SWITCH = 100
  42.   #----#
  43.   def self.inprox?(id, distance = PROXYRANGE, los = true, second_id = nil)
  44.     return if $game_switches[PAUSE_SWITCH]
  45.     x = $game_map.events[id].x
  46.     y = $game_map.events[id].y
  47.     if !second_id
  48.       x2 = $game_player.x; y2 = $game_player.y
  49.     else
  50.       x2 = $game_map.events[second_id].x;y2 = $game_map.events[second_id].y
  51.     end
  52.     x_d = x - x2; y_d = y - y2
  53.     x_d *= -1 if x_d < 0; y_d *= -1 if y_d < 0
  54.     t_d = x_d + y_d
  55.     return false if t_d > distance
  56.     return false if !line_of_sight($game_player.x,$game_player.y,x,y) and los
  57.     return true
  58.   end
  59.   def self.inprox_d?(id, distance = PROXYRANGE, los = true)
  60.     if self.inprox?(id, distance, los) then else return false end
  61.     x1 = $game_player.x; x2 = $game_map.events[id].x
  62.     y1 = $game_player.y; y2 = $game_map.events[id].y
  63.     x1 > x2 ? xx = x1 - x2 : xx = x2 - x1
  64.     y1 > y2 ? yy = y1 - y2 : yy = y2 - y1
  65.     case $game_map.events[id].direction
  66.     when 2
  67.       if $game_player.y > $game_map.events[id].y then
  68.         if yy >= xx then return true end end
  69.     when 4
  70.       if $game_player.x < $game_map.events[id].x then
  71.         if xx >= yy then return true end end
  72.     when 6
  73.       if $game_player.x > $game_map.events[id].x then
  74.         if xx >= yy then return true end end
  75.     when 8
  76.       if $game_player.y < $game_map.events[id].y then
  77.         if yy >= xx then return true end end
  78.     end
  79.     return false
  80.   end
  81.   def self.inprox_r?(id, width, height)
  82.     return if $game_switches[PAUSE_SWITCH]
  83.     width % 2 == 0 ? hwidth = width / 2 : hwidth = (width - 1) / 2
  84.     height % 2 == 0 ? hheight = height / 2 : hheight = (height - 1) / 2
  85.     x = $game_map.events[id].x - hwidth
  86.     y = $game_map.events[id].y - hheight
  87.     if $game_player.x >= x and $game_player.x < (x + width)
  88.       if $game_player.y >= y and $game_player.y < (y + height)
  89.         return true
  90.       end
  91.     end
  92.     return false
  93.   end
  94.   def self.line_of_sight(x,y,x2,y2)
  95.     tile_array = []
  96.     x_d = x - x2; y_d = y - y2
  97.     x_d *= -1 if x_d < 0
  98.     y_d *= -1 if y_d < 0
  99.     t_d = x_d + y_d
  100.     t_d.to_i.times do |i|
  101.       x_distance = x - x2
  102.       y_distance = y - y2
  103.       x_distance *= -1 if x_distance < 0
  104.       y_distance *= -1 if y_distance < 0
  105.       if x_distance > y_distance or y_distance == 0
  106.         x < x2 ? x += 1 : x -= 1
  107.       elsif
  108.         y < y2 ? y += 1 : y -= 1 or x_distance == 0
  109.       end
  110.       tile_array.push([x,y])
  111.     end
  112.     tile_array.each do |cord|
  113.       next if $game_map.region_id(cord[0],cord[1]) == REGION
  114.       return false if !$game_map.check_passage(cord[0], cord[1], 0x002)
  115.     end
  116.     return true
  117.   end
  118. end
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×