Advertisement
DaxSoft

Ultimate Sensor Event 3.5

Jun 18th, 2015
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.75 KB | None | 0 0
  1. #==============================================================================
  2. # • Ultimate Sensor Event
  3. #==============================================================================
  4. # Autor: Dax
  5. # Requerimento: Dax Core
  6. # Versão: 3.5
  7. # Site: www.dax-soft.weebly.com
  8. #==============================================================================
  9. # @tiagoms : Feedback que ajudou a incrementar mais.
  10. #==============================================================================
  11. # • Descrição:
  12. #------------------------------------------------------------------------------
  13. # Um sistema de sensor, onde permite diferentes tipos de formas dos eventos
  14. # "sentir" a presença do jogador.
  15. #==============================================================================
  16. # • Como usar: Utilze os comandos em condições.
  17. #------------------------------------------------------------------------------
  18. # a : área em quadrados(tiles) em que o sensor será ativado. Por padrão é 1
  19. # b : ID do evento. Se definir nada, é o evento local. Por padrão é o evento local.
  20. #------------------------------------------------------------------------------
  21. # • [1.0]
  22. # 1 * Primeiro tipo de sensor, e o sensor de área. O comando para usar esse
  23. # tipo de sensor é o : sarea?(a, b) :
  24. # 2 * Sensor que verifica se está em baixo do evento..: sfront?(a, b)
  25. # 3 * Sensor que verifica se está em cima do evento..: sago?(a, b)
  26. # 4 * Sensor que verifica se está a esquerda do evento: sleft?(a, b)
  27. # 5 * Sensor que verifica se está a direita do evento: sright?(a, b)
  28. # 6 * Sensor que faz uma verificação em forma de cruz: scross?(a, b)
  29. # 7 * Sensor que verifica se está somente na visão do evento: svision?(a, b)
  30. # 8 * Sensor que verifica se está sobre o evento.. sabout?(b)
  31. # • [2.0~2.5] :
  32. # 9 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b)
  33. # 10 * Sensor que verifica se está somente a esquerda do evento. vleft?(a, b)
  34. # 11 * Sensor que verifica se está somente a direita do evento. vright?(a, b)
  35. # • [3.0] :
  36. # 14 * Sensor que verifica a esquerda-superior na diagonal. dsleft?(a, b)
  37. # 15 * Sensor que verifica a esquerda-inferior na diagonal. dileft?(a, b)
  38. # 16 * Sensor que verifica a direita-superior na diagonal. dsright?(a, b)
  39. # 17 * Sensor que verifica a direita-inferior na diagonal. diright?(a, b)
  40. # 18 * Sensor que verifica em todos os lados na diagonal. diagonal?(a, b)
  41. # 19 * Sensor que verifica em forma de círculo. scircle?(a, b)
  42. # 20 * Sensor que verifica a diagonal de acordo com a visão do evento. vdiagonal?(a, b)
  43. # • [3.5] :
  44. # 21 * Sensor que verifica em retângulo/quadrado na visão do npc.
  45. # De acordo com a visão do jogador. scubic?(a, b)
  46. #------------------------------------------------------------------------------
  47. # * Atenção, o item 2 á 5 são estáticos, ou seja,
  48. # serão fixos independente da direção em que o evento esteja
  49. # * Os itens 7, 9, 10, 11: Em uma linha reta
  50. #==============================================================================
  51. Dax.register(:sensor_event, "Dax", 3.5, "12/07/14")
  52. #==============================================================================
  53. # • Game_Interpreter
  54. #==============================================================================
  55. class Game_Interpreter
  56. #----------------------------------------------------------------------------
  57. # • Inicialização do objeto
  58. #----------------------------------------------------------------------------
  59. alias :_sensorEvent_init :initialize
  60. def initialize(*args)
  61. _sensorEvent_init
  62. @_nozero = ->(number) { return (number < 0 || number.nil? ? 1 : number.to_i) }
  63. end
  64. #----------------------------------------------------------------------------
  65. # • Pega as coordenadas do evento é do player.
  66. #----------------------------------------------------------------------------
  67. def block_sensor(b=nil)
  68. event = $game_map.events[b.nil? ? @event_id : Integer(b)]
  69. yield(event.x, event.y, $game_player.x, $game_player.y)
  70. end
  71. #----------------------------------------------------------------------------
  72. # • Sensor por área.
  73. #----------------------------------------------------------------------------
  74. def sarea?(a=1, b=nil)
  75. a = @_nozero[a]
  76. distance = DMath.distance_sensor($game_player, $game_map.events[b.nil? ? @event_id : Integer(b)])
  77. return (distance <= a)
  78. end
  79. #----------------------------------------------------------------------------
  80. # • Sensor na frente do evento.
  81. #----------------------------------------------------------------------------
  82. def sfront?(a=1, b=nil)
  83. a = @_nozero[a]
  84. block_sensor(b) { |ex, ey, px, py|
  85. return unless px == ex
  86. (ey..(ey + a)).each { |y|
  87. break unless $game_map.passable?(ex, y, 2)
  88. return true if py == y
  89. }
  90. }
  91. return false
  92. end
  93. #----------------------------------------------------------------------------
  94. # • Sensor atrás do evento.
  95. #----------------------------------------------------------------------------
  96. def sago?(a=1, b=nil)
  97. a = @_nozero[a]
  98. block_sensor(b) { |ex, ey, px, py|
  99. return unless px == ex
  100. ey.downto(ey - a).each { |y|
  101. break unless $game_map.passable?(ex, y, 8)
  102. return true if py == y
  103. }
  104. }
  105. return false
  106. end
  107. #----------------------------------------------------------------------------
  108. # • Sensor quando estiver sobre o evento.
  109. #----------------------------------------------------------------------------
  110. def sabout?(b=nil)
  111. block_sensor(b) { |ex, ey, px, py| return true if px == ex && py == ey }
  112. return false
  113. end
  114. #----------------------------------------------------------------------------
  115. # • Sensor quando estiver a direita do evento.
  116. #----------------------------------------------------------------------------
  117. def sright?(a=1, b=nil)
  118. a = @_nozero[a]
  119. block_sensor(b) {|ex, ey, px, py|
  120. return unless py == ey
  121. (ex..(ex + a)).each { |x|
  122. break unless $game_map.passable?(x, ey, 6)
  123. return true if px == x
  124. }
  125. }
  126. return false
  127. end
  128. #----------------------------------------------------------------------------
  129. # • Sensor quando estiver a esquerda do evento.
  130. #----------------------------------------------------------------------------
  131. def sleft?(a=1, b=nil)
  132. a = @_nozero[a]
  133. block_sensor(b) {|ex, ey, px, py|
  134. return unless py == ey
  135. ex.downto(ex - a).each { |x|
  136. break unless $game_map.passable?(x, ey, 4)
  137. return true if px == x
  138. }
  139. }
  140. return false
  141. end
  142. #----------------------------------------------------------------------------
  143. # • Sensor em forma de cruz.
  144. #----------------------------------------------------------------------------
  145. def scross?(a=1, b=nil)
  146. sfront?(a, b) || sago?(a, b) || sright?(a, b) || sleft?(a, b)
  147. end
  148. #----------------------------------------------------------------------------
  149. # • Sensor que verifica somente a visão do evento.
  150. #----------------------------------------------------------------------------
  151. def svision?(a=1, b=nil)
  152. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  153. when 2 then sfront?(a, b)
  154. when 4 then sleft?(a, b)
  155. when 6 then sright?(a, b)
  156. when 8 then sago?(a, b)
  157. end
  158. end
  159. #----------------------------------------------------------------------------
  160. # • Sensor que verifica se está somente atrás do evento.
  161. #----------------------------------------------------------------------------
  162. def sbehind?(a=1, b=nil)
  163. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  164. when 2 then sago?(a, b)
  165. when 4 then sright?(a, b)
  166. when 6 then sleft?(a, b)
  167. when 8 then sfront?(a, b)
  168. end
  169. end
  170. #----------------------------------------------------------------------------
  171. # • Sensor que verifica se está somente a esquerda do evento.
  172. #----------------------------------------------------------------------------
  173. def vleft?(a=1, b=nil)
  174. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  175. when 2 then sright?(a, b)
  176. when 4 then sfront?(a, b)
  177. when 6 then sago?(a, b)
  178. when 8 then sleft?(a, b)
  179. end
  180. end
  181. #----------------------------------------------------------------------------
  182. # • Sensor que verifica se está somente a direita do evento.
  183. #----------------------------------------------------------------------------
  184. def vright?(a=1, b=nil)
  185. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  186. when 2 then sleft?(a, b)
  187. when 4 then sfront?(a, b)
  188. when 6 then sago?(a, b)
  189. when 8 then sright?(a, b)
  190. end
  191. end
  192. #----------------------------------------------------------------------------
  193. # • Sensor que verifica o lado esquerdo-superior na diagonal.
  194. #----------------------------------------------------------------------------
  195. def dsleft?(a=1, b=nil)
  196. a = @_nozero[a]
  197. block_sensor(b) {|ex, ey, px, py|
  198. 0.upto(a) { |i| return true if px == (ex - i) and py == (ey - i) }
  199. }
  200. return false
  201. end
  202. #----------------------------------------------------------------------------
  203. # • Sensor que verifica o lado direito-superior na diagonal.
  204. #----------------------------------------------------------------------------
  205. def dsright?(a=1, b=nil)
  206. a = @_nozero[a]
  207. block_sensor(b) {|ex, ey, px, py|
  208. 0.upto(a) { |i| return true if px == (ex + i) and py == (ey - i) }
  209. }
  210. return false
  211. end
  212. #----------------------------------------------------------------------------
  213. # • Sensor que verifica o lado esquerdo-inferior na diagonal.
  214. #----------------------------------------------------------------------------
  215. def dileft?(a=1, b=nil)
  216. a = @_nozero[a]
  217. block_sensor(b) {|ex, ey, px, py|
  218. 0.upto(a) { |i| return true if px == (ex - i) and py == (ey + i) }
  219. }
  220. return false
  221. end
  222. #----------------------------------------------------------------------------
  223. # • Sensor que verifica o lado direito-inferior na diagonal.
  224. #----------------------------------------------------------------------------
  225. def diright?(a=1, b=nil)
  226. a = @_nozero[a]
  227. block_sensor(b) {|ex, ey, px, py|
  228. 0.upto(a) { |i| return true if px == (ex + i) and py == (ey + i) }
  229. }
  230. return false
  231. end
  232. #----------------------------------------------------------------------------
  233. # • Sensor que verifica a diagonal em todos os lados.
  234. #----------------------------------------------------------------------------
  235. def diagonal?(a=1, b=nil)
  236. dsleft?(a, b) || dsright?(a, b) || dileft?(a, b) || diright?(a, b)
  237. end
  238. #----------------------------------------------------------------------------
  239. # • Sensor que verifica a diagonal de acordo com a visão do evento.
  240. #----------------------------------------------------------------------------
  241. def vdiagonal?(a=1, b=nil)
  242. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  243. when 2 then dileft?(a, b) || diright?(a, b)
  244. when 4 then dsleft?(a, b) || dileft?(a, b)
  245. when 6 then dsright?(a, b) || diright?(a, b)
  246. when 8 then dsleft?(a, b) || dsright?(a, b)
  247. end
  248. end
  249. #----------------------------------------------------------------------------
  250. # • Sensor que verifica em forma de círculo.
  251. #----------------------------------------------------------------------------
  252. def scircle?(a=2, b=nil)
  253. a = a < 2 ? 2 : a
  254. diagonal?(a-1, b) || scross?(a, b)
  255. end
  256. #----------------------------------------------------------------------------
  257. # • Sensor que verifica em retângulo/quadrado na visão do npc.
  258. #----------------------------------------------------------------------------
  259. def scubic?(a=3, b=nil)
  260. a = @_nozero[a]
  261. case $game_map.events[b.nil? ? @event_id : Integer(b)].direction
  262. when 2 #back
  263. block_sensor(b) {|ex, ey, px, py|
  264. (ex - (a - 2)).upto(ex + (a - 2)).each { |x|
  265. (ey).upto(ey+a).each { |y|
  266. return true if px == x and py == y
  267. }
  268. }
  269. }
  270. when 4 #left
  271. block_sensor(b) {|ex, ey, px, py|
  272. a.next.times { |i|
  273. ( ey - (a - 2) ).upto(ey+(a - 2)).each { |y|
  274. return true if px == ex - i and py == y
  275. }
  276. }
  277. }
  278. when 6 #right
  279. block_sensor(b) {|ex, ey, px, py|
  280. a.next.times { |i|
  281. ( ey - (a - 2) ).upto(ey+(a - 2)).each { |y|
  282. return true if px == ex + i and py == y
  283. }
  284. }
  285. }
  286. when 8 #up
  287. block_sensor(b) {|ex, ey, px, py|
  288. (ex - (a - 2)).upto(ex + (a - 2)).each { |x|
  289. (ey).downto(ey-a).each { |y|
  290. return true if px == x and py == y
  291. }
  292. }
  293. }
  294. end
  295. return false
  296. end
  297. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement