Advertisement
DaxSoft

Ultimate Sensor Event 2.0

Sep 9th, 2014
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.82 KB | None | 0 0
  1. #==============================================================================
  2. # • Sensor Event
  3. #==============================================================================
  4. # Autor: Dax
  5. # Requerimento: Dax Core
  6. # Versão: 2.0
  7. # Site: www.dax-soft.weebly.com
  8. #==============================================================================
  9. # • Descrição:
  10. #------------------------------------------------------------------------------
  11. # Um sistema de sensor, onde permite diferentes tipos de formas dos eventos
  12. # "sentir" a presença do jogador.
  13. #==============================================================================
  14. # • Como usar: Utilze os comandos em condições.
  15. #------------------------------------------------------------------------------
  16. # a : área em quadrados(tiles) em que o sensor será ativado. Por padrão é 1
  17. # b : ID do evento. Se definir nada, é o evento local. Por padrão é o evento local.
  18. #------------------------------------------------------------------------------
  19. # 1 * Primeiro tipo de sensor, e o sensor de área. O comando para calcular esse
  20. # tipo de sensor é o : sarea?(a, b) :
  21. # 2 * Sensor que verifica se está em baixo do evento..: sfront?(a, b)
  22. # 3 * Sensor que verifica se está em cima do evento..: sago?(a, b)
  23. # 4 * Sensor que verifica se está a esquerda do evento: sleft?(a, b)
  24. # 5 * Sensor que verifica se está a direita do evento: sright?(a, b)
  25. # 6 * Sensor que faz uma verificação em forma de cruz: scross?(a, b)
  26. # 7 * Sensor que verifica se está somente na visão do evento: svision?(a, b)
  27. # 8 * Sensor que verifica se está sobre o evento.. sabout?(b)
  28. # 9 * Sensor que verifica se está dentro da área de um círculo(formato de um
  29. # círculo) : scircle?(a, b)
  30. # 10 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b)
  31. #==============================================================================
  32. Dax.register(:sensor_event, "Dax", 2.0, "12/07/14")
  33. #==============================================================================
  34. # • Game_Interpreter
  35. #==============================================================================
  36. class Game_Interpreter
  37. #----------------------------------------------------------------------------
  38. # • Pega as coordenadas do evento é do player.
  39. #----------------------------------------------------------------------------
  40. def block_sensor(b=nil)
  41. event = $game_map.events[b.nil? ? @event_id : Integer(b)]
  42. yield(event.x, event.y, $game_player.x, $game_player.y)
  43. end
  44. #----------------------------------------------------------------------------
  45. # • Sensor por área.
  46. #----------------------------------------------------------------------------
  47. def sarea?(a=1, b=nil)
  48. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  49. distance = DMath.distance_sensor($game_player, $game_map.events[b.nil? ? @event_id : Integer(b)])
  50. return (distance <= a)
  51. end
  52. #----------------------------------------------------------------------------
  53. # • Sensor na frente do evento.
  54. #----------------------------------------------------------------------------
  55. def sfront?(a=1, b=nil)
  56. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  57. block_sensor(b) { |ex, ey, px, py|
  58. return unless px == ex
  59. (ey..(ey + a)).each { |y|
  60. break unless $game_map.passable?(ex, y, 2)
  61. return true if py == y
  62. }
  63. }
  64. return false
  65. end
  66. #----------------------------------------------------------------------------
  67. # • Sensor atrás do evento.
  68. #----------------------------------------------------------------------------
  69. def sago?(a=1, b=nil)
  70. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  71. block_sensor(b) { |ex, ey, px, py|
  72. return unless px == ex
  73. ey.downto(ey - a).each { |y|
  74. break unless $game_map.passable?(ex, y, 8)
  75. return true if py == y
  76. }
  77. }
  78. return false
  79. end
  80. #----------------------------------------------------------------------------
  81. # • Sensor quando estiver sobre o evento.
  82. #----------------------------------------------------------------------------
  83. def sabout?(b=nil)
  84. block_sensor(b) { |ex, ey, px, py| return true if px == ex && py == ey }
  85. return false
  86. end
  87. #----------------------------------------------------------------------------
  88. # • Sensor quando estiver a direita do evento.
  89. #----------------------------------------------------------------------------
  90. def sright?(a=1, b=nil)
  91. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  92. block_sensor(b) {|ex, ey, px, py|
  93. return unless py == ey
  94. (ex..(ex + a)).each { |x|
  95. break unless $game_map.passable?(x, ey, 6)
  96. return true if px == x
  97. }
  98. }
  99. return false
  100. end
  101. #----------------------------------------------------------------------------
  102. # • Sensor quando estiver a esquerda do evento.
  103. #----------------------------------------------------------------------------
  104. def sleft?(a=1, b=nil)
  105. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  106. block_sensor(b) {|ex, ey, px, py|
  107. return unless py == ey
  108. ex.downto(ex - a).each { |x|
  109. break unless $game_map.passable?(x, ey, 4)
  110. return true if px == x
  111. }
  112. }
  113. return false
  114. end
  115. #----------------------------------------------------------------------------
  116. # • Sensor em forma de cruz.
  117. #----------------------------------------------------------------------------
  118. def scross?(a=1, b=nil)
  119. sfront?(a, b) || sago?(a, b) || sright?(a, b) || sleft?(a, b)
  120. end
  121. #----------------------------------------------------------------------------
  122. # • Sensor que verifica somente a visão do evento.
  123. #----------------------------------------------------------------------------
  124. def svision?(a=1, b=nil)
  125. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  126. when 2 then sfront?(a, b)
  127. when 4 then sleft?(a, b)
  128. when 6 then sright?(a, b)
  129. when 8 then sago?(a, b)
  130. end
  131. end
  132. #----------------------------------------------------------------------------
  133. # • Sensor que verifica em forma de círculo.
  134. #----------------------------------------------------------------------------
  135. def scircle?(a=1, b=nil)
  136. a = a < 0 || a.nil? ? 1 : Integer(a).abs
  137. block_sensor(b) {|ex, ey, px, py|
  138. sr = [ (px - ex).abs, (py - ey).abs ]
  139. return true if sr[0] + sr[1] <= a
  140. }
  141. return false
  142. end
  143. #----------------------------------------------------------------------------
  144. # • Sensor que verifica se está somente atrás do evento.
  145. #----------------------------------------------------------------------------
  146. def sbehind?(a=1, b=nil)
  147. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  148. when 2 then sago?(a, b)
  149. when 4 then sright?(a, b)
  150. when 6 then sleft?(a, b)
  151. when 8 then sfront?(a, b)
  152. end
  153. end
  154. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement